حکایت شیخ و مریدان : جدول های ستون محور (Columnar) و ردیف محور (Row Store)

روزی شیخ به زیر درخت همیشگی آمد و دید مریدان ریختند سر مرید دیگری و او را به سخره گرفتند!شیخ صدایش را ته گلویش انداخت و گفت :چِخِه یَره (لفظی مشهدی به معنای کنار بروید)!چه خبر است آنجا؟؟مریدان که میدانستند شیخ ناراحت شده، کنار رفتند و یکی گفت: یا شیخ طرف لیترالی میگه که ما جدول داریم در دیتابیس که ردیفاش توی ستوناشه!اسکل کرده مارو!شیخ دست به ریش خود کشید و گفت:لیترالی!!!!مردک تو جمع کل مسافت های مسافرت های خانوادگی و غیر خانوادگیتان به اندازه مستراح رفتن های من نمیشود تازه من مدتی توی فاز مرتاضی بودم!بعد برای من اجنبی بازی در میاوری؟؟؟؟بعد هم داریم! بنشینید تا بگویم!سپس رو به مرید اجنبی کرد و گفت : تو عوض نشستن، سیت داون کن!همی که شیخ نفسی گرفت تا سخن بگوید ناگهان آیفون ۱۳پرو مکس گلد وی زنگ خورد!بعد از پاسخ دادن، شیخ با لبخندی به مریدان گفت:ریا نباشد شب ماکارونی داریم!سپس رو به مرید اجنبی کرد و گفت : همون اسپاگتی شما ها!حال بدانید و آگاه باشید که میتوانیم در دوحالت جداول را طراحی کنیم!جدول های ردیف محور(Row Store) و جدول های ستون محور( Columnar یا Column Store)!یادتان باشد که جداول ردیف محور در زمانی که خوانده میشوند، چندین ردیف به همراه تمام (تاکید میکنم تمام) ستون ها برای شما می آیند!الله اکبر یعنی بدانید که اگرشما در هنگام Select گرفتن نام ستون ها را هم نگذارید و ستاره بگذارید به حال IO فرقی نمیکند!چرا؟؟؟چون Page به Page مطالب را میخواند!اما به هرحال کار خوبی نیست!نکنید!از جای دیگر بیرون میزند!همچنین این جدول ها برای یافتن ردیفی نیاز به IO بیشتری دارند!(توضیح این که چرا دارند حقیقتش ویدئو میخواد متنی سخته K) اما نکته جذاب این است که زمانی که ردیف را یافتی، همه ستون ها را داری.ایول!اما حال برویم روی منبر برای Columnar اصل جنس این است!قبلی را همه میشناسید.در جداول ستون محور زمانی که یک (Block) خوانده می شود چندین ستون در همان بلاک به همراه ردیف های مشخص شده (یا تمام ردیف ها!)می­آید!یعنی که اگر شما 10 میلیون ردیف داشته باشید!بله دیگه!در عوض با کمترین IO بیشترین ردیف را میگیری!چه باحال!اما وای به روزی که چندین ستون را بخواهی!صدای دیسک در میاید! اگر SSD نباشد میگه!ششششش!خخخخخخخ!قیق قیق قیق!مریدان که با دانستن این حجم اندکی از دریای عظیم اطلاعات در خصوص این دو نوع جدول، خشتک ها را دریده بودند که ناگهان مریدی که اندکی کمتر جو گیر بود پرسید!؟؟خب یعنی چی؟؟چه فایده یا شیخ!به چه درد میخورد!؟؟؟؟شیخ گفت : در حالت ردیف محور، جدول ما مناسب نوشتن و خواندن های متعدد میباشد (OLTP) مانند کار های ما!اما همیشه که هدف نوشتن و خواندن های کوچک نیست!پس این مهندسان علم داده چه کاره­اند؟؟آنها بهترین استفاده را از جدول های ستون محور میکنند، زیرا این جداول جون میدهند برای علم داده (OLAP) فشرده سازی به علت اینکه در یک ستون میتواند چندین داده تکراری باشد عالی است!تجمع کردن داده ها سخن از بشر میگیرد!از کوئری های سنگین نگویم که خوراک کار است!اما بدرد نوشتن در جدول نمیخورد!مثالی بزنم : تصور کنید جدولی داریم با 100 میلیون رکورد(هستش. به والله توی IOT خیلی پیش میاد) بعد شما به دلیلی ناشناخته جو میگیردت که ستون دما ها را میانگین بگیری!(ایندکس نداریم ها!!!)در جدول ردیف محور باید تمام ردیف ها را بگیری که یادت باشد IO همه ستون ها را میدهد،و ما فقط یکی را میخواهیم، بعد عدد های ستون دما را جمع بزنی و تقسیم بر تعداد کنی!خب این مشخص است که پدر IO به چشمانش میاید!اما در جدول ستون محور به راحتی ستون دما را میگیری ردیف ها را نیز مفت تو چنگت و مثل خوردن ته دیگ ماکارونی میانگین میگیری!تازه اگر فشرده سازی و تجمع سازی داده ها هم باشد که دیگر نور علا نور است!پس مریدان با علم اینکه کار هر جدول نیست، آنالایز کردن – جدول ستون محور میخواهد و مهندس کهن!(چی شد)خشتک ها را دریده و سر به بیابان گذاشتند!