wait لطفا صبر کنید
صفحه اصلی  » مقالات
1395/12/08
10013
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" آمده است.

تماس با ما

ایمـیل : I N F O @ D E P N A . C O M
 دفتر تهران : خیابان کارگر شمالی - بعد از مسجد النبی - خیابان ابراهیمی (17) - پلاک 140
تلفن:88019001-021
 دفتر قم : خیابان 45 متری صدوقی - 20 متری فجر - خیابان دانش - کوی 14 - پلاک 10
تلفن:32906868-025