ورود

View Full Version : سوال: Smart save and load



tooraj_azizi_1035
چهارشنبه 17 آذر 1389, 13:05 عصر
سلام،
می خواستم بدانم آیا SQL Server برای ذخیره یک ستون مانند Autonumber (البته نه الزاما) که در آن اعداد پشت سر هم قرار می گیرند به جای ذخیره تک تک اعداد روی دیسک بازه آن ها را ذخیره نمی کند (1 تا 1000). مثلاً 10000 رکورد و همه اعداد پشت سر هم. البته در صورتی که فاصله میان اعداد دقیقاً یک باشد؟
شاید تا زمانی که شکاف میان اعداد بوجود نیامده این کار را می کند. مثلاً: 1 2 3 4 5 6 ...1000 1001 1002...
بروز شکاف: 1 2 3 4 5 6 .... 1000 1100 1200 1350
نظرتان چیست؟ اگر منبعی در این زمینه دارید (ذخیره هوشمند) لطفاً دریغ نکنید، با تشکر.

حمیدرضاصادقیان
چهارشنبه 17 آذر 1389, 15:22 عصر
سلام.
خیر به اینصورت عمل نمیکند.
زیرا فیلد Autonumber شما از نوع عددی هست و در page file ها قرار میگیره.اگر بخواهد به این شکل عمل کنه 2-3 تا Page file اضافی باید ایجاد کنه که موقع نوشتن مابقی اطلاعات تعداد I/O افزایش پیدا خواهد کرد که همین امر سبب کندی خواهد شد.

tooraj_azizi_1035
شنبه 20 آذر 1389, 12:17 عصر
سلام،
فرض کنید در حالت عادی SQL Server اطلاعات رو ذخیره کرده و به تعداد مورد نیاز مثلاً 2 page فضا اشغال شده. طبیعتاً بخشی از فضای page ها برای ذخیره این اعداد سری اشغال شده. حالا با تفاسیر بالا اگر این مقادیر ذخیره نشه و فقط مقدار ابتدایی و انتهایی اون رو SQL Server داشته باشه آیا فضای کمتری اشغال نمیشه؟ البته می دونم که شاید این کار به صرفه نباشه چون هر لحظه کاربر می تونه Gap بین سری متوالی اعداد ایجاد کنه که در این حالت هم می تونه تو تعداد رکوردهای بالا مثلا 1000 به این شکل عمل کنه:
1 .. 1000 فقط بازه ذخیره می شود.
اگر کاربر عددی مثل 15 تا 20 رو حذف کنه SQL Server می تونه این Gap رو تو لیست Gap های مربوط به این سری اضافه کنه. البته واضحه که تمام این کارها زمانی که به صرفه باشه انجام می شه مثلاً تعداد رکورد ها برابر 1000000 و تعداد حذف ها 100 عدد. منظورم از لیست Gap ها لیستی از بازه هایی است که در آن ها شکاف رخ داده. باز هم می گویم SQL Server در صورتی که این کار به صرفه باشه (از نظر ذخیره سازی و I/O) اون رو انجام می ده.
امیدوارم ابهامی در منظورم نباشه.

حمیدرضاصادقیان
شنبه 20 آذر 1389, 12:32 عصر
سلام.
ببینید SQL Server نمیاد از پیش مقداری اطلاعات رو برای شما ذخیره کنه.شاید شما اصلا اون دیتا رو نخواهید. شاید تا قبل از اون دیتای ذخیره شده به درد شما میخوره و اون بازه برای شما مفید نیست.و...
اصلا روش درستی هم نیست که از پیش بیایم برای کاربر تصمیم بگیریم که ما این اطلاعات رو برای تو ذخیره کردیم. شاید در autoinc کاربر بیاد بگه 10 تا 10 تا اضافه کن. شاید بگیم از عدد 5000 شروع کن.
در ساختار ذخیره سازی محتویات جداول روی page ها sql server به این شکل عمل میکنه که اطلاعات با طول ثابت در بایتهای اولیه ذخیره می شوند و اطلاعات با طول متغیر مثل varchar,nvarchar,... در بایتهای انتهایی و شاید به page های دیگه نیز لینک داده بشه.
با این اوصاف اگر بخواهد مقداری اطلاعات رو رزرو کنه باید این page file ها رو نیز Create کنه که یک همچین چیزی نیست.