بیگ تیبل

**بیگ تیبل** ، که ترجمهٔ آن به فارسی معادل عبارت «جدول بزرگ» است، نام سامانهٔ پایگاه‌داده‌ای فشرده‌شده، با کارایی بالا و نرم‌افزار اختصاصی است که به صورت تعبیه‌شده در سامانه پرونده گوگل، سرویس قفل چاق و تعداد اندکی از دیگر برنامه‌های شرکت گوگل استفاده شده‌است. این سامانه به صورت رسمی در خارج از گوگل توزیع نشده‌است ولی از طرف این شرکت به عنوان بخشی از موتور برنامه‌های گوگل توصیه شده‌است.

## تاریخچه
بیگ تیبل در سال ۲۰۰۴ شروع به کار نمود. و هم‌اکنون از سوی بعضی از برنامه‌های گوگل به مانند مپ ردیوس ٬که از آن برای تولید و ایجاد تغییر داده‌های ذخیره‌شده در بیگ تیبل استفاده می‌شود، گوگل ریدر٬، گوگل مپس٬ جستجوی کتاب گوگل ٬میزبانی گوگل کد ٬اورکات، یوتوب و جیمیل. دلایل گوگل برای استفاده از پایگاه‌دادهٔ مختص خود، مقیاس‌پذیری، کنترل بهتر بر شاخص‌ّای مختلف کارایی است.

## آشنایی با بیگ تیبل
بیگ تیبل یک سیستم ذخیره‌سازی توزیع شده برای مدیریت داده‌های ساختاریافته می‌باشد و برای کاربردهای بسیار بزرگ به کار گرفته می‌شود: پتابایت‌ها از داده‌هایی که بر روی هزاران سرور پیاده‌سازی می‌شود. داده‌ها و چه از نظر نیازمندی‌های درازمدت، از بیگ تیبل استفاده می‌کنند.
از بیگ تیبل در بیش از ۶۰ محصول و پروژهٔ مربوط به شرکت گوگل استفاده می‌شود. از جملهٔ آن‌ها می‌توان به گوگل آنالیتیکس، گوگل فایننس، اورکات، جستجوی شخصی‌شده و گوگل ارت اشاره کرد. این برنامه‌ها به روش‌های مختلفی، چه از نظر اندازهٔ ویژگی‌های اصلی بیگ تیبل که آن را از سایر سیستم‌های ذخیره‌سازی متمایز می‌سازد عبارتند از: کارایی بالا، مقیاس‌پذیری، قابلیت استفاده توسط برنامه‌های مختلف و همچنین دسترسی بالا.
از بسیاری جهات، بیگ تیبل به یک پایگاه داده‌ها شباهت دارد، برای مثال روش‌ها و استراتژی‌های پیاده‌سازی مشابهی با پایگاه‌داده دارد. پایگاه‌های دادهٔ موازی و پایگاه‌های دادهٔ حافظهٔ اصلی هم دارای امکاناتی همچون مقیاس‌پذیری و کارایی بالا هستند ولی بیگ تیبل واسط کاربر متفاوتی نسبت به آن‌ها دارد. بیگ تیبل از مدل داده‌ای کاملاً رابطه‌ای  استفاده نمی‌کند و به جای آن مدل داده‌ای ساده‌ای را در اختیار کاربران قرار می‌دهد. کاربران می‌توانند محلی  بودن داده‌های خود را کنترل کنند.

## مدل داده‌ای
بیگ تیبل یک نقشهٔ توزیع‌شده، پراکنده و چند بعدیِ مرتب شده‌است. این نقشه توسط یک کلید سطری، یک کلید ستونی و یک برچسب زمانی شاخص بندی شده‌است و هر مقداری در این نقشه، یک آرایه‌ای از بایت‌ها است.

