اگه میخواستی خودت یه دیتابیس بسازی، چطور میساختی؟
خلاصهٔ کاملتر
این مقالهی آموزشی یه سؤال جالب میپرسه: اگه دیتابیسها وجود نداشتن و میخواستی از صفر یکی بسازی، چطور پیش میرفتی؟ نویسنده قدمبهقدم یه دیتابیس کلید-مقدار (key-value) میسازه؛ چیزی که کموبیش مثل آبجکتهای جاوااسکریپته: یه مقدار را با یه کلید ذخیره میکنی و بعد با همون کلید برش میداری.
مسئلهای که دیتابیسها حل میکنن اینه: چطور داده را پایدار (persistent) ذخیره و بعد کارآمد پیداش کنیم؟ سادهترین راه ذخیرهی پایدار، استفاده از یه فایل است. هر بار که دادهای داری، جفت کلید-مقدار رو به فایل اضافه میکنی و برای پیداکردن یه کلید، روی جفتها پیمایش میکنی تا کلید مطابق رو پیدا کنی.
اما اینجا یه مشکل بزرگ هست. وقتی یه رکورد رو بهروزرسانی یا حذف درجا (in-place) میکنی، در واقع داری همهی دادههایی رو که بعد از اون رکورد اومدن جابهجا میکنی. مثلاً اگه مقدار یه رکورد رو با یه رشتهی بلندتر عوض کنی، باید همهی رکوردهای بعدی رو چند بایت جابهجا کنی؛ چون از نگاه کامپیوتر، فایل چیزی نیست جز یه دنبالهی طولانی از بایتها. این کار با بزرگشدن داده خیلی پرهزینه میشه.
راهحل، رفتن به سمت معماری فقط-افزودنی (append-only) است؛ یعنی بهجای تغییر درجا، همیشه نسخهی جدید رو به انتهای فایل اضافه میکنی. این ایده پایهی موتورهای ذخیرهسازی log-structured در دیتابیسهای واقعیه. نویسنده تأکید میکنه این مقاله عمدتاً بر پایهی فصل ۳ کتاب معروف Designing Data-Intensive Applications نوشتهی Martin Kleppmann ساخته شده؛ کتابی که اون رو یکی از بهترین کتابهای علوم کامپیوتری میدونه که خونده.
نکات کلیدی:
- یه دیتابیس کلید-مقدار از صفر، با ذخیرهی جفتهای کلید-مقدار در یه فایل ساده شروع میشه
- مشکل اصلی: بهروزرسانی و حذف درجا نیازمند جابهجایی همهی دادههای بعدیه و کند است
- راهحل، معماری فقط-افزودنی (append-only) است که پایهی موتورهای log-structured است
- مقاله بر پایهی فصل ۳ کتاب Designing Data-Intensive Applications نوشته شده




