جهان امروز، جهان داده است و ذخیره سازی ، آماده سازی و استفاده بهینه از داده یکی از چالش‌های اصلی سازمان‌ها در یک دهه گذشته بوده است. از این‌رو در سال‌های اخیر تمرکز اصلی متخصصان داده بر روی ساختن چهارچوب‌ها و راه‌حل‌هایی برای مدیریت داده‌ها (از استخراج و ذخیره سازی تا تحلیل و استراتژی‌های داده محور) بوده است.
مطابق گزارش IBM ، در سال 2012 هر روز بالغ بر 2.5 اگزابایت داده تولید می‌شده است و براساس گزارش منتشر شده توسط DOMO حجم تولید داده در سال 2018 نیز به همین منوال ادامه داشته است. در گزارش IBM آمده:«75% داده‌های تولید شده، ساختار نیافته و منابعی مانند متن صدا و ویدئو هستند.»
در برنامه نویسی سنتی، پایگاه‌های داده معمولا از نوع SQL هستندکه کارکردن با آن‌ها معمولا بی دردسر و راحت است. اما این نوع از پایگاه‌های داده یک مشکل بزرگ دارند و این مشکل زمانی خود را نشان داد که غول‌های نرم‌افزاری دنیا مثل گوگل،آمازون و فیسبوک احتیاج به تحلیل داده‌های با حجم و تعداد بالا یا همان Big Data پیدا کردند. پایگاه‌های داده رابطه‌ای به دلیل نوع ساختار خود، برای تحلیل داده‌های بزرگ غیر بهینه، ناکارا و همینطور کند بودند. به همین دلیل ذخیره سازی حجم زیادی از داده‌های بی ساختار (Non-structured Data) سرعت و کارایی این پایگاه‌های داده را به شدت کاهش می‌داد؛ تا اینکه پایگاه‌های داده NoSql پا به عرصه گذاشتند. پس همانطور که حدس می‌زنید، هدف اصلی ایجاد پایگاه‌های داده NoSql کار با داده‌های بی ساختار و حجیم است.

یکی از پایگاه‌های داده NoSql که اخیرا در بنچمارک های معتبر کارایی خوبی از خود به نمایش گذاشته است پایگاه داده Couchbase است که معماری و مدل داده ای جالب توجهی هم دارد.  از طرفی یکی از مهم‌ترین جنبه های مدیریت داده تحلیل و کشف استراتژی‌های داده محور نیز با تغییر مکانیسم ذخیره سازی داده از رابطه ای به NoSql دچار تغییرات بسیار زیادی شده است. به طور مثال نرم افزار آپاچی اسپارک یکی از مهم‌ترین پلت‌فرم‌های آماده، محاسبات استریمینگ و غیر استریمینگ است که در سال‌های اخیر توسعه قابل ملاحظه‌ای داشته و توانایی پردازش سریع و توزیع یافته و اجرای عملیات‌های متنوعی مانند یادگیری ماشین را داراست. آنچه در ادامه می‌خوانید مطلبی است جهت معرفی کامل پایگاه داده couchbase ، معرفی مدل داده‌ای آن  و شاخص گذاری‌ها در آن، همچنین تلاش خواهیم کرد به عنوان یک مثال عملی با استفاده از زبان برنامه نویسی پایتون ابزار تحلیل داده آپاچی اسپارک را به پایگاه داده couchbase وصل کنیم و عملیات هایی مانند خواندن و نوشتن را بر روی آن انجام دهیم.

Couchbase چیست:

یک سیستم متن‌باز و توزیع شده برای مدیریت دیتابیس‌ها است که از هر دو مدل Key-value  و Document  پشتیبابی می کند. به گونه طراحی شده است که  امکان دسترسی به داده‌های ذخیره شده با مدل‌های ذکر شده به صورت  low latency  وجود دارد. این پایگاه داده در کمپانی های مطرحی چون LinkedIn و eBay استفاده می‌شود.

آپاچی اسپارک چیست:

آپاچی اسپارک یک موتور قدرتمند، برای پردازش داده‌های بزرگ به صورت توزیع شده است. منظور از داده‌های بزرگ داده‌هایی است که معمولا بر روی یک کامپیوتر نمی‌توانند پردازش شوند(مثلا داده‌هایی که از مقدار حافظه اصلی (RAM) یک کامپیوتر بیشتر هستند) منظور از توزیع شده این است که داده‌ها بر روی چندین کامپیوتر(که به آن‌ها Node یا گره گفته می‌شود) قرار دارند و بایستی پردازش شوند.

 مدل داده‌ای Couchbase:

اجزای تشکیل دهنده ساختار couchbase عبارتند از مفاهیمی به نامCluster ، Bucket، Scope، Collection

  1. خوشه(cluster): هر خوشه شامل یک یا چند نمونه از  couchbase server است که هرکدام بر روی یک گره مستقل اجرا می‌شود
  2. Bucket : باکت‌ها در واقع معادل با Database های مدل رابطه‌ای هستند. باکت های خود بسته به نوع تعریف، به دو نوع زیر تقسیم می‌شوند و البته هر خوشه (cluster) حداکثر 30 باکت می‌تواند داشته باشد.
    1. Couchbase bucket : این باکت داده‌ها را هم در دیسک  (disk storage)و هم در حافظه اصلی (RAM) ذخیره می‌کند و با استفاده از پروتکل های مربوطه داده ها را در نود های مختلف تکرار می‌کند تا دسترسی بالایی داشته باشد. اگر RAM سیستم پر شد بسته به پیکر بندی‌های صورت گرفته، داده ها از حافظه اصلی پاک می‌شوند اما در دیسک باقی می‌مانند و اگر داده حذف شده بعدا مورد نیاز بود از دیسک به حافظه اصلی منتقل می‌شود.
    2. Ephemeral bucket :
      این نوع باکت‌ها داده‌ها را فقط در حافظه اصلی (RAM) ذخیره می‌کند و هیچ ذخیره سازی بر روی دیسک(disk storage) صورت نمی پذیرد
  3. Collection : کالکشن‌ها معادل Table های دنیای مدل رابطه‌ای هستند که داکیومنت‌های json در داخل این کالکشن‌ها قرار می‌گیرند. هر خوشه (cluster) نهایتا می‌تواند 1000 کالکشن داشته باشد.
  4. Scope: scope مکانیزمی است برای گروه بندی collection ها و در واقع یک موجودیتی است که بین bucket و collection قرار می‌گیرد و ما در سایر پایگاه‌های داده این نوع مدل را کمتر مشاهده می‌کنیم. مثلا می‌توان برای انجام تست بر روی نرم ‌افزار یک scope در نظر گرفت و برای توسعه نرم افزار یک scope دیگر.

شاخص گذاری در couchbase:

در couchbase دو نوع index گذاری وجود دارد اولیه  (primary)و ثانویه (secondary)، شاخص گذاری اولیه اجباری بوده و حتما باید بعد از ساخت باکت ایجاد شود. در صورت عدم ایجاد، به هنگام خواندن و نوشتن اطلاعات با خطا روبرو می‌شویم.

شمایی از نحوه تعریف شاخص اولیه در couchbase

شاخص گذاری ثانویه(Secondary index):

این شاخص بر روی هر کلیدی و هر نوع داده‌ای قابل تعریف است. تعریف شاخص ثانویه سرعت اجرای پرس‌وجوهای مرتبط با آن کلید‌ها را بهبود می‌بخشد. به عنوان مثال تعریف شاخص ثانویه بر روی کلیدی با اسم name که در باکت TEST قرار دارد و  scope و collection آن پیش فرض خود سیستم است  به صورت زیر قابل تعریف است

 نحوه تعریف شاخص ثانویه در couchbase

اتصال couchbase به spark :

در ابتدا نیاز است جهت برقراری اتصال spark و couchbase فایل connector آن را به صورت زیر تنظیم نماییم.

برای برقراری اتصال بین اسپارک با couchbase بایستی چند پیکر بندی همانند تصویر زیر انجام شود

یک دیتافریم اسپارکی همانند تصویر زیر داریم که می‌خواهیم با استفاده از spark آن را داخل پایگاه داده بنویسیم.

ستون __META_ID در واقع همان primary index است که برای هر داکیومنتی باید مشخص باشد و بدون مشخص کردن آن امکان نوشتن داخل couchbase وجود ندارد. درنهایت با استفاده از دستور زیر داکیومنت‌‍‌ها داخل couchbase نوشته می‌شوند.

خواندن از پایگاه داده couchbase نیز با روشی شبیه به این و با دستور زیر امکان پذیر است.

نحوه نمایش اطلاعات در couchbase مانند تصویر زیر است id نمایش داده شده در شکل زیر همان __META_ID تصویر بالاست.

شمایی از یک باکت در couchbase

اگر نیاز باشد به یک کالکشن خاص بر روی یک scope وصل بشویم باید به صورت زیر عمل کنیم