### سطرها
کلیدهای سطری یک جدول رشته هایی دلخواه هستند که در حال حاضر اندازه آن‌ها حداکثر ۶۴کیلوبایت است و معمولاً اندازه نرمال آن‌ها ۱۰۰۰۰ بایت می‌باشد. هر عمل خواندن یا نوشتن در هر سطر یه صورت اتمیک (غیرقابل تجزیه) صورت می‌پذیرد. در بیگ تیبل، داده‌ها بر اساس کلید سطری مرتب شده‌اند. محدودهٔ سطرها برای هر جدول به صورت پویا تقسیم‌بندی می‌شود. هر ردیف یک تَبلِت  نامیده می‌شود. در نتیجه، عمل خواندن از محدوده‌های سطری نزدیک به هم پربازده خواهد بود.
بیگ تیبل با کمک کلید سطر، داده را با ترتیب لغت‌نویسی حفظ می‌کند. محدوده سطر برای یک جدول به صورت پویا پارتیشن‌بندی می‌شود. هر محدوده یک تبلت(tablet) نامیده می‌شود، که بخشی از توزیع شدگی و تعادل بارگذاری (load balancing) است. در نتیجه، خواندن‌های محدوده‌های سطر کوتاه کارامد هستند و عموماً نیاز دارند که فقط با تعداد کمی از ماشین‌ها ارتباط برقرار کنند. کلاینت‌ها می‌توانند با انتخاب کلیدهای سطر خود از این ویژگی بهره‌برداری کنند بطوری‌که آن‌ها محل مناسبی برای دسترسی‌های داده خود بدست می‌آورند. برای مثال در webtable، صفحات در دامنه یکسان در داخل سطرهای مجاور با هم ملحق می‌شوند و این کار را به وسیلهٔ معکوس کردن مؤلفه‌های نام میزبان URLها انجام می‌دهند. برای مثال، ما داده maps.google.com/index.html را تحت کلید com.google.maps/index.html ذخیره می‌کنیم. ذخیره‌سازی صفحات در کنار یکدیگر از دامنه یکسان باعث می‌شود که برخی تحلیل‌های میزبان و دامنه بسیار کارآمدتر باشند.

### ستون‌ها
کلیدهای ستونی در مجموعه‌هایی که خانواده‌های ستونی نامیده می‌شوند دسته‌بندی می‌شوند. تمام داده‌هایی که در یک خانوادهٔ ستونی هستند معمولاً از یک نوع هستند. یک خانوادهٔ ستونی باید ایجاد شود تا بتوان داده‌ها را زیر هر کلید در آن خانواده قرار داد.

### برچسب زمانی
هر خانه در بیگ تیبل می‌تواند چندین نسخه از یک داده را دربرداشته باشد، این نسخه‌ها توسط برچسب‌های زمانی شاخص بندی می‌شوند. معمولاً برچسب‌های زمانی در جدول بزرگ ۶۴ بیتی هستند. نسخه‌های متفاوت یک خانه بر اساس برچسب‌های زمانی مرتب می‌شوند به‌طوری‌که نسخه‌های جدیدتر بتوانند سریع تر در اختیار قرار بگیرند.

### رابط برنامه‌نویسی نرم‌افزار
رابط برنامه‌نویسی نرم‌افزار (ای‌پی‌آی) مربوط به بیگ تیبل تابع‌هایی برای ساختن و پاک کردن جدول‌ها و خانواده‌های ستونی در اختیار قرار می‌دهند. ای‌پی‌آی‌ها همچنین توابع مورد نیاز برای تغییر کلاسترها، جدول‌ها، و خانواده‌های ستونی فراداده مثل دسترسی به حقوق کنترلی را تأمین می‌کنند.

### بلوک‌ها
بیگ تیبل بر روی قسمت‌های متعددی از زیرساخت گوگل مورد استفاده قرار گرفته‌است. بیگ تیبل با استفاده از سامانهٔ فایل گوگل داده‌ها و لاگ‌ها را ذخیره می‌کند. بیگ تیبل، متکی بر قفل‌هایی به نام چابی است. یک سرویس قفل چابی از پنج نسخه تشکیل شده‌است.

