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

لعقود من الزمن، انقسم عالم قواعد البيانات بين معسكرين: **قواعد البيانات العلائقية** (PostgreSQL وMySQL) ذات الاتساق القوي ولكن قابلية التوسع محدودة، و**قواعد بيانات NoSQL** (MongoDB وCassandra) ذات قابلية التوسع الأفقي ولكن اتساق أضعف وقدرات استعلام محدودة.
مقدمة
لعقود من الزمن، انقسم عالم قواعد البيانات بين معسكرين: قواعد البيانات العلائقية (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:
- يتم تقسيم البيانات إلى نطاقات (64 ميجابايت بشكل افتراضي، على غرار تقسيمات Spanner).
- يتم نسخ كل نطاق 3x (قابل للتكوين) عبر العقد.
- إحدى النسخ المتماثلة هي المستأجر (يتولى عمليات القراءة والكتابة).
- توافق الطوافة يضمن الاتساق عبر النسخ المتماثلة.
- يمكن لأي عقدة أن تخدم الاستعلامات — توجه بوابة 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 وتعبيرها مع مرونة ومرونة الأنظمة الموزعة.
الوجبات السريعة الرئيسية
- استخدم SQL الموزعة عندما تحتاج إلى دلالات SQL ولكنك تجاوزت عقدة واحدة.
- ليس لعمليات النشر الصغيرة — يعد PostgreSQL مع النسخ المتماثلة للقراءة أبسط وأرخص.
- الاختيار حسب التوافق — YugabyteDB لـ PostgreSQL، وTiDB لـ MySQL، وCockroachDB للمشاريع الجديدة.
- التخطيط لوقت الاستجابة — المعاملات الموزعة لها نفقات عامة. المعيار قبل الالتزام.
- المراقبة بعناية — راقب النطاقات الساخنة والاستعلامات البطيئة وتأخر النسخ المتماثل.
إطار القرار
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

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

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