PDA

View Full Version : روش های set-based چیستند و چه کابردی دارند؟



amirjalili
یک شنبه 29 فروردین 1389, 09:25 صبح
با سلام..
دوستان منظور از set-based چیه؟
چرا برای افزایش Performance مفیده؟
اگر راهنمایی کوچکی کنید یا منبعی مفید که خودتون خونده باشید معرفی کنید خودم میرم دنبالش.

AminSobati
یک شنبه 29 فروردین 1389, 09:38 صبح
سلام دوست عزیزم،
همونطور که از اسمش پیداست، عملیاتی هست که بر اساس قوانین نظریه مجموعه ها (Sets Theory) رفتار میکنه. کوئری هایی که در بانک Relational به زبان SQL نوشته میشن اصطلاحا Set Based هستند.
بعضی برنامه نویسها عملیاتی که یک Database Engine با منطق Set Based براحتی میتونه انجام بده، سعی میکنند با کد نویسی و منطق پیمایشی پیاده سازی کنند. مثلا اینکه بخواین به جای استفاه از Join، دو جدول رو بخونین و با حلقه تو در تو، همین کار رو انجام بدین که طبعا کندتر خواهد بود.
دیدن این لینک بد نیست:

http://articles.techrepublic.com.com/5100-10878_11-5532304.html

محمد سلیم آبادی
یک شنبه 29 فروردین 1389, 14:21 عصر
سلام،

دوستان منظور از set-based چیه؟
چرا برای افزایش Performance مفیده؟

همانطور که قبلا اشاره کردم. استفاده از Cursor کاملا نحی میشه. چون مشکل عملکردی دارد و بطور قابل توجهی روی عملکرد تاثیر منفی می گذارد.

روش های set-based یا به فارسی مجموعه گرا روش هایی هستند که با عباراتی چون SELECT ، INSERT و UPDATE و نهایتا MERGE نوشته می شوند.

با وجود Recursive CTE، Assignment UPDATE و زبان قدرتمند SQL چرا بایستی به سمت Cursor بریم؟

اگر واقعا نمی توانید منطق کرسری که دارید استفاده می کنید را با کمک روشهای مجموعه گرا پیاده سازی کنید از CLR استفاده کنید.

من معتقد هستم کسانی که کرسر رو تبلیغ و رواج می دهند ضعف جدی در استفاده از زبان SQL دارند.

meysam_pro
دوشنبه 30 فروردین 1389, 10:53 صبح
اگر واقعا نمی توانید منطق کرسری که دارید استفاده می کنید را با کمک روشهای مجموعه گرا پیاده سازی کنید از CLR استفاده کنید.
چرا؟ به چه دلیل؟ اتفاقا استفاده از CLR بسیار نفی میشه(از لحاظ performance). گذشته از اون کار کردن باهاش هم زیاد راحت نیست.


من معتقد هستم کسانی که کرسر رو تبلیغ و رواج می دهند ضعف جدی در استفاده از زبان SQL دارند.
همفکریم.

محمد سلیم آبادی
دوشنبه 30 فروردین 1389, 11:12 صبح
چرا؟ به چه دلیل؟ اتفاقا استفاده از CLR بسیار نفی میشه(از لحاظ performance). گذشته از اون کار کردن باهاش هم زیاد راحت نیست

این باید و نباید ها را از کتاب MCTS Self-Paced Training Kit (Exam 70-433) MS Press استناد می کنم. تنها یک پاراگراف در مورد کرسر بحث شده، و دلیلی برای اینکه چرا باید از CLR استفاده شود آورده نشده است.

http://www.barnamenevis.org/forum/attachment.php?attachmentid=47299&stc=1&d=1271661155

AminSobati
پنج شنبه 02 اردیبهشت 1389, 22:32 عصر
فراموش نکنید که هر چیزی جایگاه خودش رو داره. کرسر اختراع شد به خاطر نیازی که وجود داشت! اگرچه اذعان میکنم بسیاری برنامه نویسها به دلیل عدم آشنایی کافی با قدرت دستورات Set Based به کرسر روی میارن، اما تحت شرایطی استفاه صحیح از کرسر اجتناب ناپذیره. بعنوان مثال نیاز داریم ID مشتریهای حائز شرط رو به SPهای متعدد پاس کنیم تا پردازش و Business Ruleهای متعددی روی اونها اعمال بشه. در اینجا به روش Set Based قادر نیستیم SP فراخوانی کنیم. اگرچه روشهای جایگزینی ابداع شده (از جمله استفاده از Dynamic TSQL که خود من در موردش مقاله نوشتم) اما به این معنی نیست که در این وضعیت الزاما باید کرسر رو کنار بگذاریم. چراکه ذخیره چند ID در حافظه و Fetch کردن اونها حتی در محیطهای پرتراکنش باعث ضعف سیستم نمیشه. در چند نرم افزار این مکانیزم ساده رو در تریگر با تعداد کاربر زیاد Stress Test کردیم و سیستم هیچ ضعفی نشون نداد.