پایگاه داده توزیع شده آپاچی است که دارای مقیاسپذیری بسیار بالایی بوده و برای مدیریت حجم بالایی از دادهها همراه با پایداری سرویس مورد استفاده قرار میگیرد. یک سیستم ذخیرهسازی ( پایگاه داده ) متن باز، توزیع شده و نامتمرکز است، که برای مدیریت مقادیر بسیار دادههای ساخت یافته گسترش یافته در سرتاسر جهان استفاده میشود. این پایگاه داده، نوعی از پایگاه دادههای NoSQL است.
کاساندرا :
در تعاریف بالا روی سه مفهوم توزیع شده، مقیاس پذیری و پایداری سرویس تاکید شده است. برای درک بهتر عملکرد این دیتابیس ابتدا این سه مفهوم را بررسی میکنیم.
توزیع شده : سیستم توزیع شده، مجموعه ای از کامپیوترها هستند، که توزیع آن ها از دید کاربر مخفی ( Transparent ) است، بنابراین، کاربری که با یک سیستم توزیع شده کار میکند، این سیستم را همانند یک کامپیوتر مشاهده میکند.
در این نوع پایگاه داده ها باید به دو مفهوم Replication و Fragmentation توجه داشت.
Data Replication : تکثیر از دادهها به معنای تهیه نسخه یا نسخههای پشتیبان از اطلاعات میزبانی شده روی یک هاست و انتقال آن ها به هاست های دیگر است تا در صورت بروز خرابی اطلاعات اصلی، یک کپی دائمی از اطلاعات در دسترس باشد. مکان این ذخیرهسازها میتواند متغیر باشد. به این معنا که ممکن است در سرور های متفاوت حتی در کشورهای دیگر باشد. در این حالت اگر هر یک از ذخیره سازها به هر دلیلی با مشکل رو برو شد، اطلاعات دیگر دستگاه ها در دسترس بوده و سیستم قادر به بازگرداندن اطلاعات در کوتاه ترین زمان خواهد بود.
Fragmentation : تکه تکه سازی داده ها فرآیندی است که در آن تمامی اجزاء پایگاه داده به زیر جدول ها یا روابط فرعی مختلف تقسیم می شود تا داده ها در سیستم های مختلف ذخیره شوند. قطعات کوچک روابط فرعی یا جدول های فرعی را قطعه می نامند. این قطعات واحدهای داده منطقی نامیده می شوند و در سایت های مختلف ذخیره می شوند. باید مطمئن شد که قطعات به گونه ای هستند که بتوان از آنها برای بازسازی رابطه اصلی استفاده کرد.
مقیاس پذیری : یک ویژگی مطلوب برای یک فرایند یا شبکه یا سیستم است و به توانمندی یک سیستم در تطبیق خود با شرایط جدید و بزرگتر از قبل ( اجزاء بیشتر، اشیاء بیشتر، بزرگ شدن، افزایش حجم کار ) اشاره میکند.
برای مثال با افزایش تعداد کاربران سیستم یا بالا رفتن حجم درخواست ها از سرور سیستم دچار اشکال نشود و بتواند به صورت کامل پاسخگوی درخواست ها باشد.
برای مثال در web application ها از Load Balancing برای این کار استفاده می کنند. یا در پایگاه های داده از connection pool ها.
در بانک های اطلاعاتی دو نوع مقیاس پذیری داریم.
مقیاس پذیری افقی ( Horizontal ) : در این نوع مقیاس پذیری تعداد گره های موجود در سیستم را بیشتر کنیم مثلا سرور های جدید به شبکه اضافه میکنیم. معماری بانک اطلاعاتی باید امکان استفاده از سرور های جدید را داشته باشد. پایگاه داده های Cassandra و Mongodb از این روش استفاده می کنند.
مقیاس پذیری عمودی ( Vertical ) : در این نوع مقیاس پذیری با اضافه کردن توان پردازش گر سیستم یا ارتقاء میزان حافظه یک یا چند سرور باعث بالا رفتن توان پاسخگویی مجموع سرور های بانک اطلاعاتی می شویم. بانک MySql از این روش استفاده می کند.
پایداری سرویس ( High Availability ) : همیشه در دسترس بودن ، توانایی یک سیستم برای کار مداوم بدون از کار افتادن برای یک دوره زمانی تعیین شده است. پایداری سرویس یک استاندارد است که مشخص میکند یک سیستم بدون کوچکترین مشکل برای همیشه در دسترس است. دستیابی به این استاندارد بسیار دشوار است. به این معنی که سیستم یا محصول در 99.999٪ مواقع در دسترس است.
NoSQL : این نوع از پایگاه داده به جای رابطه های جدولی مرسوم از مکانیسمی دیگری برای ذخیره و بازیابی اطلاعات استفاده میکنند. این نوع از پایگاه داده ها اصطلاحا free-Schema هستند، اپلیکیشن سادهتر را پشتیبانی میکنند، رابط کاربری ساده تری دارند، API سادهتری دارند، کاملا سازگارند و مقادیر بزرگ دادهها را پشتیبانی میکنند.
تاریخچه کاساندرا : در یکی از شبکه های اجتماعی توسط دو مهندس که قبلا در شرکت های آمازون و مایکروسافت فعال بودند به منظور جستجوی اینباکس توسعه داده شد.
ویژگی های کاساندرا
Elastic Scalability : بسیار مقیاسپذیر است، امکان اضافه کردن سخت افزار بیشتر برای پاسخگویی به مشتریان و دادههای بیشتر بر اساس نیاز وجود دارد.
Always on Architecture : نقطه شکست ندارد و بهصورت دائمی برای برنامههای کاربردی کسب و کار در دسترس است.
Fast Linear-Scale Performance : بهصورت خطی مقیاس پذیر است، برای مثال خروجی را برای تعداد نودهای درون کلاستر افزایش داده در نتیجه زمان پاسخ سریع تر میشود.
Flexible Data Storage : تمامی فرمت های داده از جمله ساخت یافته، نیمه ساخت یافته و حتی بدون ساختار را پشتیبانی میکند. بهصورت دینامیک میتواند ساختار دادهها را بر اساس نیاز شما تغییر دهد.
Easy Data Distribution : قابلیت توزیع کردن دادهها بر اساس نیاز را به وسیله رپلیکیت کردن دادهها در دیتاسنترهای مختلف دارد.
Transaction support : از ACID پشتیبانی میکند. ACID یکی از ویژگی های است که یک Transaction باید داشته باشد.
ACID سرنام واژگان Atomicity Consistency Isolation Durability بحساب می آید.
Atomicity : بمعنی اتمی بودن است و نشان می دهد که بخشی از Transaction به تنهایی قابل اجرا نمی باشد.
Consistency : بمعنی ثبات و سازگاری است و تضمین می کند که پس از اجرای موفقیت آمیز Transaction و یا شکست آن داده ها در حالت سازگار و معتبر قرار می گیرند.
Isolation : بمعنی ایزولاسیون ( جداسازی ) است و تضمین می کند که داده های درگیر در Transaction، توسط سایر پروسه ها غیرقابل تغییر هستند.
Durability : بمعنی دوام (بقا) است و تضمین می کند که عوامل ناخواسته مثل رفتن برق و ... باعث حذف تأثیر Transaction نهایی شده ( Commit ) نشوند.
هدف از طراحی کاساندرا اداره کردن داده های بزرگ در موقعیت های مکانی متفاوت و بدون توقف است. کاساندرا سیستم توزیع شده نظیر به نظیر در نود هاست که دادهها در میان تمامی نودهای کلاستر توزیع شده است.
اجزای کاساندرا
Node : جایی که دیتا در آن ذخیره میشود.
Data center : مجموعهای از نودهای مرتبط به هم است.
Cluster : مولفهای است که یک یا چند دیتاسنتر را شامل میشود.
Commit log : یک مکانیسم بازیابی خرابی است. تمامی عملیات نوشت در Commit log نوشته میشود.
Mem-table : یک ساختار داده مقیم در حافظه است. بعد از Commit log ،داده در Mem-table نوشته میشود.
SSTable : یک فایل دیسک است که داده آن از Mem-table زمانی که محتوای آن به مقدار آستانه رسیده باشد، پر میشود.
Bloom filter : یک الگوریتم سریع غیر قطعی است برای آزمون عضویت المانها در یک مجموعه. نوع خاصی از Cash است. این فیلترها بعد از هر پرس و جو اجرا میشوند.
نصب کاساندرا
ابتدا به سایت apache.org وارد می شویم. و از لیست محصولات آن که در پایین صفحه آمده است وارد سایت کاساندرا به آدرس cassandra.apache.org می شویم و در این صفحه روی دکمه دانلود کاساندرا کلیک می کنیم. وارد صفحه دانلود کاساندرا می شویم و سورس های مربوط به این پایگاه داده را دریافت کنیم.
اکیدا پیشنهاد میشود که کاساندرا روی سیستم عامل لینوکس نصب شود تا بیشترین بازدهی را داشته باشد.