بخشی از مقاله
چکیده
در چند سال اخیر، دنیای پایگاههای داده NoSQL با پروژههای جذاب و هیجان انگیز جدیدی به همراه ادعاهای بلند پروازانه و مشاجرههای مختلف پر شده است. مبلغان این فناوریها ادعا میکنند که بستههای نرم افزاری NoSQL جدید، با حذف ساختار و مشکلات کنترل سه گانه دادهها در پایگاههای دادهای سنتی، به سرعتهای خیره کنندهای دست پیداکردهاند. آنها در مقابل ادعای مشکلات ذاتی چنین پایگاههای دادهای در زمینه قابلیت اعتماد، معتقدند که در این بحث بسیار مبالغه شده است و واقعیت چیز دیگری است.
در عصر حاضر، همانگونه که ما با حجم غول پیکری از داده ها دست و پنجه نرم میکنیم، سازماندهی و ساختارمند کردن دادهها، به ویژه در حجمهای بسیار بزرگ، به یک مشکل تبدیل شده است. با توجه به این مشکلات در سیستم های رابطهای و عدم وجود پایگاههای داده همه منظوره، ما در مقاله خود جهت رفع این مشکلات، راه حل همزیستی مسالمت آمیز - Polyglot Persistence - را ارائه کردهایم که در واقع این راه حل تجمیع استفاده از پایگاههای داده مختلف برای حل مشکلات مذکور میباشد.
- 1 مقدمه:
NOSQL نسل جدیدی است از پایگاههای داده که غالبا غیررابطهای، توزیع پذیر، متنباز و با قابلیت توسعه افقی میباشند. NoSQL یکی از انواع ذخیره داده میباشد و راهی است برای ذخیرهسازی و بازیابی سریع دادهها. اولین جرقههای تولید این نوع پایگاه داده در سال 2009 زده شد و بعد از آن با سرعتی باور نکردنی پیشرفت کرد. در حال حاضر بیشتر از 299 سیستم مدیریت پایگاه دادهNoSQL وجود دارد و وب سایتهای بزرگی چون گوگل، آمازون، فیس بوک، توییتر و غیره از این نوع پایگاهها استفاده میکنند .
[1] برخی از خصوصیات این نوع پایگاه داده: چهار چوبهای جداول RDBMS را ندارند. به آسانی قابل توزیع میباشند کار با آنها ساده است و واسطهای کاربری بسیار سادهای دارند. ACID نیستند ولی در دادههای بسیار عظیم پایدارند. اشتباه رایج در مواجه اولیه برنامه نویسان با این نوع پایگاههای داده، جایگزین نمودن این نوع پایگاهها با پایگاههای RDBMS مانند و ... میباشد. غالبا Nosql را واژهای در تضاد با sql فرض میکنند در صورتی که اینطور نیست و این نوع پایگاههای داده نگرشی جدید در دنیای ذخیره اطلاعات میباشند و به منظور مشخصی تولید شدهاند.
در انجمن عموما را اینگونه تعریف میکنند Not Only Sql. خیلی ساده باید بگویم پایگاههای داده RDBMS به دلیل پشتیبانی کامل از ACID و زبان فراگیر، جامع و کارای خود - Sql - به هیچ وجه قابل جایگزینی با NoSQL ها نمی باشند. در سیستمهای بانکی و امنیتی که نیاز شدیدی به پشتیبانی ACID وجود دارد و یا در سیستمهای رابطهای که اشیاء در ارتباطی بسیار تنگاتنگ با هم میباشند استفاده از پایگاههای داده رابطهای غیر قابل اجتناب است.
مشکل پایگاههای داده رابطهای در توزیع پذیری این نوع پایگاهها میباشد. پایگاههای داده رابطهای معمولا به خوبی در یک سرور بزرگ میشوند ولی وقتی حجم اطلاعات به ترابایتها میرسد، نیاز به توزیع به وجود میآید. مثلا توزیع در هزاران سرور مشکلات پایگاههای دادهای رابطهای بروز میکند . [2] , [1] پیچیدگیهای مدیریت این نوع پایگاهها در حالت توزیع شده، سرعت پایین بازیابی اطلاعات، مشکلات ایندکس کردن دادهها و مشکلات مربوط به ارتباط دادن اشیاء در محیطی توزیع شده باعث گردید شرکتهای بزرگی همچون گوگل، توییتر و ... به سمت استفاده از پایگاههای داده ی غیر رابطهای سوق داده شوند .[1]
در وب سایتهای اجتماعی و یا در موتورهای جستجوگر نیاز به پشتیبانی از ACID آنطور که در سیستمهای بانکی وجود دارد نیست و لزومی به استفاده از پایگاههای رابطهای وجود ندارد. نرم افزارهای وب با دادههایی حجیم و غول آسا به پایگاه دادهای نیاز دارند که به آسانی گسترش یابند و توزیع شوند، هزینه نگهداری پایین داشته باشند و اطمینان از پایداری دادهها را بدهند. و این خصوصیاتی بود که NoSQL ها با خود به همراه آوردند.[3]
- 2 مدلهای دادهای و دسته بندی آنها
چهار نوع اصلی از پایگاه دادههای NoSQL وجود دارد.
: Key/value store که یک تابع دادههای باینری را میگیرد و آنها را به مقدار Key نسبت میدهد و سپس در پایگاه داده برای بازیابیهای بعدی ذخیره میکند .[10]
: Document store اشیا باید سند باشند سپس به یک فرمت قابل شناسایی انکد میشوند مانند xml و pdf اما هیچ نیازی به ساختار یا محتوای اسناد نیست. هر سند بعنوان یک بخش value از key/value ذخیره میشود.
:Columnar databases یک ترکیب از Nosql و پایگاه داده رابطهای است که از ساختار سطر و ستون ایجاد میشود اما قوانین سخت پایگاه داده رابطهای را ندارد.
:Graph databases اطلاعات را در چندین تاپل جدول ذخیره میکند که ارتباط در شیوههای متفاوت را منعکس میکند. برای مثال پایگاه داده گراف رابطه دوستی در شبکههای اجتماعی را ذخیره میکند .
-1-2 پایگاه دادههای Key-Value
در مدلهای ذخیره سازی این پایگاههای داده جفتهای دادهای کلید/مقدار در اصل به صورت DHT ذخیره میشوند که در اصل،یک سرویس بازیابی مشابه Hash Table فراهم میسازد. در پایگاههای داده کلید/ مقدار جدید ، هر node یک ماشین عضو کلاستر پایگاه داده موجود در سیستم میتواند مقدار مرتبط با یک کلید را به صورت بهینه بازیابی کند. مسئولیت نگهداری نگاشت کلیدها و مقدارها در میان نودهای موجود توزیع شده است به طوری که هر گونه تغییر در مجموعه نودها، کمترین میزان قطع شدن خدمات سیستم را به بار خواهد آورد.[7] , [6]