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

اختيار قاعدة البيانات المناسبة

18 دقيقة الدرس 9 من 10

اختيار قاعدة البيانات المناسبة

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

الخطوة الأولى — افهم نموذج بياناتك

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

  • بيانات علائقية قوية تحتاج إلى ربط معقد — حسابات المستخدمين، الطلبات، المخزون، المعاملات المالية. كل كيان يشير إلى آخر عبر مفاتيح خارجية. استخدم قاعدة بيانات علائقية (SQL): PostgreSQL أو MySQL.
  • بيانات هرمية أو مستندات شبه منظمة — كتالوجات المنتجات، محتوى نظام إدارة المحتوى، ملفات تعريف المستخدمين بحقول متغيرة. استخدم قاعدة بيانات المستندات: MongoDB، Couchbase.
  • استعلامات مبنية على المفاتيح دون تعقيد — تخزين الجلسات، أعلام الميزات، عدادات تحديد المعدل، لوحات الصدارة. استخدم قاعدة بيانات القيمة-المفتاح: Redis، DynamoDB.
  • قياسات مرتبة زمنياً — مقاييس الأداء، قراءات أجهزة الاستشعار، سجلات التطبيقات. استخدم قاعدة بيانات السلاسل الزمنية: InfluxDB، TimescaleDB، Prometheus.
  • علاقات متشعبة ومعمّقة — الرسوم البيانية الاجتماعية، محركات التوصيات، كشف الاحتيال. استخدم قاعدة بيانات الرسوم البيانية: Neo4j، Amazon Neptune.
  • استعلامات تحليلية على بيانات تاريخية ضخمة — التقارير، ذكاء الأعمال، مستودعات البيانات. استخدم مخزن عمودي (OLAP): Redshift، BigQuery، Snowflake، ClickHouse.
قاعدة عملية: إذا وجدت نفسك تكتب عمليات ربط ثلاثية الاتجاه داخل تجميعات MongoDB، أو تخزّن كائنات JSON داخل أعمدة PostgreSQL تجنباً لتغيير المخطط، فهذا يعني أن نموذج بياناتك ونوع قاعدة البيانات غير متوافقَين.

الخطوة الثانية — حدّد أنماط الوصول إلى بياناتك

شكل البيانات يحدد العائلة؛ أنماط الوصول تضيّق الاختيار داخل تلك العائلة. اسأل:

  • القراءة أم الكتابة هي المهيمنة؟ خلاصة أخبار وسائل التواصل الاجتماعي ثقيلة القراءة (1,000 قراءة لكل كتابة). خط أنابيب إنترنت الأشياء ثقيل الكتابة (100 كتابة لكل قراءة). PostgreSQL وCassandra وDynamoDB تتعامل مع كل اتجاه باختلاف جوهري.
  • ما متطلب الكمون؟ عمليات البحث دون الميلي ثانية (سلة التسوق، الجلسة) تحتاج مخزناً في الذاكرة مثل Redis. تقرير مالي يُشغَّل مرة يومياً يتحمل ثوانٍ على Redshift.
  • ما الاستعلامات التي تحتاجها؟ البحث في النصوص، الاستعلامات الجغرافية المكانية، اجتياز الرسوم البيانية — إذا كان نمط استعلامك استثنائياً، اختر قاعدة بيانات تعامله مكوّناً أساسياً لا إضافةً لاحقة.
  • ما معدل القراءة/الكتابة وعدد الطلبات في الثانية؟ نسخة قراءة صغيرة على PostgreSQL تتعامل مع 10,000 طلب قراءة في الثانية. Cassandra مصمم لاستيعاب أكثر من 100,000 طلب كتابة في الثانية عبر الكتلة. اختيار PostgreSQL للعبء الثاني سيجدي — حتى لا يجدي.
