مقال

SQL الموزعة وNewSQL: الجيل القادم من قواعد البيانات

SQL الموزعة وNewSQL: الجيل القادم من قواعد البيانات

لعقود من الزمن، انقسم عالم قواعد البيانات بين معسكرين: **قواعد البيانات العلائقية** (PostgreSQL وMySQL) ذات الاتساق القوي ولكن قابلية التوسع محدودة، و**قواعد بيانات NoSQL** (MongoDB وCassandra) ذات قابلية التوسع الأفقي ولكن اتساق أضعف وقدرات استعلام محدودة.

4 دقيقة قراءةاللغة: AR العربيةمجاني0 تصفيقات0 تعليقات
التقنيةمقالات هندسيةDistributedDatabasesTechnologyEngineering ArticlesNextNewSQL
خيارات القراءة

مقدمة

لعقود من الزمن، انقسم عالم قواعد البيانات بين معسكرين: قواعد البيانات العلائقية (PostgreSQL وMySQL) ذات الاتساق القوي ولكن قابلية التوسع محدودة، وقواعد بيانات NoSQL (MongoDB وCassandra) ذات قابلية التوسع الأفقي ولكن اتساق أضعف وقدرات استعلام محدودة.

** SQL الموزعة ** (وتسمى أيضًا NewSQL) تعمل على سد هذه الفجوة. فهو يوفر القوة الكاملة لـ SQL - معاملات ACID، والانضمامات، والمفاتيح الخارجية، والأدوات المألوفة - على بنية موزعة وقابلة للتطوير أفقيًا. النتيجة: قوة الاتساق والاستعلام لقاعدة البيانات العلائقية مع قابلية التوسع في NoSQL.


طيف قاعدة البيانات

Strong Consistency
        ▲
        │           ┌───────────────────────┐
        │           │  Distributed SQL      │
        │           │  (CockroachDB,        │
        │           │   YugabyteDB,         │
        │           │   Google Spanner)     │
        │           └───────────────────────┘
        │
        │    ┌──────────────┐     ┌──────────────────┐
        │    │  Traditional │     │  Traditional      │
        │    │  SQL         │     │  NewSQL           │
        │    │  (PostgreSQL,│     │  (Vitess, TiDB)   │
        │    │   MySQL)     │     │                   │
        │    └──────────────┘     └──────────────────┘
        │
        │                              ┌──────────────────┐
        │                              │  NoSQL           │
        │                              │  (Cassandra,     │
        │                              │   DynamoDB,      │
        │                              │   CosmosDB)      │
        │                              └──────────────────┘
        └────────────────────────────────────────────────────
                              Horizontal Scalability  ──────►

ما هو SQL الموزع؟

الخصائص الأساسية

ميزة الوصف
واجهة SQL دعم SQL الكامل: الصلات والاستعلامات الفرعية والتجمعات ووظائف النافذة
معاملات ACID قابل للتسلسل أو عزل اللقطة عبر العقد
التحجيم الأفقي أضف العقد دون توقف، وستتم إعادة توازن البيانات تلقائيًا
** المشاركة التلقائية ** يتم توزيع البيانات تلقائيًا عبر العقد
** النسخ ** النسخ المتماثل المتزامن من أجل المتانة (RPO=0)
توفر عالي تجاوز الفشل تلقائيًا، بدون تدخل يدوي
** التوزيع الجغرافي ** يمكن أن تمتد البيانات إلى مناطق متعددة بزمن وصول أقل من 50 مللي ثانية

بنيات SQL الموزعة

جوجل سبانر - الرائد

┌──────────────────────────────────────────┐
│         Spanner Global Architecture       │
├──────────────────────────────────────────┤
│  Zone 1 (us-east1)   Zone 2 (europe-west)│
│  ┌──────────────┐    ┌──────────────┐    │
│  │ Leader Node  │    │ Follower Node│    │
│  │   ┌────────┐ │    │              │    │
│  │   │ Spanner│ │    │              │    │
│  │   │ Server │ │    │              │    │
│  │   └────────┘ │    │              │    │
│  └──────────────┘    └──────────────┘    │
├──────────────────────────────────────────┤
│          TrueTime API (GPS + Atomic)     │
│          Clock synchronization < 7ms     │
└──────────────────────────────────────────┘

