جزئیات  
عنوان الگوهای معماری داده NoSQL ( بخش اول )
نوع منبع مقاله
گروه NoSQL
تاریخ انتشار 1394/10/18
خلاصه از گذشته تاکنون شاهد سه دوران مختلف در عرصه بانک های اطلاعاتی بوده ایم. از سیستم های مدیریت بانک های اطلاعاتی رابطه ای (RDBMS ) برای تراکنش ها و از بانک های اطلاعاتی تحلیلی ( Analytics) برای انبار داده استفاده می شود . این وضعیت تا سال 2010 ادامه بافت . از آن سال به بعد با توجه به تغییرات گسترده در حوزه فناوری اطلاعات از یک طرف و از سویی دیگر تغییرات عمده در نیازهای کسب و کار، فقدان وجود یک ساختار ذخیره و بازیابی دیگر بیش از همیشه احساس گردید. NoSQL ، پاسخی به این کمبود بود . NoSQL قرار است پاسخ گوی چه نیازهایی باشد و یا ما با چه کمبودی در عرصه ذخیره و بازیابی اطلاعات مواجه شده بودیم که ضرورت وجود یک الگوی معماری جدید بانک اطلاعاتی احساس گردید؟ آشنایی با الگوهای معماری داده NoSQL می تواند به بسیاری از سوالات این چنین پاسخ دهد.

الگوهای جدید معماری بانک های اطلاعاتی NoSQL چه چیزی هستند و این نوع بانک های اطلاعاتی قرار است پاسخگوی چه نوع مسائلی باشند ؟ چگونه می توان با توجه به نوع نیاز و ماهیت مساله از یک الگوی مناسب NoSQL استفاده کرد ؟ سعی خواهیم کرد در این مطلب  و سایر مطالبی که در آینده منتشر خواهد شد ، ضمن پاسخ گویی به این قبیل سوالات به صورت اصولی با الگوهای جدید معماری بانک های اطلاعاتی آشنا شویم .

بانک های اطلاعاتی از گذشته تا کنون 
از گذشته تاکنون شاهد سه دوران مختلف در عرصه بانک های اطلاعاتی بوده ایم . شکل 1 ، این دوره های مختلف را نشان می دهد.از سیستم های مدیریت بانک های اطلاعاتی رابطه  ای (RDBMS ) برای تراکنش ها و از بانک های اطلاعاتی تحلیلی ( Analytics) برای انبار داده استفاده می گردد . NoSQL قرار است  پاسخ گوی چه نیازهایی باشد و یا ما با چه کمبودی در عرصه ذخیره و بازیابی اطلاعات مواجه شده بودیم که ضرورت وجود یک الگوی معماری جدید بانک اطلاعاتی احساس گردید.

 دوره های  مختلف بانک های اطلاعاتی
شکل 1 : دوره های  مختلف بانک های اطلاعاتی

شکل  2 ، وضعیت قبل از NoSQL را نشان می دهد .
 وضعیت بانک های اطلاعاتی قبل از ظهور فناوری های NoSQL
شکل 2 : وضعیت بانک های اطلاعاتی قبل از NoSQL

به دنبال تحولات عظیم در عرصه فناوری اطلاعات از یک طرف و همچنین تغییرات عمده در نیازهای کسب و کار، معماری مبتنی بر تک گره RDBMS  با چالش های متعددی روبرو گردید . در شکل 3 به برخی از این چالش ها اشاره شده است .
   برخی چالش های معماری RDBMS تک گره ای
شکل 3 : برخی چالش های معماری RDBMS تک گره ای

با توجه به موارد اشاره شده ، از سال 2010 به بعد نیاز به یک الگوی جدید معماری در عرصه بانک های اطلاعاتی به شدت احساس گردید . ظهور NoSQL پاسخی به این نیاز بود . شکل 4 ، وضعیت بعد از NoSQL را نشان می دهد.
  وضعیت بانک های اطلاعاتی پس از ظهور فناوری های NoSQL
شکل 4 : وضعیت بانک های اطلاعاتی پس از NoSQL

درادامه با الگوهای مختلف معماری داده NoSQL آشنا خواهیم شد .

الگوهای معماری داده NoSQL
در این بخش کار خود را با بررسی ساده ترین نوع معماری داده NoSQL که به آن key-value می گویند شروع خواهیم کرد و در بخش های بعد به بررسی سایر الگوها خواهیم پرداخت . خواهیم دید که چگونه می توان از این الگوی مقرون به صرفه برای حل مسایل کسب و کار متعددی استفاده کرد. در ادامه به بررسی موارد زیر خواهیم پرداخت :
  •  Key-value store چیست ؟
  • مزایای استفاده از key-value store
  • نحوه استفاده ازkey-value store
  • بررسی یک نمونه مثال کاربردی از نحوه استفاده key-value store
