Skip to content
همهٔ تحلیل‌ها
  • SQLite
  • Operations
  • Deployment

SQLite در محیط عملیاتی، از روی عمد

چند سایت واقعی را روی یک فایل SQLite می‌گردانیم و باز هم همین کار را می‌کنیم — اما نه به دلایلی که معمولاً می‌آورند، و نه بدون آن چهار چیزی که تحمل‌پذیرش می‌کند. از جمله همان یکی که ما را گاز گرفت.

انتشار

۳ دقیقه مطالعه

دفاع از SQLite را معمولاً روی کارایی بنا می‌کنند و این کم‌جاذبه‌ترین بخش ماجراست. یک فایل روی SSD محلی سریع است، اما پستگرس روی همان ماشین هم سریع است. دلیل اینکه برای سایت‌های محتوامحور سراغش می‌رویم عملیاتی است: پروسهٔ دومی برای مراقبت وجود ندارد، استخر اتصالی برای اندازه‌گیری نیست، بین برنامه و داده‌اش شبکه‌ای نیست، و پشتیبان‌گیری یعنی یک فایل.

این واقعاً از تعداد چیزهایی که ساعت سه بامداد می‌توانند خراب باشند کم می‌کند و ارزش دارد. مجانی هم نیست.

WAL را روشن کنید و بدانید چه چیزی به شما نمی‌دهد

ثبت پیش‌نویس (WAL) فرق میان «خواننده‌ها نویسنده‌ها را بلوکه می‌کنند» و پایگاه‌داده‌ای است که چند نفر می‌توانند از آن استفاده کنند. یک پراگما است و باید پیش از هر چیز دیگری تنظیم شود. آنچه به شما نمی‌دهد نویسندهٔ هم‌زمان است: هنوز دقیقاً یک نویسنده وجود دارد و دومی صبر می‌کند. برای سایتی که نوشتن‌هایش از یک دفتر پشتی می‌آید این اصلاً مسئله نیست. برای سایتی که نوشتن‌هایش از بازدیدکننده‌هایش می‌آید، تمام طراحی همین است — و اینجا همان‌جایی است که جواب، پستگرس است.

مسیر مطلق، همیشه

این همان است که ما را گاز گرفت و ارزش یک پاراگراف را دارد. نشانی نسبی SQLite نسبت به دایرکتوری کاری پروسه حل می‌شود، و پاسخ SQLite به «آن فایل آنجا نیست» این است که یک فایل خالی بسازد. هیچ خطایی در کار نیست. سایت بالا آمد، رندر شد، برای همه‌چیز کد ۲۰۰ برگرداند و نه تیمی داشت، نه پروژه‌ای و نه محتوایی — چون یک پوستهٔ استقرار، پروسه را از یک دایرکتوری بالاتر اجرا کرده بود.

پایگاه‌دادهٔ خالی بدترین حالت خرابی ممکن است، چون دقیقاً شبیه سامانه‌ای است که کار می‌کند و چیزی در آن نیست. حالا هر مسیری که به SQLite می‌دهیم مطلق است و از یک متغیر محیطی با پیش‌فرض مطلق می‌آید، و برنامه حاضر نیست روی پایگاه‌داده‌ای که طرحواره ندارد بالا بیاید.

پشتیبان را با API بگیرید، نه با cp

کپی‌کردن یک فایل زندهٔ SQLite با cp فایلی به شما می‌دهد که معمولاً سالم است، و این دسته‌ای از پشتیبان است که هیچ‌کس نباید بپذیرد. با روشن بودن WAL، کپی‌ای که وسط نوشتن گرفته شود ممکن است کل WAL را جا بیندازد. از VACUUM INTO یا API پشتیبان‌گیری استفاده کنید که از پایگاه‌دادهٔ زنده تصویری سازگار می‌گیرند، و بعد آن را از ماشین بیرون ببرید. مال ما ساعتی اجرا می‌شود و بازگردانی‌اش ماهانه آزموده می‌شود، چون پشتیبانی که کسی بازش نگردانده باشد یک باور است، نه یک پشتیبان.

جمله‌ای را بدانید که بحث را تمام می‌کند

SQLite همان لحظه‌ای جواب درست نیست که به ماشین دومی نیاز داشته باشید که روی همان داده بنویسد. نه لحظه‌ای که ترافیک زیاد شود — یک فایل روی سخت‌افزار آبرومند، بیشتر از ترافیک خواندنی که بیشتر شرکت‌ها هرگز خواهند داشت را سرویس می‌دهد — بلکه لحظه‌ای که توپولوژی عوض شود. اینکه بتوانید پیش از رسیدن به آن خط، دقیقاً بگویید کجاست، همان چیزی است که این انتخاب را مهندسی می‌کند نه مُد.

چیزی برای ساختن دارید؟

بگویید روی چه کار می‌کنید. صادقانه می‌گوییم که تیم درستی برایش هستیم یا نه.

شروع گفت‌وگو

یا برای ما ایمیل بزنید به hello@larsima.com