Apache Ignite Data Grid یک پیاده سازی از استاندارد JCache است. JCache یک API کَش و دسترسی به داده های (Data Access) درون کَش برای زبان جاوا است. البته JCache هیچ ریزه کاری را در مورد توزیع و سازگاری داده ها را ندارد. بنابراین JCache شیوه ای برای همکنشی (تعامل) با کَش است.

JCache یک سامانه ذخیره سازی Key-Value ساده را فراهم کرده است. سامانه key-Value بسار همانند مفهوم های Hashable و Map است. برای نمونه در پایگاه داده های رابطه ای، برای پیدا کردن یک سطر درون جدول (Value)، کلید اصلی آن (Key) به کار گرفته می شود. Key-Value را می توانید همسان با یک جدول دارای دو ستون Key و Value در نظر بگیرید. گونه (نوع) داده ستون Value، می تواند هر کدام از گونه های (نوع های) شناخته شده ساده مانند رشته و عدد و پیچیده مانند BLOB (یا Binary Larg Object) باشد.

اگر نوشته رویکردهای همگام سازی Cache در Apache Ignite را به یاد داشته باشید، گفتیم که در رویکردهای همگام سازی کَش با پایگاه داده، شماره کلیدی را برای دسترسی به مقدار درون کّش به کار می بریم. بنابراین اگر کلید پیدا شود، پس مقدار آن از درون کَش برگشت داده خواهد شد. همچنین اگر Key پیدا شود، پس مقدار تازه بر روی مقدار پیشین نوشته خواهد شد. پس اگر کلید پیدا نشود، پس دو تایی تازه ای درون کَش نوشته خواهد شد. شکل زیر برابری مفاهیم پایگاه داده اوراکل و Apache Ignite را نشان می دهد.

Key-Value درون پایگاه داده های NoSQL به کار رفته است که برای همکنشی (تعامل) با داده ها دارای عملگرهایی مانند put, get, delete  است. شکل زیر نمایی از Key-Value را نشان می دهد. همانطور که می بینید Key همان شناسه پروفایل کاربر و Value داده های پروفایل و محصول های است. JCache بسیاری از ویژگی های زیر را برای همکنشی با کَش فراهم کرده است.

  • Basic Cache operations

  • atomic operations, similar to java.util.ConcurrentMap

  • readthrough caching

  • writethrough caching

  • Entry processor

  • cache event listeners

  • statistics

  • caching annotations

  • full generics API for compile time safety

  • storage by reference (applicable to on heap caches only) and storage by value

در کنار ویژگی هایی که JCache فراهم کرده است، خود Apache Ignite نیز ویژگی های دیگری مانند تراکنش های ACID، پرس و جوهای (کوئری های) SQL، بارگذاری داده ها (Data Loading)، سبک و شیوه ناهمگام را فراهم کرده است. Apache Ignite دارای API برای همکنشی با کَش است که می توانید از اینجا بخوانید. کلاس IgniteCache که مشتق شده از Java Cache است، درون Apache Ignite برای کار با کَش به کار می رود.

Apache Ignite Data Grid یک Key-Value است که می تواند درون حافطه اصلی یا بر روی دیسک ذخیره شود. Apache Data Grid را می می توانیم همچون یک HashMap پارتیشن بندی شده توزیع شده بدانیم که هر گره کلاستر بخشی از همه داده ها را درون خود نگه می دارد. پارتیشن بندی داده ها (Data Partitioning) یکی از بخش های پایه ای پایگاه داده های توزیع شده است. پارتیشن بندی داده ها و توزیع شدگی، توانایی اداره کردن حجم انبوهی از داده ها را بر روی دیتا سنترهای متفاوت، فراهم می کنند. همچنین با پارتیشن بندی و پخش کردن داده بر روی گره های کلاستر، با داشتن چندین گره، می توانیم دسترس پذیری بالا (High Availability) را داشته باشیم.

رویکردهای Cache در Apache Ignite

هر پارتیشن بر روی هر گره از کلاستر (Apache Ignite) بخشی از RAM است که انبوهی از داده ها را درون خود دارد. با پارتیشن بندی داده ها، می توانیم بار کاری را بر روی گره های متفاوت درون کلاستر، پخش کنیم. برتری به کار بردن کلاستر و پارتیشن بندی، در این است که می توانیم با افزودن گره های تازه به کلاستر، توان کاری کلاستر را بیشتر کنیم. شکل زیر نمونه ای از پارتیشن بندی افقی (Horizontal Partitioning) را نشان می دهد. در شکل زیر، داده های پروفایل کاربران را بر اساس شناسه مشتری که همان کلید (Key) است، به دو پارتیش و بر روی دو سرور شکسته ایم. هر پارتیشن داده های یک بازه از شناسه های (کلیدهای) مشتری ها را نگه می دارد.

Apache Ignite برای زبان های جاوا و سی شارپ API هایی را گردآوری کرده است که کار با آنها بسیار ساده است. در مطلب های پیش رو تلاش می کنیم تا اندازه ای، این API را برای زبان سی شارپ به شما بشناسانیم. با API های Apache Ignite، شما می توانید کارهای زیر را به سادگی انجام دهید.

  • کارهای پایه های با کَش مانند Put, Get و Delete
  • API های ConcurrentMap
  • Collocated Processing
  • تراکنش های ACID
  • واکشی داده ها بوسیله SQL