قواعد البيانات

حيث تتحدد سرعة الموقع أو بطؤه: قاعدة بياناته.

نثبّت قاعدة البيانات التي يقوم عليها تطبيقك ونضبطها ونُعِدّ لها نسخًا متماثلة ونحفظ نسخها الاحتياطية، ونثبت صلاحية النسخ الاحتياطية باستعادتها فعلًا.

سبعة محركات في مخطط واحد

كل مربع قاعدة بيانات نثبّتها ونضبطها ونحفظ نسخها الاحتياطية. والخطوط تبيّن كيف تعمل معًا في الأنظمة التي نشغّلها — فمعظم التطبيقات تحتاج إلى اثنتين أو ثلاث منها، لا إلى واحدة.

SQLiteمُضمَّنة
الاستخدام
تطبيقات وأدوات بملف بيانات واحد وكاتب واحد في كل مرة
نضبط
journal_mode=WAL
النسخ الاحتياطي
نسخة حيّة من الملف، لا نسخًا مباشرًا لملف قيد الاستخدام
MySQLعلائقية
الاستخدام
المتاجر وWordPress ومعظم تطبيقات PHP
نضبط
innodb_buffer_pool_size
النسخ الاحتياطي
نسخ احتياطية كاملة مع السجلات الثنائية، إلى أي لحظة
لماذا نعتمد MySQL
Redisفي الذاكرة
الاستخدام
الذاكرة المؤقتة والجلسات والطوابير والعدّادات
نضبط
maxmemory-policy
النسخ الاحتياطي
لقطات وملف إلحاق
PostgreSQLعلائقية
الاستخدام
المحاسبة وERP والتقارير والاستعلامات المعقدة
نضبط
shared_buffers · work_mem
النسخ الاحتياطي
نسخ احتياطية أساسية مع سجل WAL المؤرشف، إلى أي لحظة
MariaDBعلائقية
الاستخدام
العمل نفسه الذي يؤديه MySQL، وعناقيد Galera
نضبط
innodb_buffer_pool_size
النسخ الاحتياطي
mariabackup مع السجلات الثنائية، إلى أي لحظة
MongoDBمستندات
الاستخدام
سجلات يتغير شكلها باستمرار: أحداث، وكتالوجات، ومحتوى
نضبط
wiredTiger cacheSizeGB
النسخ الاحتياطي
مجموعة نسخ متماثلة، مع سجل oplog للاستعادة إلى لحظة محددة
  1. حين يتجاوز التطبيق حدود ملف واحد، ينتقل إلى خادم قاعدة بيانات.
  2. بدأت MariaDB تفرّعًا من MySQL؛ ومعظم التطبيقات تنتقل بينهما دون تعديل.
  3. يقف Redis في المقدمة: تبقى الإجابات المتكررة والجلسات في الذاكرة.
  4. الذاكرة المؤقتة نفسها أمام تطبيقات PostgreSQL.
  5. يُغذّى فهرس البحث من قاعدة البيانات الرئيسية، ولا يحدث العكس أبدًا.
  6. يغطي JSONB في PostgreSQL كثيرًا من مهام المستندات قبل الحاجة إلى MongoDB.

أي قاعدة بيانات لأي مهمة

التطبيق هو الذي يحدد في الغالب، ونحن نتبعه. وحيث يكون الخيار مفتوحًا، فهكذا نختار.

المهمة ما نختاره يصلح أيضًا السبب
متجر، أو موقع WordPress، أو تطبيق PHP MySQL · MariaDB PostgreSQL ما بُني عليه التطبيق واختُبر، مع أوسع دعم.
المحاسبة وERP والتقارير ذات عمليات الربط الكثيفة PostgreSQL MySQL 8 معاملات صارمة، ودوال النوافذ، ومخطِّط استعلامات مصمَّم للاستعلامات المعقدة.
الذاكرة المؤقتة والجلسات والطوابير وحدود المعدّل Redis Memcached إجابات من الذاكرة. احفظ فيها ما يمكن إعادة بنائه إن فُقد.
البحث في المنتجات أو المقالات OpenSearch · Elasticsearch MySQL · PostgreSQL full-text ترتيب حسب الصلة، وتسامح مع الأخطاء الإملائية، وتصفية وأوجه تصنيف لا يقدّمها استعلام LIKE. أما للكتالوج الصغير فيكفي البحث النصي الكامل المدمج في قاعدة البيانات.
تطبيق جوال، أو أداة سطح مكتب، أو خدمة داخلية صغيرة SQLite —لا بديل لا خادم يحتاج إلى تشغيل: ملف واحد، يُنسخ احتياطيًا بنسخه بطريقة آمنة.
أحداث أو سجلات أو بيانات يتغير شكلها باستمرار MongoDB PostgreSQL JSONB مستندات مرنة؛ وPostgreSQL حين تحتاج أيضًا إلى عمليات الربط والمعاملات.
قراءات تتجاوز طاقة خادم واحد MySQL · MariaDB · PostgreSQL replicas —لا بديل تتوزع القراءات على النسخ المتماثلة، بينما تبقى الكتابة على خادم رئيسي واحد.

