اختيار أعمدة التوزيع في Azure Cosmos DB ل PostgreSQL

ينطبق على: Azure Cosmos DB ل PostgreSQL (مدعوم بملحق قاعدة بيانات Citus إلى PostgreSQL)

يعد اختيار عمود توزيع كل جدول أحد أهم قرارات النمذجة التي ستتخذها. يخزن Azure Cosmos DB ل PostgreSQL الصفوف في أجزاء استنادا إلى قيمة عمود توزيع الصفوف.

يجمع الاختيار الصحيح البيانات ذات الصلة معًا على نفس العقد الفعلية، ما يجعل الاستعلامات سريعة ويضيف الدعم لجميع ميزات SQL. يجعل الاختيار غير الصحيح النظام يعمل ببطء.

النصائح العامة

فيما يلي أربعة معايير لاختيار عمود التوزيع المثالي للجداول الموزعة.

  1. اختر عمودًا يمثل جزءًا مركزيًا في حمل عمل التطبيق.

    قد تفكر في هذا العمود على أنه "القلب" أو "الجزء المركزي" أو "البعد الطبيعي" لتقسيم البيانات.

    أمثلة:

    • device_id في حمل عمل IoT
    • security_id لتطبيق مالي يتعقب الأوراق المالية
    • user_id في تحليلات المستخدم
    • tenant_id لتطبيق SaaS متعدد المستأجرين
  2. اختر عمودًا ذو علاقة أساسية لائقة، وتوزيعًا إحصائيًا زوجيًا.

    يجب أن يحتوي العمود على العديد من القيم، وأن يتم توزيعه بشكل شامل ومتساوي بين كافة الأجزاء.

    أمثلة:

    • العلاقة الأساسية أكثر من 1000
    • لا تقم باختيار عمود له نفس القيمة في نسبة كبيرة من الصفوف (انحراف البيانات)
    • في حمل عمل SaaS، يمكن أن يؤدي وجود مستأجر واحد أكبر بكثير من باقي المستأجرين إلى انحراف البيانات. بالنسبة لهذه الحالة، يمكنك استخدام عزل المستأجر لإنشاء جزء مخصص للتعامل مع المستأجر.
  3. اختر عمودًا يفيد الاستعلامات الموجودة.

    بالنسبة إلى حمل العمل التشغيلي والمعاملات (حيث تستغرق معظم الاستعلامات بضعة أجزاء من الثانية فقط)، اختر عمودًا يظهر كعامل تصفية في عبارات WHERE لما لا يقل عن 80٪ من الاستعلامات. على سبيل المثال، العمود device_id في SELECT * FROM events WHERE device_id=1.

    بالنسبة إلى حمل العمل التحليلي (حيث تستغرق معظم الاستعلامات من ثانية إلى ثانيتين)، اختر عمودًا يتيح موازاة الاستعلامات عبر العقد العاملة. على سبيل المثال، عمود يحدث بشكل متكرر في عبارات GROUP BY، أو يتم الاستعلام عنه عبر قيم متعددة في وقت واحد.

  4. اختر عمودًا موجودًا في غالبية الجداول الكبيرة.

    يجب توزيع الجداول التي تزيد سعتها عن 50 غيغابايت. يتيح لك اختيار عمود التوزيع نفسه لجميع الجداول إمكانية تحديد موقع البيانات لهذا العمود في العقد العاملة. الموقع المشترك يجعل من الفعال تشغيل JOINs والقيم المحتسبة، وفرض المفاتيح الخارجية.

    يمكن أن تكون الجداول الأخرى (الأصغر) جداول محلية أو مرجعية. إذا كان الجدول الأصغر بحاجة إلى JOIN مع الجداول الموزعة، فجعله جدولًا مرجعيًا.

أمثلة على حالة الاستخدام

لقد رأينا معايير عامة لاختيار عمود التوزيع. دعونا نرى الآن كيف تنطبق على حالات الاستخدام الشائعة.

تطبيقات متعددة المستأجرين

تستخدم البنية متعددة المستأجرين شكلا من أشكال نمذجة قاعدة البيانات الهرمية لتوزيع الاستعلامات عبر العقد في نظام المجموعة. تعرف قمة التسلسل الهرمي للبيانات باسم معرف المستأجر ويجب تخزينه في عمود في كل جدول.

يقوم Azure Cosmos DB ل PostgreSQL بفحص الاستعلامات لمعرفة معرف المستأجر الذي تتضمنه ويجد جزء الجدول المطابق. يقوم بتوجيه الاستعلام إلى عقدة عامل واحدة تحتوي على الجزء. يسمى تشغيل استعلام مع جميع البيانات ذات الصلة الموضوعة على نفس العقدة بالموقع المشترك.

