انتخاب یک پایگاه داده یک تعهد بلندمدت است، بنابراین نباید به راحتی تصمیم گرفت. نکته مهمی که باید در نظر داشته باشید انتخاب پایگاه داده مناسب برای کار مناسب است.
داده ها می توانند ساختار یافته (شما جدول SQL)، نیمه ساختاریافته (JSON، XML، و غیره) و بدون ساختار (Blob) باشند.
دسته بندی های رایج پایگاه داده عبارتند از:
- Relational
- Columnar
- Key-value
- In-memory
- Wide column
- Time Series
- Immutable ledger
- Geospatial
- Graph
- Document
- Text search
- Blob
دلیل این که امروزه گزینههای دیتابیس زیادی وجود دارند ناشی از نظریه CAP است. CAP اختصاری برای سه عبارت «consistency ،availability ،partition tolerance» یعنی سازگاری، دردسترسبودن و تحمل تسهیم است.
سازگاری دیتابیس یعنی هر درخواست خواندن، جدیدترین نسخههای نوشته شده را بازگشت دهد.
دردسترسبودن دیتابیس یعنی گره غیرپاسخگو، باید در طی مدت زمانی معقول پاسخگو شود.
تحمل تسهیم دیتابیس یعنی سیستم علیرغم بروز شکست در شبکه یا گره بتواند به کار خود ادامه دهد.
در هر لحظه از زمان تنها دو مورد از این سه الزام میتوانند برقرار باشند.
دیتابیس های داده رابطهای
دیتابیسهای داده رابطهای به طور سنتی، سازگاری و دردسترسبودن بالایی دارند و این به هزینه کاهش تحمل تسهیم به دست میآید. این دیتابیسهای داده برای نوشتن بهینهسازی شدهاند. مثالهایی از دیتابیسهای داده رابطهای بهصورت SQL Server ،MySQL ،PostgresSQL و IBM DB2 است.
دیتابیس های داده غیر رابطهای
دیتابیسهای داده غیر رابطهای جهت افزایش «دردسترسبودن و تحمل تسهیم» و یا «سازگاری و تحمل تسهیم» توسعه یافتهاند. این نوع از دیتابیسهای داده جهت خواندن بهینهسازی شدهاند. مثالهایی از دیتابیسهای داده غیر رابطهای شامل Memcached ،Redis ،Coherence ،Hbase ،BigTable ،Accumulo ،MongoDB و CouchDB است.
در سیستمهای پیچیده که حجم عملیات خواندن و نوشتن هر دو بالا است، داشتن ترکیبی از دیتابیسهای داده رابطهای و غیر رابطهای برای جداسازی وظایف خواندن در برابر نوشتن جهت بهینهسازی CAP ضروری است.
گام بعدی در مسیر انتخاب دیتابیس مناسب این است که فهرستی از سؤالها دررابطهبا الزامات کسبوکار خود بپرسید. برخی از این سؤالها در فهرست زیر ارائه شدهاند:
- در دادههای شما چه تعداد رابطه وجود دارد؟
- سطح پیچیدگی دادههای شما چهقدر است؟
- دادهها به چه میزان تغییر مییابند؟
- اپلیکیشن شما به چه میزان به داده کوئری میزند؟
- اپلیکیشن شما به چه میزان به روابط بین دادهها کوئری میزند؟
- کاربران شما به چه میزان دادهها را بهروزرسانی میکنند؟
- کاربران شما به چه میزان منطق موجود در دادهها را بهروزرسانی میکنند؟
- اپلیکیشن شما در صورت بروز یک فاجعه غیرمترقبه چهقدر حیاتی خواهد بود؟