## پیاده‌سازی
پیاده‌سازی بیگ تیبل شامل سه قسمت عمده‌است: یک کتابخانه که با هر کاربر در ارتباط است، یک سرور اصلی و تعداد زیادی سرور تبلت. سرورهای تبلت می‌توانند به صورت پویا به یک خوشه اضافه شوند یا از آن حذف شوند تا بتوانند تغییرات را مدیریت و تعدیل بکنند. سرور اصلی عهده‌دار مرتبط کردن تبلت‌ها با سرورهای تبلتی، شناسایی سرورهای اضافه شده و غیرقابل استفاده و تنظیم میزانِ بار روی یک سرور تبلت می‌باشد.
بعلاوه، تغییرات همچون ایجاد خانواده سطر و ستون را تحت نظر قرار می‌دهد. هر سرور تبلت مدیریت بین ده تا هزار تبلت را انجام می‌دهد. هر سرور تبلت درخواست‌های خواندن و نوشتن مربوط به تبلت‌های زیر نظرش را تحت نظر قرار می‌دهد و همچنین از بزرگ شدن بیش از حد تبلت‌ها جلوگیری می‌کند.
همچون بیشتر سیستم‌های ذخیره‌سازی توزیع شده با یک سرور اصلی(single-master)، داده کلاینت از طریق سرور اصلی منتقل نمی‌شود: کلاینت‌ها برای خواندن و نوشتن مستقیماً با سرورهای تبلت ارتباط برقرار می‌کنند. اغلب کلاینت‌ها هرگز با سرور اصلی ارتباط برقرار نمی‌کنند زیرا کلاینت‌های بیگ تیبل برای دریافت اطلاعات در مورد موقعیت تبلت به سرور اصلی متکی نیستند. در نتیجه سرور اصلی در عمل به آسانی بارگذاری شده‌است.
یک خوشه بیگ تیبل شماری از جدول‌ها را ذخیره می‌کند. هرجدول شامل مجموعه‌ای از تبلت هاست، و هر تبلت شامل کلیه داده‌هایی است که با یک رنجی از سطر در ارتباط است. درابتدا، هر جدول فقط شامل یک تبلت می‌باشد. با بزرگ شدن یک جدول، جدول به صورت اتوماتیک به تبلت‌های چندگانه تقسیم می‌شود، سایز هر کدام تقریباً به صورت پیش‌فرض ۱۰۰–۲۰۰مگابایت است.

### تعیین وظایف تبلت‌ها
هر تبلتی در هر زمان به یک سرور تبلت مرتبط است. سرور اصلی از وضعیت سرورهای تبلتی که در آن لحظه مشغول بکار هستند خبر دارد؛ از جمله اینکه می‌داند که کدام تبلت‌ها هستند که وظیفه‌ای به آن‌ها اختصاص داده نشده‌است. وقتی به یک تبلت وظیفه‌ای اختصاص داده نشده‌است، و یک سرور تبلت با فضای مناسب قابل استفاده‌است، سرور اصلی با فرستادن یک درخواست بارگذاری تبلت به سرور تبلت، وظایفی را برای آن مشخص می‌کند.
بیگ تیبل از چابی‌ها برای دنبال کردن وضعیت سرورهای تبلت استفاده می‌کند. وقتی یک سرور تبلت شروع به کار می‌کند، آن از یک قفل اختصاصی برای یک فایل به نام دایرکتوری چابی استفاده می‌کند. سرور اصلی این فایل را برای اطلاع از وضعیت سرورهای تبلت بررسی می‌کند. یک سرور تبلت وقتی که قفل اختصاصی خود را از دست بدهد از ادامهٔ کار برای سرور خودداری می‌کند.
سرور اصلی همچنین وظیفه دارد که وقتی یک سرور به تبلت‌هایش سرویس نمی‌دهد آن را شناسایی کند. برای انجام چنین کاری سرور اصلی در زمان‌های مشخصی از سرور تبلت دربارهٔ وضعیت قفلش سؤال می‌پرسد.

