امروز میخوام در قالب یه پست خیلی کوتاه، شما رو با یه قابلیت کاربردی MySQL آشنا کنم که شاید یه زمانی وقتی اوضاع زیرساخت شما طوفانی شد به کارتون بیاد.
یک ناو باربری رو وسط دریا تصور کنید که داره غرق میشه. اولین کاری که باید بکنه چیه؟
بله همونطور که خیلی هاتون حدس زدید، اولین کار خالی کردن بار تو دریاست، تا جایی که دیگه ریسکی وجود نداشته باشه.
خب مثال بالا گویا هست. تو Business های IT هم خیلی این شرایط پیش میاد و به ویژه توی کشور ما که از نظر زیرساختی نوپا هستیم و مشکلات زیرساختی جزء جدایی ناپذیری از همهی استارتاپها هستند.
در چنین شرایطی، ما باید هرکاری میتونیم بکنیم که سیستم بالا بمونه و بتونه به کاربران سرویس بده.
به عنوان مثال فرض کنید شما یک فروشگاه آنلاین دارید که علاوه بر بحث های مربوط به خرید کالا و ...، یک سری جدول هم برای آمارگیری در دیتابیس دارید که آمار مختلفی را در آن ذخیره میکنید.
سیستم دچار بحران زیرساختی میشود و فشار روی دیتابیس MySQL شما زیاد میشود.
باید هرچیزی که غیر از عملکرد عادی فروشگاه لازم است رو از کار بندازید تا فشارها روی دیتابیس کمتر بشه و از دسترس خارج نشه.
یکی از اولین کارهایی که به ذهن میرسه خاموش کردن موقت این آمارگیری هاست اما فرض کنید که کد شما monolithic زده شده و اصلاح کردن کد نیازمند ادیتهای بسیاری است که زمان بر هست.
اینجاست که سیاهچاله به کمک شما میاد.
سیاهچاله یا Black Hole که یکی از Engine های جدول های MySQL هست، اینطور رفتار میکنه که هر کوئری Write ای که روش زده بشه میگه OK و کاری انجام نمیده و جدول هم یک جدول خالی هست که دیتایی توش نیست.
در واقع شما باید جدول آماری فعلیتون رو rename کنید به یه اسم دیگه، بعد یه جدول جدید با همون Schema ولی با Engine ای از جنس Black Hole بسازید و اسمش رو بگذارید همون اسم جدول اولی.
با این کار شما فشار رو روی MySQL کمتر کردید بدون اینکه لازم باشه کدتون رو اصلاح کنید.
نکته بسیار مهم: هیچ وقت Engine مربوط به یک جدول رو که حاوی دیتا هست، به Black Hole تغییر ندید چون کل دیتاهاش می پره، برای همین گفتم که جدول اصلی رو Rename کرده و یک جدول جدید با همون اسم سابق و با Engine ای از نوع Black Hole بسازید.