الابتكار الرئيسي: TrueTime API — مزامنة نظام تحديد المواقع العالمي (GPS) والساعة الذرية مما يوفر عدم اليقين على مدار الساعة. وهذا يتيح الاتساق الخارجي (قابلية الخطية) عبر العقد الموزعة عالميًا.

CockroachDB — مصدر مفتوح مستوحى من مفتاح البراغي

                     ┌─────────────────────────┐
                     │    SQL Gateway          │
                     │  (Any node can serve)   │
                     └──────────┬──────────────┘
                                │
         ┌──────────────────────┼──────────────────────┐
         │                      │                      │
   ┌─────▼─────┐          ┌─────▼─────┐          ┌─────▼─────┐
   │  Node 1   │          │  Node 2   │          │  Node 3   │
   │ ┌───────┐ │          │ ┌───────┐ │          │ ┌───────┐ │
   │ │ Range A│ │          │ │ Range A│ │          │ │ Range A│ │
   │ │ (LEADER)│          │ │(FOLLOWER│          │ │(FOLLOWER│ │
   │ └───────┘ │          │ └───────┘ │          │ └───────┘ │
   │ ┌───────┐ │          │ ┌───────┐ │          │ ┌───────┐ │
   │ │ Range B│ │          │ │ Range B│ │          │ │ Range B│ │
   │ │(FOLLOWER│          │ │ (LEADER)│          │ │(FOLLOWER│ │
   │ └───────┘ │          │ └───────┘ │          │ └───────┘ │
   └───────────┘          └───────────┘          └───────────┘

كيف يعمل CockroachDB:

  1. يتم تقسيم البيانات إلى نطاقات (64 ميجابايت بشكل افتراضي، على غرار تقسيمات Spanner).
  2. يتم نسخ كل نطاق 3x (قابل للتكوين) عبر العقد.
  3. إحدى النسخ المتماثلة هي المستأجر (يتولى عمليات القراءة والكتابة).
  4. توافق الطوافة يضمن الاتساق عبر النسخ المتماثلة.
  5. يمكن لأي عقدة أن تخدم الاستعلامات — توجه بوابة SQL إلى النطاق الصحيح.

YugabyteDB — متوافق مع PostgreSQL

تم تصميم YugabyteDB للتوافق مع PostgreSQL على مستوى البروتوكول السلكي:

-- This is standard PostgreSQL syntax — it just works
CREATE TABLE orders (
    id UUID DEFAULT gen_random_uuid(),
    customer_id UUID NOT NULL,
    total NUMERIC(10,2) NOT NULL,
    status TEXT NOT NULL DEFAULT 'pending',
    created_at TIMESTAMPTZ DEFAULT NOW(),
    PRIMARY KEY (id)
);

-- Distributed ACID transaction across nodes
BEGIN;
INSERT INTO orders (customer_id, total, status)
VALUES ($1, $2, 'pending');
UPDATE inventory SET quantity = quantity - 1
WHERE product_id = $3 AND quantity > 0;
COMMIT;

-- Full PostgreSQL ecosystem compatibility
-- Supports: pgAdmin, Prisma, DBeaver, all standard drivers

مقارنة SQL الموزعة

ميزة صرصورDB يوغا بايت دي بي تي دي بي جوجل المفك
التوافق بوستجري إس كيو إل (85%) بوستجري إس كيو إل (95%+) ماي إس كيو إل الملكية
** الاتساق ** قابل للتسلسل قابل للتسلسل لقطة العزلة الاتساق الخارجي
** النسخ ** طوف طوف طوف باكسوس
** التوزيع الجغرافي ** نعم نعم نعم نعم
** المشاركة التلقائية ** نعم (حسب النطاق) نعم (حسب التجزئة/النطاق) نعم (حسب النطاق) نعم (بالتقسيم)
** الفهارس الثانوية ** عالمي (موزع) العالمية + المحلية العالمية + المحلية عالمي
** المفاتيح الخارجية ** نعم نعم نعم نعم
** مركز السيطرة على الأمراض ** نعم (حوض كافكا) نعم (كافكا، مطاطا) نعم (تيكدك) نعم (حانة/فرعية)
الترخيص BSL (المصدر متاح) أباتشي 2.0 أباتشي 2.0 الملكية
إدارة السحابة صرصورDB سحابة إدارة YugabyteDB سحابة تي دي بي مفتاح السحابة
** المضيف الذاتي ** نعم نعم نعم لا

متى يتم استخدام SQL الموزعة

حالات الاستخدام المثالي

حالة الاستخدام لماذا SQL الموزعة مثال
** تطبيقات SaaS العالمية ** يحتاج المستخدمون في جميع أنحاء العالم إلى زمن وصول منخفض واتساق قوي حسابات مستخدمين متعددة المناطق
الأنظمة المالية معاملات ACID عبر الأجزاء، دون فقدان البيانات معالجة الدفع، دفتر الأستاذ
** منصات التجارة الإلكترونية ** المخزون، والأوامر، والعربات - كلها تحتاج إلى الاتساق ارتفاع حركة المرور الجمعة السوداء
الألعاب حالة اللاعب، ولوحات المتصدرين، والمعاملات متعددة اللاعبين عبر المنطقة
السلسلة الزمنية لإنترنت الأشياء + البيانات الوصفية SQL للتحليلات على البيانات الموزعة القياس عن بعد للأسطول مع الصلات

عندما لا تستخدم SQL الموزعة

السيناريو لماذا بديل أفضل
عمليات بحث بسيطة عن القيمة الرئيسية النفقات العامة للمعاملات الموزعة غير مبررة ريديس، دينامو دي بي
** منطقة واحدة، بيانات صغيرة ** التعقيد غير مطلوب PostgreSQL
** البحث عن النص الكامل ** غير مصممة لفهرسة النص بحث مرن
** اجتياز الرسم البياني ** الانضمام إلى العلاقات العميقة بطيء Neo4j
** إنتاجية كتابة عالية جدًا ** (> 100 ألف كتابة/ثانية/عقدة) قد تكون النفقات العامة للإجماع مرتفعة للغاية كاساندرا، سيلا دي بي

استراتيجيات توزيع البيانات

المشاركة على أساس النطاق (CockroachDB، Spanner)

-- Data is split by primary key ranges
Table: orders

Range 1: PK '00000000' to '3fffffff'  → Node 1 (LEADER) + Node 2, Node 3
Range 2: PK '40000000' to '7fffffff'  → Node 2 (LEADER) + Node 1, Node 3
Range 3: PK '80000000' to 'bfffffff'  → Node 3 (LEADER) + Node 1, Node 2
Range 4: PK 'c0000000' to 'ffffffff'  → Node 1 (LEADER) + Node 2, Node 3

الإيجابيات: عمليات مسح فعالة للنطاق، جيدة للمفاتيح التسلسلية. السلبيات: اكتب النقاط الفعالة في حالة إدراج مفاتيح تسلسلية (يتم حلها بواسطة فهارس التجزئة).

المشاركة القائمة على التجزئة (YugabyteDB)

-- Hash-sharded primary key
CREATE TABLE orders (
    id UUID DEFAULT gen_random_uuid(),
    customer_id UUID,
    total NUMERIC,
    PRIMARY KEY (id HASH)
);

-- Data distribution by hash
Hash('00000000-...') = 0.23 → Tablet 1 → Node 1
Hash('11111111-...') = 0.67 → Tablet 2 → Node 2
Hash('22222222-...') = 0.12 → Tablet 3 → Node 3

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


ميزات SQL الموزعة الرئيسية

المعاملات الموزعة (2PC + الطوافة)

-- This transaction spans multiple nodes
BEGIN;
UPDATE account_a SET balance = balance - 100 WHERE id = 'A';
UPDATE account_b SET balance = balance + 100 WHERE id = 'B';  -- Different node
COMMIT;

-- Under the hood:
-- 1. Transaction coordinator (any node) acquires locks
-- 2. Prepares both participants
-- 3. Raft commits the transaction record
-- 4. COMMIT acknowledged to client
-- All-or-nothing — guaranteed ACID

المؤشرات الثانوية العالمية

يتم توزيع الفهارس نفسها عبر العقد:

CREATE INDEX idx_orders_customer ON orders (customer_id);

-- Query that uses the distributed index:
SELECT * FROM orders WHERE customer_id = $1;
-- 1. Routes to any node
-- 2. Node looks up customer_id in distributed index
-- 3. Index returns primary keys → fetch from correct ranges
-- 4. Returns results

ترحيل المخططات عبر الإنترنت

يدعم SQL الموزع تغييرات المخطط دون توقف:

-- Add a column — non-blocking
ALTER TABLE orders ADD COLUMN discount NUMERIC(5,2) DEFAULT 0.00;

-- Create index — non-blocking (background build)
CREATE INDEX CONCURRENTLY idx_orders_date ON orders (created_at);

تغيير التقاط البيانات (CDC)

دفق تغييرات قاعدة البيانات إلى الأنظمة النهائية:

-- CockroachDB CDC
CREATE CHANGEFEED FOR TABLE orders, payments
  INTO 'kafka://kafka-cluster:9092'
  WITH updated, resolved, min_checkpoint_frequency = '5s';

-- YugabyteDB CDC connector
# Deploy to Kafka Connect
{
  "name": "yb-cdc-connector",
  "config": {
    "connector.class": "io.yugabyte.cdc.YBChangeDataCaptureConnector",
    "database.hostname": "yb-1.example.com",
    "database.port": "5433",
    "table.include.list": "public.orders"
  }
}

الاعتبارات التشغيلية

طبولوجيا النشر

منطقة واحدة (3 عقد):

replication:
  factor: 3
  constraints:
    - "+region=us-east-1: 3"
  # All data in one region, 3 copies, survives 2 node failures

منطقة متعددة (فشل منطقة البقاء على قيد الحياة):

replication:
  factor: 3
  constraints:
    - "+region=us-east-1: 1"
    - "+region=us-west-1: 1"
    - "+region=eu-west-1: 1"
  # One copy in each region, survives any single region failure
  # Write latency: round-trip to the farthest region

مناطق متعددة ذات نصاب قريب (للكتابة ذات زمن الوصول المنخفض):

replication:
  factor: 5
  constraints:
    - "+region=us-east-1: 3"  # 3 copies here
    - "+region=us-west-1: 1"  # 1 copy for DR
    - "+region=eu-west-1: 1"  # 1 copy for DR
  # Write quorum = 3, achievable within us-east-1
  # Write latency = intra-region

توقعات الكمون

طوبولوجيا زمن الاستجابة للكتابة (ص50) قراءة الكمون (ص50)
عقدة واحدة 1-5 مللي ثانية 0.5-2 مللي ثانية
3 عقد، نفس المنطقة 5-15 مللي ثانية 1-5 مللي ثانية
3 عقد، 3 مناطق (الولايات المتحدة والاتحاد الأوروبي وآسيا والمحيط الهادئ) 100-300 مللي ثانية 5-50 مللي ثانية (الأقرب)
5 عقد، منطقتان (النصاب القانوني قريب) 5-15 مللي ثانية 1-5 مللي ثانية

الهجرة من PostgreSQL/MySQL

الإستراتيجية: NoSQL-to-(الموزعة)SQL

Phase 1: Evaluate
  - Identify tables that need horizontal scaling
  - Assess which queries cross shards
  - Plan sharding key

Phase 2: Migrate schema
  - Convert CREATE TABLE statements
  - Choose primary key strategy (hash vs. range)
  - Handle sequences (use UUIDs instead of SERIAL)

Phase 3: Migrate data
  - Use CDC or batch export/import
  - Verify consistency
  - Set up replication from old DB

Phase 4: Cut over
  - Point application to new DB
  - Monitor performance
  - Keep old DB as rollback target for 1 week

قضايا الهجرة المشتركة

-- PostgreSQL → CockroachDB
-- ❌ Sequences (not distributed)
SERIAL PRIMARY KEY  →  UUID DEFAULT gen_random_uuid()

-- ❌ Array functions not supported
array_agg(DISTINCT x)  →  json_agg(DISTINCT x)  -- workaround

-- ❌ Long-running queries
-- Solution: add index or query hint

-- ❌ Cross-database queries (CockroachDB)
-- Each cluster = one database, no cross-DB queries

الاستنتاج

تمثل SQL الموزعة تقارب عقدين من تطور قاعدة البيانات - حيث تجمع بين موثوقية SQL وتعبيرها مع مرونة ومرونة الأنظمة الموزعة.

الوجبات السريعة الرئيسية

  1. استخدم SQL الموزعة عندما تحتاج إلى دلالات SQL ولكنك تجاوزت عقدة واحدة.
  2. ليس لعمليات النشر الصغيرة — يعد PostgreSQL مع النسخ المتماثلة للقراءة أبسط وأرخص.
  3. الاختيار حسب التوافق — YugabyteDB لـ PostgreSQL، وTiDB لـ MySQL، وCockroachDB للمشاريع الجديدة.
  4. التخطيط لوقت الاستجابة — المعاملات الموزعة لها نفقات عامة. المعيار قبل الالتزام.
  5. المراقبة بعناية — راقب النطاقات الساخنة والاستعلامات البطيئة وتأخر النسخ المتماثل.

إطار القرار

Q: Do you need horizontal write scaling?
  ├─ Yes
  │  Q: Do you need ACID across all data?
  │  ├─ Yes → Distributed SQL (CockroachDB, Spanner)
  │  └─ No  → NoSQL (Cassandra, DynamoDB)
  └─ No
     Q: Do you need SQL features (joins, aggregations)?
     ├─ Yes → PostgreSQL
     └─ No  → Key-value or document store

SQL الموزعة هي بنية قاعدة البيانات للعصر العالمي السحابي الأصلي - التطبيقات التي يجب أن تعمل في كل مكان، بتناسق قوي، دون أي تنازلات.

مقالات مختارة

50 مهارة من Claude تستحق البناء في 2026
تحريريAR
10 دمجاني

50 مهارة من Claude تستحق البناء في 2026

التقنيةAIAi GuidesAI Agents
0 تصفيقات
قراءة
ابن مساعد ملاحظات خاص بالذكاء الاصطناعي
مميزAR
9 دمجاني

ابن مساعد ملاحظات خاص بالذكاء الاصطناعي

حوّل مجلد ملاحظات Markdown إلى مساعد بحث دون كشف المسودات الخاصة.

التقنيةأدلة المنصةالكتابة بالذكاء الاصطناعيAIAutomationData
0 تصفيقات
قراءة
أتمتة استخراج بيانات الفواتير باستخدام OCR
تحريريAR
8 دمجاني

أتمتة استخراج بيانات الفواتير باستخدام OCR

ابن خط معالجة يقرأ الفواتير ويستخرج الحقول ويعلّم القيم غير المؤكدة للمراجعة.

التقنيةمقالات هندسيةالكتابة بالذكاء الاصطناعيAIAutomationData
0 تصفيقات
قراءة

التعليقات

0 تعليقات

لا توجد تعليقات معتمدة بعد. قد تنتظر الردود الجديدة المراجعة.