استعلام بطيء واحد، اكتُشف وأُصلح

معظم الصفحات البطيئة سببها استعلام واحد. يسمّيه سجل الاستعلامات البطيئة، ويبيّن EXPLAIN سبب بطئه، وكثيرًا ما يكون فهرس واحد هو الإصلاح كله.

SELECT id, total, created_at
FROM orders
WHERE customer_id = 4821
ORDER BY created_at DESC
LIMIT 20;
استعلام توضيحي على جدول توضيحي

قبل

type
ALL
key
NULL
Extra
Using where; Using filesort

يقرأ كل صفوف الجدول، ثم يرتّب ما وجده.

الإصلاح: فهرس واحد

ALTER TABLE orders
  ADD INDEX idx_customer_created (customer_id, created_at);

بعد

type
ref
key
idx_customer_created
Extra
Backward index scan

يقرأ صفوف هذا العميل وحدها، مرتّبة سلفًا.

النسخة الاحتياطية لا تُحتسب إلا بعد استعادتها

النسخة الليلية وحدها تُضيّع يومًا كاملًا. أما مع الاحتفاظ بسجل التغييرات أيضًا، فنستطيع إعادة قاعدة البيانات إلى الثانية التي سبقت الخطأ.

نسخة احتياطية كاملة ليلية00:00 الاستعادة حتى هنا14:31:59 أمر DELETE دون WHERE14:32:00
كل تغيير يُكتب في السجل لحظة حدوثه يُعاد تطبيقه على النسخة الاحتياطية
يوم على سبيل المثال. الأوقات غير حقيقية.
  1. استعادة آخر نسخة احتياطية كاملة

    على خادم منفصل، لتبقى قاعدة البيانات العاملة كما هي أثناء عملنا.

  2. إعادة تطبيق السجل حتى اللحظة السابقة

    السجلات الثنائية لـ MySQL وMariaDB، وسجل WAL المؤرشف لـ PostgreSQL، وسجل oplog لـ MongoDB.

  3. التحقق منها، ثم إعادة البيانات

    إما أن تُنسخ الصفوف المفقودة إلى مكانها، وإما أن تحل النسخة المستعادة محل الأصلية — والقرار لك، والفرق بين يديك.

الاستعادة إلى لحظة محددة تتوقف على المحرك:

  • MySQL · MariaDB · PostgreSQL · MongoDBإلى أي ثانية يغطيها السجل
  • Redisإلى آخر عملية كتابة يحفظها ملف الإلحاق
  • SQLiteإلى آخر نسخة من الملف
  • OpenSearch · Elasticsearchإلى آخر لقطة، ثم يُعاد البناء من المصدر

اختبارات الاستعادة جزء من الرعاية التي نتفق عليها معك: على خادم منفصل، وفق جدول محدد، مع تدوين كل نتيجة. فالنسخة الاحتياطية التي لم يستعدها أحد أملٌ، لا نسخة احتياطية.

بقية العمل

ما تحتاجه قاعدة البيانات من يوم تثبيتها حتى يوم ترقيتها، والإعدادات التي تمسها كل خطوة.

  • التثبيت وتحديد الموارد

    الإصدار الذي يدعمه تطبيقك، من المستودع الرسمي للجهة المطوِّرة. وتُقسَّم الذاكرة بين قاعدة البيانات والتطبيق والنظام قبل ضبط أي شيء آخر.

    innodb_buffer_pool_size · shared_buffers · maxmemory · -Xmx
  • الفهارس والاستعلامات البطيئة

    يُقرأ سجل الاستعلامات البطيئة، وتُحلَّل أسوأ الاستعلامات، وتُضاف الفهارس أو تُحذف مع تدوين السبب.

    slow_query_log · pg_stat_statements · EXPLAIN ANALYZE
  • النسخ المتماثل

    نسخة ثانية تتبع الأولى، لتوزيع عمليات القراءة ولتتولى العمل حين يتعطل الخادم الرئيسي.

    GTID · Galera · streaming replication · replica set
  • الأمان

    الاستماع على الشبكة الخاصة فقط، ومستخدم واحد لكل تطبيق بالصلاحيات التي يحتاجها وحدها، واتصالات مشفّرة أينما خرجت البيانات من الخادم.

    bind-address · TLS · GRANT · SCRAM · ACL
  • المراقبة

    الاتصالات، وتأخر النسخ المتماثل، ومساحة القرص، والاستعلامات البطيئة، مع تنبيه قبل بلوغ الحد لا بعده.

    max_connections · Seconds_Behind_Source · pg_stat_replication
  • الترقيات

    تُجرَّب أولًا على نسخة، والنسخ المتماثلة قبل الخادم الرئيسي، وطريق التراجع مكتوب قبل أن نبدأ.

    pg_upgrade · mariadb-upgrade · rolling restart

أخبرنا بما تفعله قاعدة بياناتك

أي محرك، وما حجمها، وأين تعمل، وما الذي يقلقك بشأنها. نفحصها أولًا، ثم نسعّر الإعداد أو الرعاية بعد محادثة واحدة.