Bigtable (جدول بزرگ)
جدولبزرگ یا Bigtable یک پایگاهداده توزیعشده است که در سال 2006 به عنوان یک پایگاه داده ستونی بر مبنای سیستم فایلی گوگل (GFS) ساخته شده است. Bigtable و دایناموی آمازون والدین مستقیم کاساندرا هستند. کاساندرا خصوصیات آرایههای دادهای پراکنده و ذخیرهسازی روی دیسک با استفاده از SSTable را از این پایگاهداده به ارث برده است. پایگاهداده HBace یاهو یک بازسازی (کلون) از Bigtable است. مقاله کامل گوگل درباره Bigtable را میتوانید در آدرس زیر بخوانید:
http://lab.google.com/papers/bigtable.html
Cassandra (کاساندرا)
در افسانههای یونان، کاساندرا دختر شاه پِریام و ملکه هِکوبا از خانواده سلطنتی تروا بود. او به حدی زیبا بود که آپولو قدرت دیدن آینده را به او عطا کرد. اما زمانی که او این لطف عاشقانه را نپذیرفت، آپولو او را نفرین کرد تا هرچه در آینده رخ خواهد داد را به دقت پیشبینی کند، اما هیچ کس حرفهای او را باور نکند. او ویرانی شهرش تروا را دید، اما توان مقابله با این اتفاق را نداشت...نام این پایگاهداده توزیعشده، از روی همین افسانه انتخاب شده است. این انبار داده یکی از پروژههای بنیاد آپاچی است که در آدرس http://cassandra.apache.org در دسترس است. مراحل اولیه شکلگیری آن در ژانویه 2009 طی شد. از خصوصیات کلیدی این پایگاهداده میتوان به عدم تمرکز، الاستیک بودن، قابلیت تحمل خطا، ثبات قابل تنظیم، بهینهسازی و دسترسپذیری بالا اشاره کرد. همچنین این پایگاهداده از ابتدا به گونهای طراحی شده است که به شدت مقیاسپذیر بوده و بهسادگی روی سرورهای معمولی که در دیتاسنترهای مختلف پراکنده شدهاند، توزیع شود. شرکتهایی مانند Digg، فیسبوک، Cloudkick، سیسکو، آیبیام، Reddit، Rackspace، SimpleGeo، Ooyala و OpenX از این پایگاهداده استفاده میکنند.
Cluster (خوشه، کلاستر)
به دو یا چند نسخه (Instance) از کاساندرا که در هماهنگی با یکدیگر کار میکنند، خوشه گفته میشود. این نسخهها به کمک Gossip با یکدیگر ارتباط برقرار میکنند. وقتی شما یک نود جدید را برای معرفی به کلاستر موردنظرتان پیکربندی میکنید، باید چند کار کوچک انجام دهید. ابتدا باید یک نود Seed معرفی کنید. پس از آن باید پورتهایی را تعریف کنید که کاساندرا باید برای ارتباط با Gossip و Thrift به آنها گوش دهد. پس از اینکه کلاستر شما پیکربندی شد، باید از ابزار Node Tool برای کنترل صحت تنظیمات استفاده کنید.
Column (ستون)
ستون، ابتداییترین واحد ارائه اطلاعات در مدلدادهای کاساندرا است. یک ستون ترکیبی سهگانه از یک نام (که گاهی کلید یا key نامیده میشود)، یک مقدار و یک برچسب زمانی است. مقادیر یک ستون به همراه برچسب زمانی آن توسط کلاینت پایگاه داده فراهم میشود. نوع داده کلید و مقدار، هر دو آرایههای بایتی جاوا (Java Byte Array) است. نوع داده برچسب زمانی یک نوع طولانی (Long) اولیه است. برای جلوگیری از بروز مشکل در حالت چندرشتهای، ستونها به صورت غیرقابلتغییر (Immutable) تعریف شدهاند. ستونها در خانوادههای ستون (Column Families) دستهبندی میشوند.
Consistency (ثبات)
ثبات به این معنا است که یک تراکنش هیچگاه پایگاه داده را در یک حالت ناپایدار یا غیرمجاز ترک نخواهد کرد و همچنین هیچ یک از قیدهای یکپارچگی نقض نخواهند شد. این مورد به یکی از جنبههای حیاتی تراکنشها در پایگاههای داده رابطهای و یکی از خصوصیات ACID (سرنام Atomic, Consistent, Isolated, Durable به معنی اتمیک، پایدار، ایزوله شده و دارای ماندگاری) اشاره میکند. در کاساندرا درجه نسبی پایداری براساس موارد زیر محاسبه میشود:
- N تعداد نودهایی است که کپیهای یک داده را نگهداری میکنند.
- W تعداد نودهایی که باید دریافت صحیح داده را تأیید کنند.
- R تعداد کپیهایی که در هنگام دسترسی به یک شیء داده در عملیات خواندن اطلاعات، با آنها تماس برقرار میشود.
- در این صورت اگر R+W از N بزرگتر باشد، ثبات بالایی خواهیم داشت و در غیر این صورت ثبات مشروط خواهد بود.
Decentralized (تمرکز زدایی شده)
کاساندرا به عنوان یک پایگاه داده تمرکززدایی شده در نظر گرفته میشود چرا که هیچ سرور مرکزیای تعریف نمیکند و درعوض از یک رویکرد نظیر به نظیر استفاده میکند تا از بروز گلوگاه و ایجاد یک نقطه شکست مرکزی جلوگیری کند. تمرکززدایی در کاساندرا بسیار حیاتی به شمار میآید، زیرا امکان افزایش مقیاس یا کاهش آن را برای کاساندرا فراهم میکند. نودها میتوانند به دلخواه به شبکه افزوده شده یا از شبکه بیرون روند و این امر کمترین تأثیری در کل پایگاه داده نداشته باشد.
Denormalization (غیرنرمال سازي )
در پایگاههای داده رابطهای، غیرنرمال سازی یا ایجاد دادههای اضافی، فرآیندی است که برای بهبود کارایی برنامههایی که بیشتر با عملیات خواندن دادهها سروکار دارند، انجام میپذیرد. پردازش تحلیلی آنلاین OLAP (سرنام OnLine Analytical Processing) از جمله این فرآیندها است. در کاساندرا دیدن دادههای غیرنرمال شده بسیار طبیعی است؛ چرا که این کار باعث افزایش کارایی شده و کمک میکند که دادهها براساس پرسوجوهای موردنیاز ساختاردهی شوند. این درست نقطه مقابل پایگاههایداده سنتی رابطهای است که به صورت مستقل برپایه مدل شیء (Object Model) ساختاردهی میشوند.
Dynamo (داینامو)
این سیستم که در سال 2006 توسط آمازون و همزمان با Bigtable گوگل ایجاد شده است، یکی از پایههای کاساندرا است. کاساندرا با استفاده از داینامو به یک انبار دادههای کلید-مقدار، یک معماری نظیر به نظیر متقارن، کشف داده گمان محور (gossip-based discovery) و ثبات مشروط دست مییابد. شما میتوانید مقاله «داینامو: انبار کلید-مقدار کاملاً دردسترس آمازون» را در آدرس زیر بیابید:
http://www.allthingsdidtributed.com/2007/10/amazons_dynamo.html
Elastic (کشسانی، الاستیک)
میزان عملیات خواندن و نوشتن دادهها با افزودن ماشینهای بیشتر به کلاستر به صورت خطی افزایش مییابد. تحمل خطا یا Fault Tolerance توانایی ادامه کار حتی در صورت خرابی یک یا چند بخش سیستم است. از این توانایی گاهی با نام تنزل مطبوع یا graceful Degradation نیز نام برده میشود و به این معنا است که اگر کارایی سیستم در اثر بروز خطا تنزل پیدا کرد، کاهش کارایی تنها متناسب با بخش از کار افتاده باشد.
Hector (هکتور)
پروژه اپنسورسی است که توسط ران تاوری (Ran tavory) پایهگذاری شده و روی Github میزبانی میشود. هکتور، کلاینتی برای کاساندرا است که به وسیله جاوا نوشته شده است. این پروژه Thrift را پوشانده (wrap کرده) و میتواند قابلیتهای JMX،Connection Pooler و Fail over را ارائه کند.
Memtable (جدول حافظه)
به نسخهای از دادهها که به تازگی در جدولی در حافظه نوشته شده باشد، اطلاق میشود. هنگامی که این جدول پر شود به صورت یک SSTable روی دیسک ذخیره خواهد شد.
Node (گره یا نود)
یک نسخه درحال اجرا از کاساندرا را یک نود میگویند. کلاسترهای کاساندرا به صورت معمول تعداد زیادی نود دارند و به همین دلیل گاهی حلقه نودها یا به تنهایی «حلقه» نامیده میشوند. اصطلاح نود به هر سروری در کلاستر کاساندرا اشاره میکند، در صورتی که «رپلیکا» (Replica) به نودی اشاره میکند که یک کپی از برخی دادههای یک نود دیگر را در خود داشته باشد.
NoSQL
اصطلاح NoSQL نامی عمومی است که به مجموعهای از پایگاههای داده اطلاق میشود که از زبان پرسوجوی ساختیافته SQL (سرنام Structured Query Language) یا مدل داده رابطهای استفاده نمیکنند. گاهی این اصطلاح را مخفف Not Only SQL میدانند تا تأکید کنند که طرفداران انواع پایگاههای داده غیررابطهای معتقدند که پایگاههای داده رابطهای سنتی تنها راه موجود برای ذخیرهسازی داده نیستند، اما این به آن معنا نیست که به خودی خود انتخاب نادرستی باشند. این اصطلاح نخستینبار توسط اریک اوانس از Rackspace به کار رفت. او که یکی از توسعهدهندگان کاساندرا است، پس از آن از به کار بردن این اصطلاح خودداری میکند و به جای آن مایل است اصطلاح BigData یا دادههای عظیم را به کار ببرد تا این گروه از پایگاههای داده را نه براساس چیزی که نیستند (سازگار با SQL) بلکه براساس کاری که میکنند (مدیریت مقادیر عظیم داده) تعریف کند. دوره استفاده از این اصطلاح کموبیش به پایان رسیده است چرا که بسیار گیجکننده است و به نظر میرسد باعث میشود راجع به مجموعهای از پایگاههای داده بحث کنیم که در عمل میزان شباهت میان اهداف، ایدههای طراحی و قابلیتهای آنها بسیار اندک است. بهتر است بگذاریم کاساندرا همان کاساندرا، CouchDB همان CouchDB و Riak همان Riak بماند.
Partition (پارتیشن)
به صورت کلی، پارتیشن به یک بخش مجزا از شبکه اشاره میکند. این جداسازی بخشها در اثر یک شکست یا قطعی در شبکه ایجاد شده و باعث میشود یک ماشین نتواند به صورت مستقیم با یک ماشین دیگر تماس برقرار کند. پارتیشن ممکن است در اثر خرابی یک سوییچ، روتر یا رابطهای شبکه بهوجود آید. کلاستری از 5 ماشین {A,B,C,D,E} را تصور کنید که در آن {A,B} روی یک زیرشبکه یا Subnet و {C,D,E} روی زیرشبکه دیگری باشند. اگر سوییچی که به گروه دوم متصل است از کار بیافتد، شما پارتیشنی خواهید داشت که این دو زیرگروه را از هم جدا خواهد کرد. کاساندرا پایگاهدادهای است که قابلیت تحمل خطاها را دارد و پارتیشنهای شبکه یکی از این خطاها هستند. به همین دلیل کاساندرا میتواند در صورت مواجه شدن با یک پارتیشن به کار خود ادامه دهد و دادهها را پس از برطرف شدن مشکل پارتیشن، دوباره با هم ادغام کند.
Replication (تکثیر)
به صورت کلی در سیستمهای توزیعشده، اصطلاح تکثیر به ذخیره چندین کپی از داده روی چندین ماشین مختلف اطلاق میشود. این امر به این دلیل انجام میشود که در صورت خرابی یکی از ماشینها یا عدم امکان دسترسی به آن در صورت ایجاد یک پارتیشن، کلاستر هنوز بتواند به دادهها دسترسی داشته باشد. کش کردن دادهها (Caching) یکی از سادهترین راههای تکثیر است. در کاساندرا، تکثیر ابزاری برای فراهمآوردن کارایی بالا، دسترسپذیری و قابلیت تحمل خطا است.
Row (سطر)
در یک خانواده ستون، یک سطر نقشهای مرتبشده است که نام ستونها را با مقادیر آنها انطباق میدهد. در یک ابرستون (Super Column) یک سطر، نقشهای مرتبشده است که اسامی ابرستون را با نقشه ارتباطی اسم ستون و مقدار ستون متناظر آن پیوند میدهد.
Thrift
نام یک کلاینت فراخوانی راهدور پردازه(RPC سرنام Remote Procedure Call) است که برای ارتباط با سرور کاساندرا مورد استفاده قرار میگیرد. این کلاینت به صورت استاتیک رابطی برای سریالسازی را در بسیاری از زبانها از جمله ++C، جاوا، پایتون، پیاچپی، روبی، ارلنگ، پرل، هسکل، سیشارپ، کاکائو، اسمالتاک و OCaml فراهم میکند. همین مکانیسم است که به شما اجازه میدهد از طریق تمام این زبانها با کاساندرا ارتباط برقرار کنید. در زمان نوشتن این مطلب احتمال زیادی وجود دارد که پروژهای جدیدتر و فعالتر از آپاچی به نام آورو (Avro) جایگزین رابط Thrift شود. یکی از مزیتهای مهم آورو این است که به ایجاد کدهای استاتیک احتیاجی ندارد.
Hadoop (هادوپ)
هادوپ یک فریمورک نرمافزاری است که کاربردهای توزیعشده با دادههای فراوان را تحت یک مجوز آزاد، پشتیبانی میکند. این فریمورک به برنامهها امکان میدهد که با هزاران نود و دادههایی در اندازههای پتابایت کار کنند. هادوپ از مقالات مرتبط با سیستم Map Reduce گوگل و همچنین سیستم فایلی آن GFS، الهام گرفته است.
HDFS
یک سیستمفایلی توزیعشده، مقیاسپذیر و قابل حمل (portable) است که با زبان جاوا برای هادوپ نوشته شده است. این سیستمفایلی برای ارتباطات از لایه TCP/IP استفاده میکند و کلاینتهای آن از RPC برای ارتباط با یکدیگر بهره میبرند. سیستمفایلی HDFS فایلهای بزرگ (اندازه ایدهآل فایلها مضارب 64 مگابایت است) را در ماشینهای مختلف ذخیره میکند. این سیستم برای افزایش قابلیت اعتماد، دادهها را در میزبانهای مختلفی تکثیر میکند و به همین دلیل به قابلیت RAID روی میزبانها احتیاجی ندارد. با مقدار پیشفرض تکثیر 3، دادهها روی سه نود ذخیره میشوند که از این سه نود، دو نود در یک رک و یکی در رک دیگری واقع شده است.
HBase
پایگاه داده هادوپ برای دسترسی خواندن و نوشتن تصادفی است. HBase پایگاه داده توزیعشده، غیر رابطهای و اپنسورس است که از روی BigTable گوگل مدلسازی و به وسیله جاوا نوشته شده است. این پایگاه داده به عنوان جزئی از پروژه هادوپ در بنیاد نرمافزار آپاچی توسعه داده شده است و روی HDFS اجرا میشود و قابلیتهایی همانند BigTable را برای هادوپ به ارمغان میآورد. به این معنا که امکان ذخیرهسازی حجم عظیمی از دادههای پراکنده را به روشی که تحمل خطا را نیز دارد، فراهم میکند. پایگاه داده HBase قابلیتهای فشردهسازی، اجرای عملیات داخل حافظه و فیلترهای انفجاری به صورتی ستون محور را؛ درست همانگونه که مقاله اصلی BigTable تشریح کرده است، فراهم میکند. جدولهای HBase میتوانند به عنوان ورودی و خروجی عملیات Map Reduce که روی هادوپ در حال اجرا هستند به کار برده شوند. از طریق APIهای جاوا، REST، آورو و یا گیتویهای Thrift میتوان به این جدولها دسترسی پیدا کرد.
Hive (هایو)
پرسوجوها و جداول شبه SQL که روی مجموعههای عظیم داده عمل میکنند. هایو آپاچی یک زیرساخت برای انبارهای داده(data warehouse infrastructure) است که بر مبنای هادوپ و برای خلاصهسازی، پرسوجو و تحلیل دادهها ساخته شده است. اگرچه در ابتدا توسط یکی از شبکههای اجتماعی مشهور توسعه داده شده، اما اکنون به عنوان یک پروژه آپاچی در سایر شرکتها نظیر نتفلیکس هم مورد استفاده قرار میگیرد. هایو اکنون در Amazon Elastic Map Reduce که از سرویسهای آمازون است به کار میرود. هایو امکان تحلیل مجموعههای عظیم داده که روی سیستمهایفایلی سازگار با هادوپ؛ نظیر S3 آمازون، ذخیره شدهاند را فراهم میآورد. هایو در عین پشتیبانی کامل از Map Reduce، زبانی شبیه به SQL با نام HiveQL را نیز در اختیار کاربران قرار میدهد. هایو برای سریعتر کردن پرسوجوها از اندیسها؛ از جمله اندیسهای Bitmap استفاده میکند.
Pig (پیگ)
پیگ پلتفرمی سطح بالا برای ایجاد برنامههای Map Reduce روی هادوپ است. زبان مورد استفاده در این پلتفرم پیگ لاتین (Pig Latin) نامیده میشود. پیگ لاتین برنامهنویس را از کدنویسی Map Reduce براساس جاوا بینیاز کرده و این قابلیتها را به صورت سیستم نگارشی سطح بالایی عرضه میکند که بسیار شبیه SQL در سیستمهای RDBMS است. پیگ لاتین را میتوان به کمک UDF (سرنام User Defined Functions یا توابع تعریف شده توسط کاربر) گسترش داد که کاربر میتواند این توابع را در جاوا پیادهسازی کرده و بعدتر مستقیماً از طریق پیگ لاتین فراخوانی کند. پیگ در اصل در سال 2006 در مراکز تحقیقاتی یاهو برای محققان توسعه داده شد تا روشی ساده برای ایجاد و اجرای عملیات Map Reduce روی مجموعههای بسیار عظیم داده در اختیار داشته باشند. در سال 2007 این پروژه به بنیاد نرمافزاری آپاچی منتقل شد.
Oozie (اوزی)
نام گردش کاری است که عملیاتهای مختلف هادوپ وابسته به هم، براساس آن انجام میشوند. اوزی یک سرویس مختصاتدهی و گردش کار است که مدیریت عملیات مختلف پردازش داده را به عهده دارد. اوزی سرویسی قابل گسترش، مقیاسپذیر و حساس به داده است که میتواند نیازها و ارتباطات میان عملیات در حال اجرا روی هادوپ (نظیر HDFS، پیگ و Map Reduce) را هماهنگ کند. اوزی خیلی از کارها را به انجام میرساند اما دو کار را نمیتواند انجام دهد:
- فراهمآوردن راهحلی برای پردازش مستقل از هادوپ
- فراهمکردن یک API جدید برای پردازش پرسوجوها
Sqoop (اسکوپ)
پایگاههای داده و انبارهای داده را با هادوپ ادغام میکند. پروژه اسکوپ آپاچی ایجاد شده است تا دادههای حجیم را به صورتی کارا میان هادوپ و سیستمهای ذخیرهسازی ساختیافته بیرونی نظیر RDBMS و انبارههای داده (Data warehouse) جابهجا کند، چرا که این پایگاههای داده به سادگی از طریق هادوپ قابل دسترسی نیستند. اسکوپ اکنون در حال طی مراحل Incubation (مراحل اولیه پذیرش یک پروژه) در بنیاد نرمافزاری آپاچی است.
Zookeeper
Zookeeper سرویسی برای برنامههای توزیعشده است. به عبارت دیگر سرویسی مرکزی است که نگهداری اطلاعات پیکربندی، نامگذاری، فراهمآوردن همسانسازی توزیعشده و همچنین ایجاد سرویسهای گروهی را بر عهده دارد. تمام این سرویسهای متفاوت به نوعی در برنامههای توزیعشده مورد استفاده قرار میگیرند.
Hue
فریمورک و SDK رابط کاربری برای برنامههای بصری هادوپ است. Hue هم یک رابط کاربر مبتنی بر وب هادوپ است و هم فریمورکی برای ایجاد برنامههای تعاملی وب. این فریمورک شامل یک File Browser برای دسترسی به HDFS، یک برنامه JobSub و JobBrowser برای ایجاد یا مشاهده عملیات Map Reduce و یک برنامه Beeswax برای تعامل با هایو است. علاوه بر همه اینها، رابط وبی آن بیشتر بر مبنای ابزارکهای توصیفی (Declarative Widgets) ساخته شده است که نیازی به جاوااسکریپت ندارد و یادگیری آن بسیار ساده است.
Map Reduce
یک فریمورک نرمافزاری است که در سال 2004 توسط گوگل عرضه شد تا محاسبات توزیعشده روی مجموعه عظیمی از دادههای ذخیره شده روی کلاسترهای کامپیوتری را پشتیبانی کند. برخی از بخشهای این فریمورک در برخی کشورها به صورت حق اختراع انحصاری (Patent) ثبت شدهاند. این فریمورک از توابع map و reduce که به صورت معمول در برنامهنویسی رویهای مورد استفاده قرار میگیرند، الهام گرفته است؛ هرچند که عملکرد آنها در اینجا هیچ شباهتی به فرم اولیه ندارد. کتابخانههای Map Reduce به زبانهای مختلفی از جمله ++C، سی شارپ، ارلنگ، جاوا، LabView، OCaml، پرل، پایتون، پیاچپی، روبی، F#، R و سایر زبانها نوشته شدهاند.