يوضح الرسم التخطيطي التالي الموقع المشترك في نموذج البيانات متعدد المستأجرين. يحتوي على جدولين، جدول الحسابات وجدول الحملات، كل منهما موزع بواسطة account_id. تمثل المربعات المظللة الأجزاء. يتم تخزين الأجزاء الخضراء معًا على عقدة عاملة واحدة، ويتم تخزين الأجزاء الزرقاء على عقدة عاملة أخرى. لاحظ كيف يحتوي استعلام الصلة بين الحسابات والحملات على جميع البيانات الضرورية معا في عقدة واحدة عندما يكون كلا الجدولين مقيدًا بنفس account_id.

موقع مشترك متعدد المستأجرين

لتطبيق هذا التصميم في المخطط الخاص بك، حدد ما الذي يشكل مستأجرًا في التطبيق الخاص بك. تشمل الأمثلة الشائعة الشركة أو الحساب أو المؤسسة أو العميل. سيكون اسم العمود شيئا مثل company_id أو customer_id. افحص كل استعلاماتك واسأل نفسك، هل سيعمل إن كان يحتوي على المزيد من عبارات WHERE لتقييد جميع الجداول المتضمنة في الصفوف التي لها نفس معرف المستأجر؟ يتم تحديد نطاق الاستعلامات في النموذج متعدد المستأجرين إلى مستأجر. على سبيل المثال، يتم تحديد نطاق الاستعلامات حول المبيعات أو المخزون داخل متجر معين.

أفضل الممارسات

  • توزيع الجداول حسب عمود معرف_المستأجر المشترك. على سبيل المثال، في تطبيق SaaS أينما يكون المستأجرون شركات، من المحتمل أن يكون tenant_id هو company_id.
  • تحويل جداول صغيرة عبر المستأجرين إلى جداول مرجعية. عندما يشارك مستأجرون متعددون جدول صغير من المعلومات، قم بتوزيعه كجدول مرجعي.
  • تقييد تصفية كافة استعلامات التطبيق عن طريق tenant_id. يجب أن يطلب كل استعلام معلومات لمستأجر واحد في كل مرة.

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

التطبيقات في الوقت الحقيقي

تقدم البنية متعددة المستأجرين بنية هرمية وتستخدم تجميع البيانات لتوجيه الاستعلامات لكل مستأجر. على النقيض من ذلك، تعتمد البنيات في الوقت الحقيقي على خصائص توزيع محددة لبياناتها لتحقيق معالجة متوازية للغاية.

نستخدم "معرف الكيان" كمصطلح لأعمدة التوزيع في نموذج الوقت الحقيقي. الكيانات النموذجية هي المستخدمين أو المضيفين أو الأجهزة.

تطلب عادةً الاستعلامات في الوقت الحقيقي تجميعات رقمية مجمعة حسب التاريخ أو الفئة. يرسل Azure Cosmos DB ل PostgreSQL هذه الاستعلامات إلى كل جزء للحصول على نتائج جزئية ويجمع الإجابة النهائية على عقدة المنسق. تعمل الاستعلامات بشكل أسرع عندما تساهم أكبر عدد ممكن من العقد، وعندما لا يجب أن تقوم عقدة واحدة بقدر غير متناسب من العمل.

أفضل الممارسات

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

اقرأ البرنامج التعليمي للوحة معلومات الوقت الحقيقي للحصول على مثال حول كيفية إنشاء هذا النوع من التطبيقات.

بيانات السلاسل الزمنية

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

الخطأ الأكثر شيوعا في نمذجة معلومات السلسلة الزمنية في Azure Cosmos DB ل PostgreSQL هو استخدام الطابع الزمني نفسه كعمود توزيع. توزيع التجزئة على أساس الوقت يوزع الأوقات على ما يبدو بشكل عشوائي إلى أجزاء مختلفة بدلاً من الاحتفاظ بنطاقات زمنية معًا في أجزاء. تشير الاستعلامات التي تتضمن الوقت بشكل عام إلى نطاقات زمنية، على سبيل المثال، أحدث البيانات. يؤدي هذا النوع من توزيع التجزئة إلى حمل الشبكة.

أفضل الممارسات

  • لا تختار طابعًا زمنيًا كعمود توزيع. اختر عمود توزيع مختلفًا. في تطبيق متعدد المستأجرين، استخدم معرف المستأجر، أو في تطبيق في الوقت الحقيقي استخدم معرف الكيان.
  • استخدم تقسيم جدول PostgreSQL للوقت بدلًا من ذلك. استخدم تقسيم الجدول لتقسيم جدول كبير من البيانات المرتبة زمنيًا إلى جداول موروثة متعددة مع احتواء كل جدول على نطاقات زمنية مختلفة. يؤدي توزيع جدول مقسم على Postgres إلى إنشاء أجزاء للجداول الموروثة.

الخطوات التالية