با سلام و درود، اگر برنامه نویس و مخصوصا فریلنس بوده باشید یا تجربه cto بودن رو داشته باشید، حداقل یک بار شده که کلی تحقیق در مورد انتخاب پایگاه داده خود داشته اید. در این مقاله سعی می کنم کارتون برای انتخاب پایگاه داده مناسب را برای دفعات بعدی خیلی ساده تر کنم.
مرجع اصلی نوشته از لیتائو گو می باشد (Leitao Guo (Database and middleware manager at iQIYI))
مقدمه:
پیدا کردن پایگاه داده مناسب برای اپلیکیشن، کار ساده ای نیست. در وبسایت آنلاین ویدیو iQIYI که از بزرگترین وب سایت های آنلاین ویدیو در جهان می باشد و چینی است انتخاب پایگاه داده را بر حسب تجربه و بر اساس فیلد های زیر انجام می دهند:
- Online Transactional Processing (OLTP)
- Online Analytical Processing (OLAP)
- Hybrid Transaction/Analytical Processing (HTAP)
- SQL
- NoSQL
در ادامه به طور جزیی تر به مبحث انتخاب پایگاه داده ها پرداخته خواهد شد.
معیارهای انتخاب پایگاه داده:
زمانی که پایگاه داده انتخاب می کنیم، افراد مختلف از معبارهای مختلف استفاده می کنند:
- کارکنان تدارکات پایگاه داده توجه بیشتری به هزینه های خرید از جمله ذخیره سازی و نیازهای شبکه دارند.
- ادمین های پایگاه داده (Database administrators (DBAs)) موارد زیر را درنظر می گیرند:
- هزینه های عملیانی و نگهداری:
- سیستم هشدار دهنده و مانیتورینگ قابل اطمینان
- پشتیبانی از بک اپ و یازیابی (backup and restore)
- هزینه های مهاجرت و ارتقای معقول
- جامعه ی پشتیبانی فعال
- افزایش کارایی آسان
- عیب یابی آسان
- پایداری سرویس:
- پشتیبانی از چندین رپلیکا داده (داده های تکراری)
- سرویس های با دسترسی بالا
- پشتیبانی از معماری های فعال و چندگانه نوشتن
- کارایی:
- تاخیر (latency)
- کوئری به ازای هر ثانیه (QPS)
- آیا از ویژگی های ذخیره سازی سلسله مراتبی پشتیبانی می کند؟
- مقیاس پذیری: مقیاس پذیری آسان به صورت افقی و عمودی دارد؟
- امنیت: آیا پیشنیاز های جلو گیری از SQL Injection و نشت اطلاعات را دارد؟
- هزینه های عملیانی و نگهداری:
- توسعه دهدگان اپلیکیشن نگرانی هایشان برای انتخاب پایگاه داده موارد زیر می باشد:
- سرویس های پایدار
- کارایی بالا
- مقیاس پذیری
- اسان بودن توسعه واسط های پایگاه داده
- آسان بودن اصلاح الگو های پایگاه داده
iQIYI از چه پایگاه داده هایی استفاده می کند؟
پایگاه داده های اصلی وب سایت iQIY به شرح زیر میباشد:
- MySQL
- TiDB
- Redis
- Couchbase
- Big data analytical systems, like Hive and Impala
- Other databases, like MongoDB, HiGraph, and HiKV
به دلیل وجود پایگاه داده های فراوان در iQIYI توسعه دهندگان اپلیکیشن ممکن ندانند که کدام پایگاه داده مناسب سناریوی اپلیکیشن آنها است. بنابراین، این پایگاه داده ها با توجه به سناریوهای اپلیکیشن ها و واسط های پایگاه داده دسته بندی شده و یک ماتریس بدست آمده است:
- محور x ها سناریو های اپلیکیشن را نشان می دهد: OLTPیا OLAP
- محور y ها واسط های پایگاه داده را نشان می دهد: SQLیا NoSQL
ماتریس فوق مشخصات زیر را دارد:
- سمت چپ:
- گوشه بالا سمت چپ:
- پایگاه داده هایی که از OLTP و SQL پشتیبانی می کنند. برای مثال MySQL سطوح مختلف ایزوله و QPS بالا و با تاخیر (latency) کم را پشتیبانی می کند. در iQIYI عمدتا از این پایگاه داده برای ذخیره سازی اطلاعات تراکنشی (transaction information) مانند سفارشات و اطلاعات VIPاستفاده می کنیم.
- گوشه پایین سمت چپ:
- در iQIYI از پایگاه داده های NoSQL جهت بهینه سازی سناریوهای خاص استفاده می کنیم. معمولا این پایگاه داده ها الگوهای ساده ای دارند یا حتی بدون الگو و با توان عملیاتی بالا و تاخیر کم هستند. در iQIYIO معمولا از آنها برای کش (cache) یا پایگاه داه های کلید-مقداری استفاده می کنند.
- گوشه بالا سمت چپ:
- سمت راست:
- همه شان OLAP، سیستم های آنالیزی Big Data مانند ClickHouse و Impala می باشند. معمولا از زبان SQL پشتیبانی می کنند ولی از تراکنش (transaction) پشتیبانی نمی کنند.مقیاس پذیری خوبی دارند و تاخیر پاسخ بالایی دارند.
- در اطراف نقطه تلاقی دو محور:
- این پایگاه داده ها خنثی هستند، و آنها را HTAPمی نامیم مانند TiDB. زمانی که مقدار داده ها کوچک است، کارایی خوبی دارند. زمانی که داده ها زیاد شوند یا کوئری ها پیچیده شوند، کاراییشان بد نیست.
درخت تصمیم گیری عملی، برای انتخاب پایگاه داده کارآمد:
خب در ادامه به درخت انتخاب پایگاه داده ای که لیتائو گو و دیگر همکاران DBA او تهیه کردند پرداخته شده است.
چطور یک پایگاه داده رابطه ای مناسب و کارآمد انتخاب کنیم؟
زمانی که شما یه پایگاه داده رابطه ای انتخاب می کنید:
۱- حجم داده های خود و مقیاس پذیری پایگاه داده را در نظر بگیرید.
۲- تصمیم را مبتنی بر موارد زیر انجام دهید:
- پایگاه داده شامل cold backup system است؟
- قصد استفاده از TokuDB storage engine دارید؟
- قصد استفاده از پروکسی دارید؟
چطور یک پایگاه داده NoSQL مناسب و کارآمد انتخاب کنیم؟
زمانی که یک پایگاه داده NoSQL انتخاب می کنیم، باید فاکتورهای زیادی را در نظر بگیریم تا تصمیم بگیریم که قصد استفاده از primary-secondary framework، client sharding ، distributed cluster ، Couchbase یا HiKV را داریم؟
نکاتی برای انتخاب پایگاه داده
- سعی کنید مشکلات را ابتدا بدون تغییر پایگاه داده حل کنید. شما می توانید نیازمندی ها را مبتنی بر حجم داده، QPS ، و تاخیر تعیین کنید، اما آیا این نیازمندی ها نیازمندی های اصلی و حقیقی هستند؟ می تونید راهی بغیر از شامل شدن پایگاه داده برای حل این مسائل ارایه دهید؟ برای مثال، اگر حجم داده زیاد است، می توانید ابتدا از encode کردن یا فشرده کردن استفاده کنید. تمامی نیازمندی های خود را آنقدر پایین و در سطح پایگاه داده نیاورید.
- دلیل اصلی برای انتخاب یک پایگاه داده را در نظر بگیرید. چون خیلی رایج و معروف است انتخابش کردید؟ یا چون خیلی پیشرفته است؟ مهمترین پرسش اینجاست: واقعا میتونه مشکل شما را حل کنه؟ برای مثال، اگر حجم داده شما خیلی بزرگ نیست، شما نیاز به یک سیستم با storage زیاد ندارید.
- با دقت قبل از اینکه یه راهکار را انتخحاب کنید، فکر کنید. آیا شما یک سیستم را بدلیل اینکه کار نمی کند رها می کنید؟ یا به این دلیل که از آن بدرستی استفاده نمی کنید؟ رهایی و خلاص شدن از راهکار خودتان سخت است، پس در مورد اینکه چرا از آن دست می کشید، روشن باشید.به عنوان مثال، قبل از تصمیم گیری، معیار های TPC-C و Sysbench را مقایسه کنید.
- نگرش خوبی نسبت به خود سازی داشته باشید. زمانی که نیاز به توسعه پایگاه داده خود دارید، شما ممکن است به تعدادی از محصولات بالغ مراجعه و از آنها استفاده کنید. چرخ را از ابتدا اختراع نکنید، مگر به آن نیاز داشته باشید.
- محصولات متن باز را در آغوش بکشید 🙂 برای مثال TiDB یک پایگاه داده SQL توزیعی اپن سورس می باشد. دارای جامعه فعال می باشد و در حال حاضر دارای ۲۶ هزار ستاره در گیت هاب است.
مراجع دیگر: سایت Dzone ، سایت Geek For Geek
ارسال پاسخ