Key-value store چیست ؟
 Key-value store یک بانک اطلاعاتی ساده است که با ارایه یک رشته ساده به عنوان کلید، می تواند حجم بالایی از داده ( value )  را برگرداند.ساختار ذخیره سازی فوق دارای یک زبان پرس و جو (query ) نمی باشد و از یک روش خاص جهت اضافه کردن و یا حدف زوج کلید- مقدار استفاده می نماید .یک key-value store را می توان  مشابه  یک واژه نامه در نظر گرفت که دارای لیستی از کلمات است و هر کلمه دارای یک و یا چندین تعریف است. یک واژه نامه ساده در شکل 5 نشان داده شده است .
 
 یک دیکشنری ساده و شباهت آن به یک Key-value store
شکل 5 :  یک واژه نامه ساده و شباهت آن به یک Key-value store

واژه نامه یک key-value store ساده است که کلمات  key و تعاریف  value می باشند . پس از ذخیره واژه ها در واژه نامه  به صورت الفبایی ، امکان بازیابی سریع آنها فراهم می شود و لازم نیست برای  واژه ای که به دنبال معنی آن هستیم ، تمامی واژه نامه را جستجو کرد .همانند واژه نامه ، یک key-value store توسط key ، ایندکس گذاری می شود . Key مستقمیا به value اشاره می کند. ماحصل این کار بازیابی سریع اطلاعات (values ) ، صرف نظر از تعداد واژه های ذخیره شده است . یکی از مزایای عدم مشخص کردن نوع داده در یک key-value store ، امکان ذخیره سازی هر نوع داده در value است . سیستم ، اطلاعات را به عنوان یک BLOB  ذخیره می نماید  و زمانی که از دستور GET جهت بازیابی استفاده می گردد ، BLOB مشابه برگردانده می شود . این به عهده برنامه است که مشخص سازد چه نوع داده یی استفاده شده است : یک رشته ، فایل xml و یا binary image .
BLOB  از کلمات Binary Large Object اقتباس شده است و نشان دهنده مجموعه ای از داده باینری ذخیره شده به عنوان یک entry در یک سیستم مدیریت بانک اطلاعاتی است که معمولا شامل متن ، تصاویر ، صدا و سایر اشیاء چند رسانه ای است.
کلید( Key )  در یک key-value store ، انعطاف پذیر بوده و می تواند با قالب های مختلفی همچون اسامی مسیر منطقی به تصاویر و یا فایل ها ، رشته های تولید شده هوشمند از مقدار هش شده ، فراخوانی سرویس وبREST  و یا SQL queries ارایه شود . مقادیر(Value)  نیز نظیر کلیدها ، دارای انعطاف لازم بوده و می توانند شامل هر نوع BLOB داده نظیر تصاویر ، صفحات وب ، مستندات و ویدیوها باشد. شکل 6 ، نمونه ای از یک key-value store متداول را نشان می دهد .

 آیتم های ساده در یک key-value store
شکل 6 :  چندین زوج  کلید-مقدار  ذخیره شده در یک key-value store

مزایای استفاده از یک Key-value store
سادگی ، بکارگیری آسان و متعاقب آن عمومیت key-value store باعث صرفه جویی در وقت و هزینه های جانبی می گردد و شاید همین دلایل باعث شده باشد که ضریب نفوذ استفاده از این نوع ساختار ذخیره سازی به شدت رشد پیدا نماید. بدیهی است در چنین مواردی ، در مقابل تمرکز بر روی طراحی معماری می توان بر روی مواردی جهت کاهش هزینه سرویس های داده نظیر ارتقاء سطح خدمات ، مانیتورینگ سرویس ها و اطلاع رسانی ، مقیاس پذیری و قابلیت اطمینان و قابلیت حمل و کاهش هزینه های عملیاتی  متمرکز گردید.

نحوه استفاده از Key-value store
چگونه پیاده کنندگان یک برنامه می توانند از یک key-value store درون برنامه استفاده کنند ؟ بهترین روش برای تصور این که چگونه یک key-value store مقادیر را ذخیره می کند ، در نظر گرفتن آن به عنوان جدولی با دو ستون است . اولین ستون Key و دومین ستون value است . سه عملیات را می توان در ارتباط با  key-value store تعریف کرد : put , get و delete . دستورات فوق ، اینترفیس مورد نیاز برنامه نویسان جهت کار با Key-value store را ارایه می نماید که به آن API ( برگرفته شده از Application Program Interface  ) گفته می شود . در شکل 7 اینترفیس فوق نشان داده شده است .

 آیتم های ساده در یک key-value store
