SQLite هي قاعدة البيانات الأكثر انتشارًا في العالم — ولا أحد تقريبًا يتحدث عنها

مشاركة:
SQLite هي قاعدة البيانات الأكثر انتشارًا في العالم — ولا أحد تقريبًا يتحدث عنها

قواعد البيانات التي تحظى بالاهتمام هي تلك التي تديرها: مجموعات PostgreSQL، ونسخ MySQL المكررة، وأجزاء MongoDB، والخدمات المدارة سحابيًا من AWS وGoogle. قاعدة البيانات التي توجد في أماكن أكثر من جميع هذه المجتمعة تعمل بصمت في الخلفية، لا تتطلب مسؤولاً، تستهلك أقل من 1 ميجابايت من مساحة القرص لمكتبتها، وهي ملف مصدر C واحد يمكن لأي مطور قراءته في فترة ما بعد الظهر.

SQLite في كل مكان. إنها محرك التخزين داخل كل تطبيق iOS وAndroid يحتاج إلى بيانات منظمة. إنها مدمجة في كل متصفح سطح مكتب — Chrome وFirefox وSafari وEdge جميعها تستخدم SQLite للسجل والعلامات المرجعية والبيانات المخزنة مؤقتًا. إنها قاعدة البيانات التي تشغل برنامج إدارة الرحلات على طائرات إيرباص وبوينغ. توجد داخل أجهزة التلفاز والسيارات وأجهزة التوجيه والأجهزة الطبية. يقدر مشروع SQLite وجود أكثر من تريليون نشر في الاستخدام النشط — رقم كبير جدًا يصعب التحقق منه، ولكن يصعب أيضًا إنكاره نظرًا لعدد طبقات البرامج التي يدعمها.

التصميم الذي يجعله مختلفًا

كل قاعدة بيانات SQL أخرى ربما استخدمتها هي نظام خادم-عميل: تعمل قاعدة البيانات كعملية منفصلة، تتصل بها عبر مأخذ (محلي أو شبكة)، ترسل الاستعلامات، وتستقبل النتائج. SQLite بدون خادم — محرك قاعدة البيانات بالكامل هو مكتبة تعمل داخل عملية التطبيق الخاص بك. لا يوجد خادم لبدء التشغيل، لا يوجد ملف إعدادات لإدارته، لا يوجد نظام أذونات مستخدم، لا يوجد منفذ شبكة لفتحه. تقوم بالربط بالمكتبة، وتحصل على قاعدة بيانات SQL كاملة.

قاعدة البيانات نفسها هي ملف واحد على نظام الملفات. هذا هو أعظم قوتها وقيودها الرئيسية. نقل قاعدة بيانات SQLite هو نسخ ملف. النسخ الاحتياطي هو نسخ ملف. فحصها لا يتطلب أدوات خاصة — SQLite Browser أو واجهة سطر الأوامر sqlite3 سيفتحان أي ملف قاعدة بيانات على أي نظام تشغيل. عندما ينتهي تطبيقك، لا يوجد شيء لإيقاف تشغيله.

القيود هو التزامن: تستخدم SQLite قفلًا على مستوى الملف، مما يعني أن كاتبًا واحدًا فقط يمكنه تعديل قاعدة البيانات في وقت واحد. القراء المتزامنون المتعددون لا مشكلة؛ الكتاب المتزامنون المتعددون يتم تسلسلهم. بالنسبة للتطبيقات ذات التزامن الكتابي العالي — خوادم الويب ذات الحركة المرورية العالية التي تتعامل مع الطلبات المتزامنة — هذا القيد مهم. بالنسبة للغالبية العظمى من التطبيقات، بما في ذلك معظم تطبيقات الهاتف المحمول وأدوات سطح المكتب وخدمات الويب ذات الحركة المرورية المعتدلة، لا يهم.

لماذا SQLite موثوقة بدرجة كافية للطيران

كود SQLite هو واحد من أكثر قطع البرامج اختبارًا على الإطلاق. يحتفظ المشروع بحوالي 600 مرة من كود الاختبار مقارنة بكود الإنتاج — المكتبة نفسها حوالي 150,000 سطر من C؛ مجموعة الاختبار حوالي 90 مليون سطر، بما في ذلك مدقق SQL كامل، وTH3 (أداة اختبار تجارية لاختبار صارم ضد الحالات الحدودية)، واختبارات استرداد تالفة شاملة.

معيار الموثوقية غير معتاد للبرامج مفتوحة المصدر. صمم D. Richard Hipp، مبتكر SQLite، صراحةً لتكون مناسبة لأنظمة الطيران الحرجة للسلامة، وقد صادقت عليها إيرباص وغيرها وفقًا لذلك. توفر قاعدة البيانات ضمانات ACID — الذرية والاتساق والعزل والمتانة — من خلال نظام سجل الكتابة المسبقة (WAL). أي تعطل في منتصف المعاملة يترك قاعدة البيانات في حالة جيدة معروفة؛ يضمن WAL إما تنفيذ المعاملة بالكامل أو لا شيء منها، حتى عبر انقطاع الطاقة غير المتوقع.

