wait لطفا صبر کنید
02 بهمن 1395
صفحه اصلی  » مقالات
1394/01/15
8938
00

چه زمانی از SQL CLR استفاده کنیم؟

تکنولوژی SQ-L CLR به نسبت دیگر امکانات SQL server خوب عمل کرده و علاوه بر اینکه بر امکانات موجود می افزاید، در مواردی هم از لحاظ کارایی بهتر از TSQL عمل می کند

در اين نوشتار قصد داريم قدري از فوايد و موارد استفاده از اين امكان صحبت كنيم. تكنولوژي SQL CLR به نسبت ديگر امكانات SQL server خوب عمل كرده و علاوه بر اينكه بر امكانات موجود مي افزايد، در مواردي هم از لحاظ كارايي بهتر از TSQL عمل مي كند. البته اين به اين معنا نيست كه جايگزيني براي TSQL باشد، زيرا موارد بسياري هم هستند كه استفاده از TSQL كارايي بهتري را به همراه دارد. به عنوان مثال در مواردي كه ميزان محاسبات بالا و پردازش سطري داريم، مي توان مسئله را با هر دو روش پياده سازي كرد، ولي زمان اجراي صرف شده توسط SQL clr كمتر مي باشد. به عبارتي هر چه پيچيدگي مسئله بيشتر باشد و جداول نيز بزرگتر باشند، SQL CLR آن مسئله را به نسبت TSQL در زمان بهتري حل خواهد كرد.

براي اطلاعات بيشتر از كارايي بدست آمده از SQL CLR مي توانيد تست انجام شده در اين زمينه را مطالعه فرمائيد:

https://www.simple-talk.com/sql/t-sql-programming/clr-performance-testing/

CLR در مقايسه با ديگر قابليت ها (TSQL و XP(Extended SPs)):

در مقايسه با TSQL: معمولا از CLR هنگامي استفاده مي گردد كه قادر به پياده سازي آن با TSQL نباشيم.

1) در صورت امكان از دستورات TSQL (زبان توصيفي) استفاده شود. از زبان هاي ساختاري و پردازش سطري (Row based processing) وقتي استفاده مي شود كه منطق مورد نياز با TSQL قابل پياده سازي نباشد.

2) اگر روند شامل دستورات توصيفي مي باشد، بايد در TSQL نوشته شود.

3) اگر روند شامل پردازش سطري مي گردد، استفاده از CLR كاراتر است.

4) اگر روند شامل هر دو (دسترسي سطري به داده ها و محاسبات) مي شود، بخش ساختاري را به صورت CLR نوشته و در TSQL فراخواني مي كنيم.

در مقايسه با extended stored procedures (XP): قبل از SQL CLR تنها راه ارتباط با بيرون از پايگاه داده از طريق XPها بود. ولي از آنجا كه SQLCLR راهي امن تر و مطمئن تر براي اين ارتباط است توصيه مي شود كه استفاده از XPها با SQLCLR جايگزين شود. در كل اين جايگزيني مزاياي زير را دارد.

· نقض دسترسي توسط كد كاربر باعث از كار افتادن sql server نمي گردد.

· كمبود حافظه در كد كاربري باعث كاهش سرعت sql server و از كارافتادن آن نمي گردد.

· به دليل امكان كنترل و مديريت حافظه و منابع سيستمي توسط sql server كارايي بهتري حاصل مي شود.

· به دليل در نظر گرفته شدن موارد امنيتي در sql server و .net، مشكل امنيتي وجود نخواهد داشت.

البته موارد بالا در مورد sql clr هايي كه به صورت unsafe ثبت شده اند، صدق نمي كنند و اينگونه كدها ممكن است باعث دسترسي غيرمجاز و يا نشت حافظه در sql server گردند.

موارد استفاده از CLR در DB:

در كل از مواردي كه در انها از sql clr استفاده مي شود مي توان به توابع كار با رشته ها (sort و split كردن رشته ها)، regexها (بررسي درستي آدرس هاي IP و يا هر الگوي ديگري)، توابع زمان (به عنوان مثال تبديل زمان فارسي به ميلادي، گرفتن بخش سال و ماه از يك تاريخ و ....)، فراخواني سرويس هاي وب و خيلي موارد ديگر دانست.

1) XPها را با SQL CLR جايگزين كنيد

همانطور كه در بخش قبل بيان شد، XPها ضعف هاي بسياري از جمله كارايي پايين و باگ هاي امنيتي را باعث مي گردند. بدين ترتيب بهترين راه جايگزيني آنها با تكنولوژي SQL CLR مي باشد.

2) اعتبارسنجي داده ها در عمليات بروزرساني (update)

در عمليات بروزرساني داده ها توسط كلاينتهاي مختلف، نياز به اعمال يك سري قوانين مشترك و تضمين همساني داده ها مي باشد. كه هندل كردن آن نيازمند نوشتن كد اعتبارسنجي پيچيده اي در لايه مياني نرم افزار و پايگاه داده مي باشد. با استفاده از sql clrها مي توان اين اعتبار سنجي را به تريگرهاي داخل پايگاه داده محول كرد. بدين ترتيب پايداري و همساني داده ها نيز تضمين مي گردد.

3) كاهش ترافيك شبكه

بعضي الگوريتم ها براي توليد نتيجه نياز به تمام و يا حجم بالايي از داده ها دارند كه بالطبع انتقال آن ميان سرورها هزينه بالايي دارد. قرار دادن اين الگوريتم در دل پايگاه داده هزينه مورد نظر را كاهش مي دهد.

(شايد يك نمونه اش گزارش گيري باشد)

4) نوشتن توابع چند منظوره : مي توان از قابليت هاي محاسباتي بالاي .net براي نوشتن توابع سودمند در sql server استفاده كرد. توابعي با خصوصيات زير:

· داده ها به عنوان پارامتر به تابع انتقال داده مي شوند. (احتمالا منظور اين است كه نياز به ايجاد يك اتصال پايگاه، خواندن داده و بعد انتقال آن از پايگاه به تابع نيست بلكه داده مورد نظر و كد در يك محل قرار دارند)

· درون تابع نيازي به دسترسي به داده ها نيست و يا نياز به دسترسي كم به داده ها است.

· محاسبات پيچيده به روشي مشابه با cursorها در پايگاه داده انجام مي گيرد. بدين ترتيب كه محاسبات بر روي هر سطر در يك زمان انجام ميگيرند.

اين بخش تقريبا بيشترين مزيت sql clr را نشان مي دهد. در تست هاي كارايي مشاهده شده كه به دليل عدم نياز به انتقال داده بين محيط ها، هزينه به مقداري بالايي كاهش يافته و كارايي افزايش مي يابد.

5) تعريف و پياده سازي انواع داده توسط كاربر: مثلا نوع داده "آرايه اي از اعداد اعشاري" كه در كتابخانه SQL Sharp آمده است.

نمونه هايي از موارد استفاده در مقاله "كتابخانه SQLSharp" آمده است.