Turso libSQL در مقابل Cloudflare D1
انتخاب یک پایگاه داده برای یک Astro monorepo به گردش کار (workflow) شما بستگی دارد.
من اخیراً یک پایگاه داده مشترک برای سه سایت Astro SSG ساختم. دو انتخاب داشتم: Turso (libSQL) یا Cloudflare D1.
من Turso را انتخاب کردم.
در اینجا دلیل اهمیت تفاوتهای کاربردی آورده شده است.
Cloudflare D1 برای Cloudflare Workers ساخته شده است. اگر از Workers برای رندرینگ سمت سرور (server-side rendering) استفاده میکنید، D1 برنده است. این پایگاه داده دقیقاً همانجایی قرار دارد که کد شما اجرا میشود.
تنظیمات من متفاوت است. سایتهای من Astro 5 SSG استاتیک روی Cloudflare Pages هستند. من از Workers استفاده نمیکنم. خط لوله (pipeline) ETL من در GitHub Actions اجرا میشود.
استفاده از D1 از طریق GitHub Actions دشوار است. شما باید از Cloudflare API یا Wrangler CLI استفاده کنید. هیچکدام از اینها یک فایل محلی SQLite برای پرسوجو (query) در طول توسعه در اختیار شما قرار نمیدهند. در نهایت مجبور میشوید برای هر تست، به یک پایگاه داده از راه دور متصل شوید.
Turso این مشکل را با پکیج @libsql/client حل میکند. این پکیج یک URL را میپذیرد. این URL میتواند یک لینک از راه دور یا یک مسیر فایل محلی باشد.
کد من به این شکل است:
در محیط CI، URL یک لینک از راه دور Turso است. روی لپتاپ من، کلاینت یک فایل محلی را باز میکند. پکیج، پرسوجوها و طرحواره (schema) بدون تغییر باقی میمانند.
مسیر کد کاملاً یکسان است.
این به من اجازه میدهد تا:
- اسکریپتهای ETL را به صورت محلی اجرا کنم.
- پایگاه داده را با هر ابزار مشاهدهگر SQLite بررسی کنم.
- مهاجرتها (migrations) را با همان تابعی که در محیط عملیاتی (production) استفاده میشود، اجرا کنم.
من به Docker نیاز ندارم. به پرچمهای (flags) خاصی نیاز ندارم. همان SQL در همه جا کار میکند.
من از یک رویکرد idempotent برای مهاجرتها استفاده میکنم. کد من قبل از ایجاد یک جدول، بررسی میکند که آیا آن جدول وجود دارد یا خیر. این کار باعث میشود اجرای مکرر آن ایمن باشد.
چه زمانی باید D1 را انتخاب کنید؟ اگر از Cloudflare Workers برای جستجو یا مسیرهای API استفاده میکنید، D1 بهتر است. اتصال سریعتر است زیرا در همان مرکز داده (datacenter) باقی میماند.
معماری من کاملاً استاتیک است. از آنجایی که از Workers استفاده نمیکنم، D1 مزیت اصلی خود را از دست میدهد.
موازنههای فعلی (Trade-offs):
- عملکرد نوشتن: ETL من وظایف را یکی پس از دیگری اجرا میکند. من نوشتنهای همزمان با سرعت بالا را آزمایش نکردهام.
- تغییرات طرحواره (Schema): اضافه کردن ستونها آسان است. تغییر نام ستونها نیاز به دقت بیشتری دارد.
- قیمتگذاری: هر دو دارای سطوح رایگان سخاوتمندانهای هستند. برای سه سایت، هزینه من صفر است.
انتخاب پایگاه داده هدف اصلی نبود. قابلیت جایگزینی با فایل محلی (local file fallback) دلیلی بود که Turso را انتخاب کردم. این کار توسعه را ساده میکند.
