افزونهنویسی برای MySQL با VillageSQL
خلاصهٔ کاملتر
VillageSQL یه فورک از MySQLه که یه لایه افزونهپذیری (extensibility) جدی بهش اضافه کرده. با این ابزار میتونی تایپهای دادهای کاملاً سفارشی، توابع جدید، و عملیات مجموعهای رو مستقیم داخل دیتابیس تعریف کنی — بدون اینکه دست به سورس MySQL بزنی. قبلاً این سطح از آزادی فقط تو دیتابیسهایی مثل Neo4j وجود داشت.
نویسنده با VillageSQL یه افزونه برای Roaring Bitmap نوشته. Roaring Bitmap یه ساختار دادهست که برای ذخیره و پردازش سریع مجموعههای بزرگ اعداد صحیح طراحی شده و در کارهایی مثل شمارش کاربران یکتا یا عملیات روی گرافها خیلی کاربرد داره. این افزونه با کمک کتابخانه CRoaring پیادهسازی شده و شامل عملیاتی مثل union، intersection، و symmetric differenceه.
یه نکته مهم اینه که نمیشه از CAST استاندارد SQL برای ساختن این تایپ استفاده کرد؛ باید از متد from_string که خود افزونه تعریف میکنه استفاده بشه:
SELECT ROARING64::from_string('{1,5,10,255,1000}') AS my_bitmap;یه چالش فنی هم سر راه بود: Roaring Bitmap اندازه ثابتی نداره و بسته به دادهها تغییر میکنه. این باعث یه خطای داخلی میشد که تو لاگ سرور قورت داده میشد و نمایش داده نمیشد. راهحل این بود که قبل از برگردوندن نتیجه رشتهای، طول خروجی با out.set_length(...) صریحاً ست بشه.
هر افزونه از یه تایپ و چند تابع تشکیل میشه. تایپ با متدهایی مثل from_string، to_string، compare و hash تعریف میشه، و توابع هر کدوم پارامترها و نوع برگشتی خودشون رو دارن. برای مثال تابع intersection دو bitmap میگیره و اشتراکشون رو برمیگردونه — بخش اصلی کار فقط یه خط result &= right_bitmap;ه و بقیه کد مدیریت خطاست.
نقطه جذاب VillageSQL اینه که افزونهها بدون ریاستارت نصب و حذف میشن — فقط یه INSTALL EXTENSION یا UNINSTALL EXTENSION کافیه. قراره در نسخه کلود VillageSQL هم بشه افزونههای دلخواه اجرا کرد، چیزی که Neo4j در سرویس ابریاش هیچوقت اجازه نداد.
نکات کلیدی:
- VillageSQL یه فورک از MySQLه که افزودن تایپ و تابع سفارشی رو ممکن میکنه
- Roaring Bitmap یه ساختار داده بهینه برای مجموعههای بزرگ اعداد صحیحه که حالا میشه مستقیم داخل MySQL ازش استفاده کرد
- از CAST استاندارد نمیشه برای تایپهای سفارشی استفاده کرد؛ باید از ::from_string بهره برد
- افزونهها بدون ریاستارت سرور نصب/حذف میشن
- قراره در نسخه کلود VillageSQL هم افزونههای کاربر-ساخته پشتیبانی بشن