أداء القاع المدهش

تعني معمارية SQLite الخالية من الخادم أنها تتجنب النفقات العامة التي تتكبدها قواعد البيانات خادم-عميل: لا تسلسل للبيانات لإرسالها عبر مأخذ، لا تبديل سياق بين عمليات العميل والخادم، لا تخطيط استعلام عبر حدود الشبكة. بالنسبة لأحمال العمل حيث تكون الاستعلامات بسيطة وقاعدة البيانات صغيرة إلى متوسطة الحجم، غالبًا ما يكون أداء SQLite مشابهًا لـ PostgreSQL وأحيانًا أسرع.

أجرى فريق SQLite اختبارات أداء في عام 2022 أظهرت أنه بالنسبة لعبء عمل كثيف القراءة (35 قراءة لكل كتابة)، عالجت SQLite على SSD NVMe عادي 48,000 معاملة في الثانية مقارنة بـ 7,000 معاملة في الثانية لـ PostgreSQL — ويرجع ذلك إلى حد كبير لأن معمارية SQLite داخل العملية تزيل النفقات العامة للاتصال بين العمليات. بالنسبة لأحمال العمل كثيفة الكتابة، الصورة أكثر تعقيدًا؛ التعامل المتزامن للكتابة من PostgreSQL يعطيها مزايا في سيناريوهات التنافس العالي.

النتيجة العملية: العديد من التطبيقات التي تفترض استخدام PostgreSQL لأنها "من الدرجة الإنتاجية" ستعمل بشكل جيد وتكون أبسط تشغيليًا مع SQLite. خدمة Cloudflare D1 SQLite الموزعة وTurso's libSQL (فرع من SQLite مع دعم النسخ المتماثل) يبنيان بنية تحتية حول الرهان على أن بساطة SQLite تم تقديرها بأقل من قيمتها في تطبيقات جانب الخادم.

SQLite الحديثة: ليست نسخة 2005

تطورت SQLite بشكل كبير. دعم JSON الذي أضيف في 2015 وتم توسيعه حتى 2022 يسمح بالاستعلام وفهرسة بيانات JSON المتداخلة بدلالات SQL كاملة — تنافس قواعد البيانات الوثائقية في العديد من حالات الاستخدام. توفر إضافة Full-Text Search 5 (FTS5) بحثًا نصيًا كاملاً مصنفًا بـ BM25 مع استعلامات البادئة، دون الحاجة إلى فهرس بحث منفصل. تتعامل إضافة R*Tree مع استعلامات النطاق الجغرافي المكاني. تسمح الجداول الافتراضية لـ SQLite باستعلام مصادر بيانات خارجية (ملفات CSV، واجهات برمجة التطبيقات البعيدة) باستخدام SQL syntax.

أحدث إضافة هي إضافة بحث التشابه المتجه — sqlite-vss، المبنية على مكتبة FAISS من Facebook — والتي تضيف بحث الجار الأقرب التقريبي إلى SQLite. هذا يعني أن ملف SQLite واحد يمكنه تخزين المستندات وتضميناتها المتجهة وإجراء بحث التشابه الدلالي، مما يجعله قاعدة بيانات RAG مدمجة قابلة للتطبيق لتطبيقات الذكاء الاصطناعي المحلية. مجموعة الاستعلامات المنظمة، والبحث النصي الكامل، والبحث المتجه في قاعدة بيانات واحدة بدون إعدادات مقنعة للتطبيقات التي كانت تتطلب سابقًا ثلاثة أنظمة منفصلة.

متى لا تستخدم SQLite

الإجابة الصادقة على "هل يجب أن أستخدم SQLite؟" تتطلب الاعتراف بقيودها الحقيقية. أحمال العمل الكتابية عالية التزامن — فكر في تطبيق ويب يتعامل مع آلاف المعاملات المتزامنة — تحتاج إلى تزامن متعدد الكتاب الذي توفره PostgreSQL. مجموعات البيانات الأكبر بكثير من ذاكرة الوصول العشوائي المتاحة تستفيد من إدارة تجمّع المخزن المؤقت ومخطط الاستعلام في PostgreSQL، والذي تم تحسينه لسيناريوهات البيانات الكبيرة. التطبيقات التي تتطلب تحكمًا دقيقًا في الوصول (أمان على مستوى الصف، أذونات على مستوى العمود) تحتاج إلى قاعدة بيانات قائمة على الخادم.

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

مشاركة:
SQLite هي قاعدة البيانات الأكثر انتشارًا في العالم — ولا أحد تقريبًا يتحدث عنها | IRCNF - Intelligent Reliable Custom Next-gen Frameworks