### فشرده‌سازی
به مرور که اعمال نوشتن اجرا می‌شوند، اندازهٔ جدول حافظه افزایش می‌یابد. وقتی که حجم جدول حافظه به یک حدی معینی می‌رسد، یک جدول حافظهٔ جدید ساخته می‌شود. این فرایند دو هدف را دنبال می‌کند؛ باعث کاهش استفادهٔ حافظه توسط سرور تبلت می‌شود و همچنین در صورتی که سرور دچار مشکل شود و نیاز به بازیابی اطلاعات باشد، داده‌های کمتری نیاز است که از روی لاگ خوانده شود. در حین این فرایند فشرده سازی اعمال خواندن و نوشتن می‌توانند ادامه پیدا کنند.

### بهینه‌سازی
برای اینکه پیاده‌سازی مورد نظر به نحو احسن انجام شود، نیاز است که بر روی آن اصلاحاتی انجام پذیرد، از جمله:

#### گروه‌های محلی
کاربران می‌توانند چند خانوادهٔ ستونی را ترکیب کنند و یک گروه محلی را به وجود آورند. یک جدول‌اس‌اس  جداگانه برای هر گروه محلی در هر تبلت تولید می‌شود.

## طراحی
بیگ تیبل، سمپاد بسیار بزرگ مقیاس و سریع است. اگرچه به شکل ستون‌هایی با تعداد ثابت نیست، ولی بنا به تعریف نویسندگانش «یک نگاشت مرتب شده‌یِ چند بعدی و خلوت است». در واقع ترکیب از پایگاه‌داده‌های مبتنی به ردیفی و سمپاد مبتنی بر ستونی است. بیگ تیبل برای مقیاس‌های بزرگ در حد پتابایت در سرتاسر صدها یا هزاران ماشین طراحی شده‌است که این ماشین‌های به راحتی قابل اضافه شدن به سامانه‌هستند و به صورت خودکار از ویژگی‌های مفید سایر منابع بدون نیاز به پیکربندی مجدد استفاده می‌نمایند.

هر جدول دارای چند بعد است. جداول برای جی‌اف‌اس (سامانهٔ فایل گوگل) بهینه شده‌اند. برای اینکار هر جدول به *قرص‌هایی* تقسیم شده‌اند - این بخش‌های تفسیم‌بندی شده از جدوال، به صورت ردیف‌هایی از قرص‌هایی با طولی در حدود ۲۰۰ مگابایت هستند. اگر اندازهٔ این قرص‌ها بیش از اندازهٔ تعیین شده گردد، با استفاده از الگوریتم فشرده‌سازی بی‌دی‌آی‌اِف‌اِف، فشرده می‌گردند.

## سایر پیاده‌سازی‌ها
**متن‌باز**
* اچ‌بیس — به زبان جاوا نوشته شده‌است. شرایط همانند جدولِ بزرگ را فراهم می‌آورد و توسط هستهٔ هادوپ پشتیبانی می‌شود.
* جدول ترکیبی — جدول هایپربرای مدیریت ذخیره‌سازی و پردازش اطلاعات بر روی خوشه‌های کارگزاران استفاده می‌شود.
* آپاچی کسندرا — سامانهٔ ذخیره‌سازی و توزیع‌شده‌ای از شرکت آپاچی که در سایت مشهور فیس بوک استفاده شده. این سامانه براساس دادهٔ ساختاری مانند پایگاه گسترده داده آمازون، دینامو و به زبان جاوا نوشته شده‌است.
* نپتون — به زبان جاوا نوشته شده و از زووکیپر و اچ‌دی‌اف‌اس هادوپ استفاده می‌نماید.
* کی‌دی‌آی — حاصل تلاش کاسمیکس برای ساخت برنامه‌ای مانند جدولِ بزرگ در زبان سی++.
**جدوال ترکیبی گوگل**
* جدوال ترکیبی گوگل در ۹ ژوین ۲۰۰۹ منتشر شد. این جدوال به عنوان سامانه‌هایی آزمایشی برای مدیریت سامانه‌ای ابری در نظر گرفته‌شد.

## منابع

رده:پایگاه داده‌ها
رده:سامانه‌های مدیریت پایگاه داده‌ها
رده:گوگل
رده:نواس‌کیوال