چیزی که ردیس هست و ردیس نیست

پیشنهادی برای یک کش اما روی هارد با پروتکل ردیس

از آنجا که ردیس دیگر یک نرم‌افزار آزاد نیست و البته همان موقع هم که بود چندان چیز جالبی نبود (دو نقطه دی) قصد دارم پیشنهاد یک نرم‌افزار آزاد بدهم که ردیس هست اما ردیس نیست! :))

با موفقیت پروژه‌هایی مثل solidcache در روبی، به این فکر افتادم که چرا جای رم از هارد استفاده نکنیم؟ مخصوصا که solidcache دارد پشتش از یک پایگاه داده‌ای مرسوم (در حال حاضر یکی از سه مورد sqlite یا mysql یا postgres را) استفاده می‌کند و همین موضوع ایده یک کش مبتنی بر هارد - و به طور خاص‌تر SSD - را به ذهنم رساند که مسائل مصرف حافظه و برپاسازی ردیس را نداشته باشد و در عین حال سرعت و بازدهی نزدیک به ردیس هم بدهد.

در سطح پروتکل که همان پروتکل ردیس را پشتیبانی کند. اما برای خود کش، به جای یک پایگاه داده‌ای بیرونی از یک پیاده‌سازی بهینه B+-tree و Hash tree استفاده شود. البته می‌شود از همان sqlite و solidcache هم استفاده کرد و صرفا پروتکل ردیس را روی آن آورد. این شکلی هزینه نهایی پیاده‌سازی کم‌تر هم می‌شود. اما احتمالا برای پروژه‌های بزرگ - به علت محدودیت‌های خود sqlite - کارا نباشد.

با این حال در صورتی که از یک hash tree دو مرحله‌ای به عنوان کلید و یک B+tree به عنوان اندیس استلفاده شود احتمالا بازدهی معقول‌تری از استفاده از یک پایگاه‌داده‌ای مجزا بگیریم زیرا سربار شبکه و سربار خود پایگاه داده‌ای هم حذف شده و فقط همان قسمتی که مورد استفاده است پیاده‌سازی شده است.

اما ممکن است بپرسید این B+tree چیست؟ آن را سعی می‌کنم در مطلبی دیگر مفصل‌تر توضیح دهم. عجالتا بدانیم که یک ساختمان داده‌ای بهینه‌شده برای دسترسی و جست و جوی داده روی انواع دیسک‌های سخت است کفایت می‌کند. یک hash tree اما در واقع نوعی از interval tree است که کلید‌های آن به جای بازه‌های عددی مقادیر hash هستند. این شکلی پیدا کردن یک کلید در کش مساوی است با هش کردن آن، پیدا کردن جایگاه آن در hash tree و سپس درخواست داده متناظر با آن کلید در B+tree. این شکلی پیاده‌سازی به شدت ساده و به شدت بهینه می‌شود.

پیشنهاد دیگر البته آن است که این چیزی که در بالا توضیح دادم در خود solidcache پیاده‌سازی شود و سپس پروتکل ردیس هم به آن اضافه گردد. این شکلی هم پروژه بالادستی سود می‌برد که بسیاری دارند از آن استفاده می‌کنند و هم ما یک جایگزین آزاد و البته بسیار بهینه برای ردیس داریم که از پارادایم ردیس خارج شده و با هزینه‌های اجرایی و عملیاتی کم‌تر همان کارایی را به ما خواهد داد.

عکس مطلب نماگرفتی از readme پروژه solidcache است. همچنین این مطلب اولین بار برای ارائه در دونا نوشته شده است.