هیجانی برای اکتشاف

دنیایی برای خلق

انتخاب دیتابیس درست

جز متن‌های "برنامه‌نویسی و کامپیوتر"


چطوری دیتابیس درست رو برای پروژمون انتخاب کنیم

این متن پنج ماه پیش نوشته شده

اگر شما در فضای تجزیه و تحلیل جدید باشید، احتمالا مثل من خیلی غرق در انتخاب بهترین گزینه ها و اجرا کردنشون میشید. این مسئله خودش رو زمانی بیشتر نشون میده که شما میخواید تکنولوژی اصلی، یعنی دیتابیس رو انتخاب کنید!

چهار قانون اصلی برای انتخاب درست

زمانی که به بحث انتخاب پایگاه داده میرسیم، چهار قانون اصلی هست که رعایتشون میتونه خیلی به انتخابتون کمک کنه.

از آخر فکر کنید!

کوئریهای پیشبینی نشده، دقیقا آسیب زننده پرفورمنسن! اگر از دیتابیس شما کوئری گرفته نشه، همه چیز عالی پیش میره. برای اینکه بتونید کوئریهای پیشبینی نشده رو مدیریت کنید، باید تا حد امکان از تمام منابع موجود سیستم برای محاسبات استفاده کنید.

برای اینکه از پسش بربیاید، کافیه همیشه یک قدم از کاربرتون جلوتر باشید. پیشبینی کنید که چه چیزی رو درخواست میکنه و اون رو قبل از درخواستش براش آماده کنید. اگر لازم هست که مداوم اینکار رو انجام بدید، یه دیتابیس مناسب رو انتخاب کنید

دیتا مدل درستی بسازید

هر دیتابیسی برای کار خاصی ساخته شده. سازندههای هر دیتابیس از قصد بعضی از ویژگیها رو داخل اون پایگاه داده قرار دادن تا اون رو قدرتمندش کنن، اما با این حال از برخی ویژگیها و ایمپلنتشون صرف نظر کردن! این رو در نظر بگیرید که دیتای شما چطور قرار هست مورد استفاده قرار بگیره، و به نسبت پایگاه داده درستی رو انتخاب کنید.

دیسکها سریع هستند، مموریها سریعتر!

شبکه ها و سخت افزارها هرروز قدرتمندتر میشن. با این حال، استفاده صحیح از دیسک میتونه تو سرعت پردازش دیتا اثر مثبت داشته باشه.

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

اینجاست که مموری ها خودشون رو نشون میدن! مموریها واقعا از دیسکها سریعتر هستند و به همون نسبت هم گرونتر. اگر مجموعه داده های شما کوچیک هستند و یا حاضر به هزینه کردن هستید، پس مموری میتونه گزینه خوبی برای شما باشه.

IO بسیار مهمه!

داده ها به خودی خودشون کاربردی نیستن، مگر زمانی که تو دیتابیس ذخیره بشن. گاهی برنامه نویسها مسئله زمان بارگزاری اطلاعات رو فراموش میکنن و بعد، با مشکلات پرفورمنس، که اغلب از مدت زمان نوشتن اطلاعات میاد، مواجه میشن.

در واقع در کنار مدت زمان خوندن اطلاعات، باید مدت زمان نوشتن اونها هم در نظر گرفته بشه! با همه اینها، شما میتونید نوشتن ها رو بهتر از خوندنها پیشبینی کنید. یک گزینه خوب میتونه نوشتن یکجای اطلاعات در تعداد کم باشه، تا نوشتن خورد خورد اطلاعات در تعداد زیاد. یه استراتژی دیگه میتونه استفاده از صفها (queue) باشه تا بافرهایی رو برای نوشتن اطلاعات استفاده کنن.

تو مواقع بحرانی، شاید بهتر باشه که دو کلاستر از دیتابیس داشته باشید، یکی برای نوشتن و یکی برای خوندن. ساختار نوشتاری و تکرار استفاده شده در کلاسترها میتونه نقش همون بافر رو برای شما بازی کنه.

انتخاب دیتابیس

حالا میریم به مرحله انتخاب دیتابیس. اینجا بعضی از دیتابیسهای معروف رو طبقه بندی میکنم. این اطلاعات رو از سایتهای مختلف و استفاده شخصیم جمع آوری میکنم و سعی میکنم بروز نگهشون دارم:

پایگاه داده های عمومی

Postgres، MySQL، MongoDB و MSSQL، که اکثرا دیتابیسهای رابطه ای (به جز مانگو) هستند. این دیتابیسها اغلب در شرایط سخت، تو پروژهای مقیاس کوچیک تا بزرگ خوب جواب میدن. اکثرشون هم از ایندکیسنگ های ثانویه پشتیبانی میکنن که کمک میکنه دسترسی به اطلاعات براتون راحتتر بشه.

لازمه که ذکر کنم، این دیتابیسها میتونن برای داده های خیلی بزرگ دردسر ساز باشن، یا حتی زمانی که بارگزاریها باید بین چند ماشین پخش بشن (به جز مانگو که انگار از کلاسترینگ پشتیبانی میکنه، ولی خودم تا بحال باهاش کار نکردم).

پایگاه داده های جدولی و توزیع داده شده

عنوانش یکم عجیبه، راستش تو پیدا کردن یه عنوان مناسب برای این موضوع یکم ذهنم درگیر شد. با این حال Cassandra و BigTable مثالهای خوبی براش هستن. این دیتابیسها شباهت زیادی به دیتابیسهای رابطه ای دارن، با این تفاوت که بعضی از ویژگیها ازشون حذف شده تا بشه بین کلاسترها پخششون کرد. خودم ازشون استفاده نکردم (به جز کازاندرا که در حد یه پروژه تست بود)، برای همین حتما راجع بهشون بخونید!

پایگاه داده های کلیدی

دیگه فکر میکنم وقتی همچین عنوانی مطرح میشه، Redis شدیدا خودش رو نشون میده! این دیتابیسها زمانی خوب جواب میدن که شما دقیقا میدونید به چه چیزی نیاز دارید و باید این مسئله رو درنظر بگیرید که داده ها اینجا به شکل Key Value هستند.

مهمترین عامل مطرح کردن این گروه، قابلیت گسترششون، مقیاس پذیری و همینطور ثباتشون در خوندن اطلاعاته. ردیس ثبات بسیار بالایی داره، اما به نظرم تو پردازش دیتاهای بزرگ کم میاره.

انتخاب دیتابیس تازه قدم اوله

خب باید بگم هنوز بعد از انتخاب دیتابیس، مشکلات زیادی پیش روتون قرار خواهد داشت. پرفورمنس و نگهداریش کاریست بسی دشوار. برای اینکار حتما راجع به سرورها و نحوه نگهداری دیتا‌بیس‌ها تحقیق کنید و سعی کنید همیشه خودتون رو بروز نگه دارید.