Database selection decision tree What is your data shape? (Pick primary pattern) Relational Document Key-Value Time-series / Graph SQL DB PostgreSQL / MySQL Document Store MongoDB / Couchbase Key-Value Redis / DynamoDB Graph / Time-Series Neo4j / InfluxDB ACID needed? Yes → Keep SQL Strong consistency Flex schema? Yes → Document Evolving fields Sub-ms latency? Yes → Cache KV Redis in-memory Traversal heavy? Yes → Graph DB Neo4j / Neptune Most systems use multiple databases — one per workload type. Polyglot persistence is the norm at scale.
شجرة قرار اختيار قاعدة البيانات: من شكل البيانات إلى نمط الوصول إلى اختيار التقنية المناسبة.

الخطوة الثالثة — حدّد متطلبات الاتساق والتوفرية

تنص نظرية CAP على أن النظام الموزع لا يمكنه ضمان أكثر من اثنتين من ثلاث خصائص: الاتساق (Consistency)، والتوفرية (Availability)، وتحمّل الانقسام (Partition Tolerance). من الناحية العملية، تحدث انقسامات الشبكة لا محالة، لذا المقايضة الحقيقية هي CP مقابل AP:

  • أنظمة CP تضحّي بالتوفرية أثناء الانقسام لضمان أن كل قراءة تعيد أحدث كتابة. استخدمها للمعاملات المالية، إدارة المخزون، وأي حالة يسبب فيها البيانات القديمة ضرراً حقيقياً. أمثلة: PostgreSQL، CockroachDB، Spanner.
  • أنظمة AP تبقى متاحةً أثناء الانقسام وتوفر اتساقاً في نهاية المطاف. استخدمها للجداول الزمنية، سلات التسوق، عدادات المشاهدات — الأماكن التي يكون فيها تأخر البيانات قليلاً مقبولاً. أمثلة: Cassandra، DynamoDB، CouchDB.
مثال ملموس: تحويل بنكي يجب أن يكون CP — لا يمكنك إظهار 500 دولار لأليس على نسخة واحدة وصفر على أخرى. عداد الإعجابات على تويتر يمكن أن يكون AP — إظهار 10,241 إعجاباً والعدد الحقيقي 10,243 لا يكلّف شيئاً.

الخطوة الرابعة — تقدير الحجم والسرعة

الأرقام الخام تقود القرار أكثر من أي مبدأ نظري. استخدم حسابات التقريب:

  • أقل من 10 تيرابايت، أقل من 10,000 طلب في الثانية — PostgreSQL أساسي واحد مضبوط جيداً مع نسخ القراءة يتعامل مع أي تطبيق ويب تقريباً. لا تضف تعقيداً لا تحتاجه.
  • 10,000 إلى 100,000 طلب كتابة في الثانية، مع قبول الاتساق التدريجي — Cassandra أو DynamoDB. كلاهما مصمم لهذا النطاق وينقسم أفقياً بحمل تشغيلي محدود.
  • أكثر من 100 تيرابايت من البيانات التحليلية مع تجميعات معقدة — مستودع OLAP عمودي: Snowflake أو BigQuery أو Redshift. قواعد البيانات الصفية كـ PostgreSQL تؤدي أداءً أسوأ بأوامر كبيرة عند المسح الكامل للجداول.
  • كمون قراءة دون الميلي ثانية بأي حجم — Redis (في الذاكرة). قواعد البيانات القائمة على الأقراص، حتى SSDs، لا تستطيع منافسته على الكمون للبيانات الساخنة.

الخطوة الخامسة — ضع الواقع التشغيلي في الحسبان

