جمعه , فروردین ۳۰ ۱۳۹۸
خانه / مقالات / بانک اطلاعاتی / SQL Server / آموزش Columnstore – قسمت اول
آموزش Columnstore

آموزش Columnstore – قسمت اول

Clustered Columnstore Indexes – part 1 (“Intro”)

با معرفی columnstore  در سال ۲۰۱۲ تحولی بزرگ در  Data Wearhouses اتفاق افتاد به نام NonClustered Columnstore Index  که خود دارای محدودیت هایی بود.

شامل :

۱-     non-updatable

۲-     تغییر Schema  ممنوع

۳-     تعداد پشتیبانی از Data Type   بسیار کم بود

۴-     نمیتواند منحصر به فرد باشد. Non Unique

۵-     حالت Batch Execution Mode

 

_  در سال ۲۰۱۴ با معرفی Clustered ColumnStore Index   امکاناتی اضافه شد شامل :

۱-     ساختن Tables Updatable

۲-     اصلاح تغییرات Schema

۳-     پشتیبانی از Data Type های بیشتر

۴-     (Batch & Row) Execution Mode  با هم پشتیبانی میکند.

۵-     Global Dictionary  برای  Segment Compression

۶-     پشتیبانی از هر داده فشرده سازی.

۷-     seek operation support

۸-     پیشرفتهای مرتبط با Bulk Insert

۹-     ETC

_ تکنیک این موتور تقسیم داده های موجود به گروه های ردیف مختلف است که به عنوان بخش ها شناخته میشوند.

هر کدام از این بخش ها باید در حدود ۱٫۰۰۰٫۰۰۰ ردیف باشد (این شماره توسط یک پارامتر در نسخه های فعلی کنترل نمی شود) و ردیف ها با استفاده از الگوریتم های داخلی رمزگذاری می شوند و فشرده می شوند. برای بعضی از ستون هایی که نیاز به dictionaries  دارند (به عنوان مثال نوع کاراکتر) یک dictionary  رمزگذاری اضافی استفاده می شود.

توجه: هر ستون به گروه های خود از Segments جدا می شود و بنابراین این ایده ای است که از ColumnStore استفاده می شود.

_  پس از اینکه فرآیند رمزگذاری و فشرده سازی انجام می شود، سپس segments  و dictionaries به Blobs تبدیل می شوند و در داخل SQL Server ذخیره می شوند. مکانیسم ذخیره سازی اساسی هنوز ۸K صفحه خوب است. اگر یکی از Blobs  بیش از یک صفحه داشته باشد، پس از آن مکانیسم های ذخیره سازی لکه های معمولی فراخوانی می شود.

_  یک ذخیره سازی متا اطلاعاتی وجود دارد که دایرکتوری نامیده می شود. در داخل این دایرکتوری، اطلاعات مربوط به وضعیت تخصیص segments   و dictionaries   ذخیره شده ذخیره می شود. همچنین شامل فراداده های اضافی در مورد تعداد ردیف ها، اندازه، حداقل و حداکثر مقادیر داخل هر یک از segments است. این اطلاعات در داخل sys.column_store_segments          —– (Dynamic Managent Views )  DMV در دسترس است.

 

_  یک عنصر بسیار مهم برای ذخیره سازی داده های متا داده در داخل Clustered Columnstore Columns وجود دارد – Delete Bitmap.

Delete Bitmap  اساسا ذخیره سازی است که شامل اطلاعات در مورد ردیف حذف شده در داخل Segments  است. نمایش آن در حافظه یک bitmap  است، در حالی که بر روی دیسک  به عنوان یک b-tree ذخیره می شود، در حالی که شناسه ردیف حذف شده ذخیره می شود. حذف Bitmap به طور منظم بررسی می شود تا از بازگشت ردیف هایی که قبلا حذف شده اند جلوگیری شود.

Clustered Columnstore Index  منبع اولیه برای ذخیره سازی داده ها است، به عنوان نام Clustered معمولا به منبع اصلی داده های جدول می پردازد.

نکته ۱: آینده SQL Server 2014 دارای محدودیتی است که هیچ شاخص دیگری برای ایجاد جدول موجود با یک

Clustered Columnstore Index  مجاز نیست.

نکته ۲: داده ها واقعا در داخل CCI (Clustered ColumnStore Index )  خوشه ای نیستند، زیرا در آینده نسخه SQL Server پیشنهادی وجود ندارد.

کل معماری Clustered Columnstore Indexes به روزرسانی اساسا به ۲ قسمت تقسیم می شود: Row Groups  (بعضی Segments) و Delta Stores . درحالیکه Segments ها به طور مستقل کد شده و فشرده شده اند و همچنین به طور غیرقابل شناسایی به طور مستقیم، Delta Stores یک ” نام معمولی ” قدیمی B-Tree Row store هستند که دارای خصوصیات یک جدول سرور معمولی Sql می باشند.

همانطور که با Segment ها، هر Clustered Columnstore Index می تواند چند Delta Stores  داشته باشد.

مایکروسافت نام تجاری جدید را برای SQL Server 2014 CTP1 معرفی کرده است

(DMV sys.column_store_row_groups)  . این نمایه حاوی اطلاعات مربوط به همه segments  و delta stores  برای

Columnstore Indexes (Clustered & NonClustered).  است.

به نظر می رسد که در داخل آنها به طور مساوی نمایش داده می شوند، بنابراین شما آنها را در لیست همه با هم خواهید دید.

تفاوت برای تمایز این است که Segments  در واقع وضعیت خود را به ۳ ستون  با توصیف ” Compressed ” در حالی که Delta Stores می تواند وضعیت ۱ و ۲ به عنوان یک متناظر با توضیحات مربوط به “باز” / ” بسته”. این وضعیت برای Delta Store اطلاعات ارائه شده را در اختیار شما قرار می دهد اگر Delta Store هنوز اطلاعات جدید را قبول می کند یا فقط منتظر تبدیل شدن به یک Segment

(encoded & compressed).  می باشد.

 

برخی از کلمات در مورد برخی از عملیات اساسی:

Inserts  : درجهای به سادگی به یکی از open Delta Stores می شود.

Deletes :

اگر ردیف حذف شده در داخل یک Segment یافت شود، اطلاعات مربوط به Deleted Bitmap  با شناسه ردیف ردیف مربوطه به روز می شود.

اگر ردیف حذف شده در واقع در داخل Delta Store  قرار دارد، سپس روند مستقیم حذف بر روی b-tree.  اجرا می شود.

Update :

آنها اساسا به عنوان deletes  و inserts می شود.

Jamie Thompson Riccardo Mutti

  • آیا این مقاله مفید بود؟
  • بله   خیر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.