شکل 7 :  سه دستور Put , Get و Delete رابط برنامه نویسی  key-value store

در مقابل استفاده از یک query language ، پیاده کنندگان برنامه با بکارگیری put , get و delete قادر به دستیابی و عملیات بر روی یک key-value store می باشند . علاوه بر دستورات فوق، یک key-value store دارای دو قانون کلی زیر است:
  • Distinct keys: نمی توان دارای دو سطر با key-value مشابه بود. این بدان معنی است که تمامی کلیدها در key- value store منحصربفرد می باشند.در صورتی که به صورت منحصربفرد یک زوج key-value را مشخص و شناسائی نکنیم ، نمی توان یک مقدار را به عنوان نتیجه کار برگرداند .
  • No queries on values: نمی توان بر روی مقادیر موجود در جدول query اجراء کرد. اگر صرفا متمرکز بر روی بانک های اطلاعاتی رابطه ای تمرکز نماییم ، لازم است توضیحات بیشتری در این خصوص داده شود.در یک بانک اطلاعاتی رابطه ای ، می توان با استفاده از where clause محدودیت هایی را در خصوص برگرداندن نتایج حاصل از اجرای یک query اعمال کرد . در صورتی که در یک key-value store ماحصل اجرای query ،برگرداندن یک آیتم خواهد بود .نمی توان یک زوج key-value را با استفاده از value انتخاب کرد . Key-value store این مساله را با ایندکسینگ در لایه برنامه برطرف می نماید. این کار اجازه می دهد ، key-value دارای یک ساختار ساده و انعطاف پذیر باشد .
پس از آشنایی با مزایا و نحوه استفاده از key-value store ، به بررسی یک نمونه مثال کاربردی خواهیم پرداخت . هدف این مثال ، ذخیره صفحات وب در یک key-value store است و نشان می دهد که چگونه یک موتور جستجو نظیر گوگل تمامی وب سایت ها را در یک key-value store ذخیره می کند.

 مثال : ذخیره صفحات وب در یک Key-value store
گوگل از ابزاری به نام web crawler برای مشاهده اتوماتیک یک وب سایت ، استخراج و ذخیره سازی محتویات هر یک از صفحات وب استفاده می کند. در ادامه ، کلمات موجود در هر صفحه وب به منظور جستجوی سریع کلمات ، ایندکس گذاری می گردند . زمانی که از یک مرورگر وب استفاده می کنیم معمولا آدرس یک وب سایت را به صورت http:// www.example.com/hello.html وارد می نماییم . این URL ، کلید یک وب سایت و یا یک صفحه وب را مشخص می کند . می توان  وب را به صورت یک جدول بزرگ با دو ستون(کلید ، مقدار) در نظر گرفت . شکل 8 ، نحوه ذخیره محتویات صفحات یک وب سایت به کمک key-value store را نشان می دهد .
 
 آیتم های ساده در یک key-value store
شکل 7 :  استفاده از یک URL به عنوان یک  کلید در key-value store

URL ، کلید است و value محتویات صفحه وب در آن آدرس را مشخص می کند. اگر تمامی صفحات وب را در یک سیستم key-value store  ذخیره نماییم دارای میلیاردها و یا تریلیون ها زوج key-value خواهیم بود . هر کلید می بایست منحصربفرد باشد همانند یک URL به یک صفحه وب که منحصربفرد است . قابلیت استفاده از URL به عنوان یک کلید به شما اجازه ذخیره تمامی اجزاء استاتیک و غیرتغییر وب سایت را در یک key-value store می دهد . این عناصر شامل تصاویر ، صفحات HTML استاتیک ، فایل های CSS و کد جاوااسکریپت می باشند . تعداد زیادی از وب سایت ها از رویکرد فوق استفاده می کنند و تنها بخش های پویای یک وب سایت را که توسط اسکریپت ها تولید می شوند در key-value store ذخیره نمی کنند . 

خلاصه
دراین بخش ضمن معرفی اولیه الگوهای معماری مختلف NoSQL، با اولین الگوی معماری Key-value store آشنا شدیم . جایگاه و نحوه استفاده از الگوی key-value store از دیگرمواردی بود که دراین بخش به آن اشاره گردید . Berkley DB ، Memcache ، DynamoDB ، S3 ، Redis و Riak نمونه هایی از بکارگیری الگوی معماری Key-value می باشند.در بخش بعد با Graph store یکی دیگر از الگوهای معماری فناوری NoSQL، آشنا خواهیم شد.