العودة
ما تعلمته جوليا إيفانز عن تشغيل SQLite خلف موقع Django
SiTech AI Team2 წთ. საკითხავი

ما تعلمته جوليا إيفانز عن تشغيل SQLite خلف موقع Django

تروي كيف اختصر ANALYZE استعلام بحث استغرق خمس ثوانٍ، وكيف يؤدي تنظيف الصفوف إلى إسقاط عمليات الخدمة، وكيف تُنظَّم النسخ الاحتياطية عبر restic وLitestream في مشروعها الرابع على SQLite.

نشرت جوليا إيفانز ملاحظات عن تشغيل SQLite خلف موقع مبني على Django، وهو مشروعها الرابع على الويب الذي يستخدم قاعدة البيانات المدمجة. وتقول إن النصيحة باستخدام SQLite في الإنتاج لموقع صغير صحيحة، لكن التجربة أبرزت أمرًا تتجاوزه المقالات عادة: SQLite يبقى قاعدة بيانات، وقواعد البيانات معقدة، وتشغيلها مهارة قائمة بذاتها.

ANALYZE واستعلام استغرق خمس ثوانٍ

كانت المفاجأة الأولى استعلام بحث نصي كامل عبر إضافة FTS5 في جدول من 4000 صف استغرق خمس ثوانٍ. تشغيل ANALYZE قلّص المدة فورًا إلى نحو 0.05 ثانية. يجمع ANALYZE إحصاءات يستخدمها مخطط الاستعلامات لاختيار خطة أفضل؛ وتقول إيفانز إنها لا تعرف بعد ما كان خطأً تحديدًا في الخطة الأولى، وترجّح تعقيدًا تربيعيًا غير مقصود. وهي تستخدم SQLite في مشاريع الويب منذ 2022، ولم تعرف بوجود ANALYZE إلا الآن.

تنظيف الصفوف أصعب مما يبدو

حذف الصفوف غير المرغوبة — مثل المهام المكتملة التي يتركها django-tasks-db — سبّب مشكلات أكثر من مرة. فعندما يستمر أمر التنظيف أكثر من خمس ثوانٍ، يحاول عامل آخر الكتابة إلى القاعدة، فيتجاوز المهلة المضبوطة عند خمس ثوانٍ، وينهار ويسقط معه الجهاز الافتراضي. والحل حتى الآن هو التنظيف على دفعات صغيرة كي لا يتجاوز أي استعلام المهلة. وتقول إيفانز إن الحادثة زادت فهمها لسبب رغبة البعض في قاعدة مثل Postgres تسمح بعدة كُتّاب في الوقت نفسه، وقد تخصص مستقبلًا نافذة صيانة مخططة لهذه العمليات.

النسخ الاحتياطية: restic وLitestream

يُخرج الروتين الحالي القاعدة عبر VACUUM INTO ويضغطها ويرسلها إلى S3 باستخدام restic، مع تحرير قفل المستودع أولًا لأن نسخة قُتلت قد تترك قفلًا، ثم تنظيف اللقطات القديمة. وبدأت مؤخرًا تجربة Litestream للنسخ التزايدي بنافذة احتفاظ تبلغ 400 ساعة، ويعود ذلك جزئيًا إلى أن عمليات restic كانت تُقتل أحيانًا لنقص الذاكرة. تُراقَب النسخ بنظام يستجيب لانقطاع الإشارة، لكن إيفانز تعترف بأنها لم تختبر الاستعادة يومًا.

أما الأداء فإيفانز هادئة عن قصد: تكتب الاستعلامات عبر ORM في Django دون متابعة الخطط البطيئة، والقاعدة تحوي نحو 10,000 صف وتتوقع أن تبقى صغيرة. وعندما لا تحتاج الجداول إلى الجوار تقسمها على عدة ملفات، وهو نهج استخدمته أيضًا في Mess with DNS الذي يعمل على SQLite منذ أربع سنوات، أي منذ 2022.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.