إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
هام
لم يعد Azure Cosmos DB ل PostgreSQL مدعوما للمشاريع الجديدة. لا تستخدم هذه الخدمة لمشاريع جديدة. بدلا من ذلك، استخدم إحدى هاتين الخدمتين:
استخدم Azure Cosmos DB ل NoSQL لحل قاعدة بيانات موزعة مصمم للسيناريوهات عالية النطاق مع اتفاقية مستوى خدمة توفر 99.999% (SLA) والتحجيم التلقائي الفوري وتجاوز الفشل التلقائي عبر مناطق متعددة.
استخدم ميزة المجموعات المرنة في قاعدة بيانات Azure ل PostgreSQL المجزأة باستخدام ملحق Citus مفتوح المصدر.
معرف المستأجر كمفتاح الجزء
معرف المستأجر هو العمود الموجود في جذر حمل العمل، أو أعلى التسلسل الهرمي في نموذج البيانات الخاص بك. على سبيل المثال، في مخطط التجارة الإلكترونية SaaS هذا، سيكون معرف المتجر:
سيكون نموذج البيانات هذا نموذجياً لشركات مثل Shopify. يستضيف مواقع لمتاجر متعددة عبر الإنترنت، حيث يتفاعل كل متجر مع بياناته الخاصة.
- يحتوي نموذج البيانات هذا على مجموعة من الجداول: المتاجر والمنتجات والطلبات وعناصر السطر والبلدان.
- يوجد جدول المخازن في أعلى التسلسل الهرمي. ترتبط جميع المنتجات والطلبات وعناصر السطر بالمتاجر، وبالتالي تكون أقل في التسلسل الهرمي.
- لا يرتبط جدول البلدان بالمتاجر الفردية، بل هو من بين المتاجر.
في هذا المثال، store_id، وهو في أعلى التسلسل الهرمي، هو معرف المستأجر. إنه مفتاح الجزء الصحيح. يتيح الانتقاء store_id كمفتاح القطع تجميع البيانات عبر جميع الجداول لمخزن واحد على عامل واحد.
إن تخصيص الجداول حسب المتجر له مزايا:
- يوفر تغطية SQL مثل المفاتيح الخارجية و JOINs. تتم ترجمة المعاملات لمستأجر واحد على عقدة عامل واحد حيث يوجد كل مستأجر.
- يحقق أداء مكوناً من رقم واحد بالمللي ثانية. يتم توجيه الاستعلامات الخاصة بمستأجر واحد إلى عقدة واحدة بدلا من الحصول على متوازية، مما يساعد على تحسين قفزات الشبكة ولا يزال حجم الحساب/الذاكرة.
- إنه يتوسع. مع زيادة عدد المستأجرين، يمكنك إضافة العقد وإعادة توازن المستأجرين إلى العقد الجديدة، أو حتى عزل المستأجرين الكبار إلى العقد الخاصة بهم. يسمح لك عزل المستأجر بتوفير موارد مخصصة.
نموذج البيانات الأمثل للتطبيقات متعددة المستأجرين
في هذا المثال، يجب توزيع الجداول الخاصة بالمتجر حسب معرف المتجر، وإنشاء جدول مرجعي countries.
لاحظ أن الجداول الخاصة بالمستأجر لها معرف المستأجر ويتم توزيعها. في مثالنا، يتم توزيع المتاجر والمنتجات line_items. بقية الجداول هي جداول مرجعية. في مثالنا، جدول البلدان هو جدول مرجعي.
-- Distribute large tables by the tenant ID
SELECT create_distributed_table('stores', 'store_id');
SELECT create_distributed_table('products', 'store_id', colocate_with => 'stores');
-- etc for the rest of the tenant tables...
-- Then, make "countries" a reference table, with a synchronized copy of the
-- table maintained on every worker node
SELECT create_reference_table('countries');
يجب أن تحتوي جميع الجداول الكبيرة على معرف المستأجر.
- إذا كنت تقوم بترحيل تطبيق متعدد المستأجرين موجود إلى Azure Cosmos DB ل PostgreSQL، فقد تحتاج إلى نشر تكرار قليلا وإضافة عمود معرف المستأجر إلى جداول كبيرة إذا كان مفقودا، ثم إعادة تعبئة القيم المفقودة للعمود.
- بالنسبة للتطبيقات الجديدة على Azure Cosmos DB ل PostgreSQL، تأكد من وجود معرف المستأجر على جميع الجداول الخاصة بالمستأجر.
تأكد من تضمين معرف المستأجر على قيود المفتاح الأساسي والفريد والأجنبي على الجداول الموزعة في شكل مفتاح مركب. على سبيل المثال، إذا كان الجدول يحتوي على مفتاح أساسي من id، فقم بتحويله إلى المفتاح المركب (tenant_id,id).
ليست هناك حاجة لتغيير المفاتيح للجداول المرجعية.
اعتبارات الاستعلام للحصول على أفضل أداء
تعمل الاستعلامات الموزعة التي تقوم بالتصفية على معرف المستأجر بفعالية أكبر في التطبيقات متعددة المستأجرين. تأكد من أن الاستعلامات الخاصة بك يتم تحديد نطاقها دائما لمستأجر واحد.
SELECT *
FROM orders
WHERE order_id = 123
AND store_id = 42; -- ← tenant ID filter
من الضروري إضافة عامل تصفية معرف المستأجر حتى إذا كانت شروط عامل التصفية الأصلية تحدد الصفوف التي تريدها بشكل لا لبس فيه. عامل تصفية معرف المستأجر، بينما يبدو زائدا عن الحاجة، يخبر Azure Cosmos DB ل PostgreSQL كيفية توجيه الاستعلام إلى عقدة عاملة واحدة.
وبالمثل، عند الانضمام إلى جدولين موزعين، تأكد من تحديد نطاق كلا الجدولين لمستأجر واحد. يمكن إجراء تحديد النطاق عن طريق التأكد من أن شروط الانضمام تتضمن معرف المستأجر.
SELECT sum(l.quantity)
FROM line_items l
INNER JOIN products p
ON l.product_id = p.product_id
AND l.store_id = p.store_id -- ← tenant ID in join
WHERE p.name='Awesome Wool Pants'
AND l.store_id='8c69aa0d-3f13-4440-86ca-443566c1fc75';
-- ↑ tenant ID filter
هناك مكتبات مساعدة للعديد من أطر عمل التطبيقات الشائعة التي تسهل تضمين معرف مستأجر في الاستعلامات. فيما يلي الإرشادات:
الخطوات التالية
لقد انتهينا الآن من استكشاف نمذجة البيانات للتطبيقات القابلة للتطوير. الخطوة التالية هي الاتصال والاستعلام عن قاعدة البيانات بلغة البرمجة التي تختارها.