أفضل قاعدة بيانات تناسب نموذج بياناتك لا قيمة لها إذا لم يستطع فريقك تشغيلها. اسأل:

  • خبرة الفريق — فريق من خبراء SQL سيُسلّم أسرع على PostgreSQL من Cassandra حتى لو كانت Cassandra أفضل تقنياً. الخبرة تتراكم مع الوقت.
  • خدمة مُدارة مقابل استضافة ذاتية — AWS RDS وGoogle Cloud SQL وPlanetScale وSupabase تُزيل معظم العبء التشغيلي. DynamoDB وCosmos DB وFirestore خيارات NoSQL مُدارة بالكامل. استضافة Cassandra أو Elasticsearch ذاتياً تتطلب مهندسين بنية تحتية متخصصين.
  • النظام البيئي والأدوات — PostgreSQL لديه عقود من الأدوات: pgAdmin، pg_dump، نسخ منطقي، امتدادات (PostGIS للجغرافيا، pgvector للبحث المتجهي). MongoDB لديه نظام بيئي ناضج للمشغلات. قواعد البيانات المتخصصة قد تفتقر إلى دعم ORM أو أدوات الترحيل.
  • التكلفة — DynamoDB تتقاضى رسوماً لكل وحدة سعة للقراءة/الكتابة. BigQuery تتقاضى رسوماً لكل بايت يُفحص. PostgreSQL على RDS يُحسب بالساعة لكل نموذج. افحص تكلفة حجم العمل المتوقع على كل نموذج تسعير قبل الالتزام.
Polyglot persistence architecture for a large e-commerce platform Application Services (Order / User / Search) PostgreSQL Orders, Payments MongoDB Product Catalog Redis Sessions, Cart Cache Elasticsearch Full-text Search Redshift Analytics / BI ACID, CP Flex schema Sub-ms reads Full-text, facets Columnar OLAP Amazon, Shopify, and Alibaba all use polyglot persistence.
التخزين متعدد الأنواع: منصة تجارة إلكترونية واحدة تستخدم خمس قواعد بيانات مختلفة، كل منها متطابقة مع حجم عمل محدد.

نمط التخزين متعدد الأنواع (Polyglot Persistence)

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

تكلفة التخزين متعدد الأنواع هي التعقيد التشغيلي: مزيد من الأنظمة للمراقبة، مزيد من أوضاع الفشل، ومزيد من مزامنة البيانات للإدارة. لهذا السبب تبدأ الشركات الناشئة في الغالب بنموذج PostgreSQL واحد — التخزين المبكر متعدد الأنواع ضار بقدر ضرر التحسين المبكر.

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

قائمة تحقق القرار العملية

  1. ارسم نموذج بياناتك — حدّد الكيانات وعلاقاتها.
  2. اسرد أهم 3 أنماط استعلام متكررة لديك.
  3. قدّر ذروة الطلبات في الثانية، وحجم البيانات، والكمون المقبول (p99).
  4. حدّد متطلبات الاتساق — CP أم AP؟
  5. اسأل ما الذي يعرف فريقك بالفعل كيفية تشغيله.
  6. فكّر فيما إذا كانت خدمة سحابية مُدارة تُزيل العبء التشغيلي.
  7. نمذج التكلفة على الحجم المتوقع قبل الالتزام.
في مقابلات تصميم الأنظمة: يتوقع المحاورون أن تبرر اختيارك لقاعدة البيانات. "سأستخدم PostgreSQL لأن البيانات علائقية بقوة، ونحتاج معاملات ACID لتدفق الدفع، والفريق لديه خبرة عميقة في PostgreSQL، وتقديرنا بـ 5,000 طلب كتابة في الثانية يقع ضمن نطاق أساسي واحد مع نسخ القراءة" — هذه إجابة كاملة. "سأستخدم MongoDB لأنها مرنة" — هذه ليست كذلك.

اختيار قاعدة البيانات مقايضة متعددة الأبعاد. لا توجد إجابة صحيحة عالمية — فقط الإجابة التي تناسب شكل بياناتك، وأنماط وصولك، ومتطلبات الاتساق، وحجمك، وفريقك. أتقن هذه الأبعاد الخمسة ونادراً ما ستختار بشكل خاطئ.