إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
المجموعات المرنة على قاعدة بيانات Azure لخدمة PostgreSQL هي عرض مدار لملحق Citus مفتوح المصدر إلى PostgreSQL الذي يتيح التجزئة الأفقية ل PostgreSQL.
بينما Citus هو مجرد ملحق، فإنه يربط مثيلات PostgreSQL متعددة. عند نشر مثيل خادم مرن Azure Database for PostgreSQL مع Citus، فإنه يتعامل مع إدارة وتكوين مثيلات PostgreSQL متعددة كمورد واحد. كما أنه يقوم تلقائيا بإعداد العقد ويجعلها معروفة لملحق Citus.
توفر المجموعات المرنة في الخدمة نموذجين للتجزئة: التجزئة المستندة إلى الصف والتجزئة المستندة إلى المخطط. تحقق من الوثائق مفتوحة المصدر حول نماذج التجزئة، إذا كنت تريد معرفة المزيد.
Architecture
تتكون المجموعة المرنة من عقدة واحدة أو أكثر من قاعدة بيانات Azure لمثيلات الخادم المرنة PostgreSQL. يتم التعرف على هذه المثيلات تلقائيا لبعضها البعض، ويتم ربطها لتشكيل نظام مجموعة Citus. يجب أن تكون العقد من نفس طبقة الحوسبة والتخزين، ويمكن توسيع نطاقها بشكل موحد لأعلى أو لأسفل إلى مستويات أعلى أو أدنى.
تستخدم المجموعات المرنة مثيلات من الخوادم المرنة (تسمى العقد) للتنسيق مع بعضها البعض في بنية "لا شيء مشترك". تسمح البنية أيضا لقاعدة البيانات بالتحجيم، عن طريق إضافة المزيد من العقد إلى نظام المجموعة.
الاتصال بالمجموعة باستخدام المنفذ 5432 يهبط على عقدة المنسق المعينة. تسمح لك المجموعات المرنة أيضا بتحميل اتصالات التوازن عبر نظام المجموعة، باستخدام أسلوب تجزئة من خمس مجموعات، إذا قمت بالاتصال باستخدام المنفذ 7432. باستخدام 7432 لا يزال بإمكانك الهبوط في العقدة المعينة حاليا كمنسق. بالنسبة لعمليات معينة على مستوى نظام المجموعة، مثل توزيع الجداول، قد يطلب منك الاتصال عبر المنفذ 5432. نوصي بشدة بالاتصال دائما على المنفذ 5432، عندما تخطط لإجراء ترقيات مخطط التطبيق والتغييرات المماثلة. إذا قمت بتمكين PgBouncer على المجموعات المرنة، فيمكنك استخدام المنفذ 8432 لتحميل اتصالات التوازن عبر مثيلات PgBouncer على كل عقدة (أو استخدام المنفذ 6432 للمنسق المعين).
على عكس Cosmos DB ل PostgreSQL، لا يتم عرض عناوين العقد خارجيا. إذا نظرت إلى جداول بيانات تعريف Citus مثل pg_dist_node، فقد تلاحظ أن جميع العقد لها نفس عنوان IP كما هو الحال في المثال 10.7.0.254 ولكن أرقام منفذ مختلفة.
select nodeid, nodename, nodeport from pg_dist_node;
nodeid | nodename | nodeport
--------+------------+----------
1 | 10.7.0.254 | 7000
2 | 10.7.0.254 | 7001
(2 rows)
في البنية الأساسية ل Azure، تعيش هذه العقد على أجهزة ظاهرية مختلفة على الرغم من أنها قد تبدو منافذ مختلفة على نفس الجهاز.
لمعرفة المزيد حول Citus ، يمكنك الرجوع إلى وثائق المشروع الرسمية مفتوحة المصدر.
بشكل افتراضي، لا يتم توزيع الجداول والمخططات التي تم إنشاؤها باستخدام Citus تلقائيا بين نظام المجموعة. تحتاج إلى اتخاذ قرار بشأن نموذج التقسيم، وإما أن تقرر توزيع المخططات أو أن تقرر توزيع بيانات الجدول باستخدام التقسيم المستند إلى الصف.
لكل استعلام على الجداول الموزعة، تقوم العقدة التي تم الاستعلام عنها إما بتوجيهها إلى عقدة واحدة أو متوازية عبر عدة عقد. يعتمد القرار على ما إذا كانت البيانات المطلوبة تعيش على عقدة واحدة أو متعددة. باستخدام التجزئة المستندة إلى المخطط، يقوم المنسق بتوجيه الاستعلامات مباشرة إلى العقدة التي تستضيف المخطط. في كل من التجزئة المستندة إلى المخطط والتجزئة المستندة إلى الصف ، تقرر العقدة ما يجب القيام به من خلال الرجوع إلى جداول البيانات الوصفية. تتعقب هذه الجداول موقع العقد وصحتها، وتوزيع البيانات عبر العقد.
بمجرد توزيع البيانات باستخدام أحد نماذج التقسيم، يمكنك الاتصال بأي من العقد لتنفيذ عمليات DML (لغة تعديل البيانات) (SELECT، UPDATE، INSERT، DELETE). تحتوي جميع العقد على بيانات التعريف المطلوبة لتحديد موقع البيانات المطلوبة للاستعلام وتكون قادرة على الحصول عليها للإجابة على الاستعلام.
تقتصر عمليات DDL (لغة تعريف البيانات) والعمليات واسعة المجموعة حاليا على العقدة التي تحمل دور المنسق. تأكد من تنفيذ عمليات DDL وعلى مستوى المجموعة عن طريق الاتصال بالمنفذ 5432، بدلا من استخدام المنفذ 7432.
يمكنك توسيع نطاق مجموعة مرنة عن طريق إضافة عقد جديدة وإعادة التوازن بين البيانات عليها. إعادة التوازن هي عملية عبر الإنترنت ولا تمنع تشغيل أحمال العمل.
Shards
وصف القسم السابق كيفية تخزين الجداول الموزعة كمقاطع على العقد العاملة. يناقش هذا القسم المزيد من التفاصيل التقنية حول هذه الأجزاء.
pg_dist_shard يحتوي جدول بيانات التعريف على صف لكل جزء من كل جدول موزع في النظام. يطابق الصف معرف جزء (shardid) مع نطاق من الأعداد الصحيحة في مساحة التجزئة (shardminvalue، shardmaxvalue).
SELECT * from pg_dist_shard;
logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue
---------------+---------+--------------+---------------+---------------
github_events | 102026 | t | 268435456 | 402653183
github_events | 102027 | t | 402653184 | 536870911
github_events | 102028 | t | 536870912 | 671088639
github_events | 102029 | t | 671088640 | 805306367
(4 rows)
إذا كانت العقدة تريد تحديد الجزء الذي يحتوي على صف من github_events، فإنه يقوم بتجزئة قيمة عمود التوزيع في الصف. ثم تتحقق العقدة من نطاق الجزء الذي يحتوي على القيمة المجزأة. يتم تعريف النطاقات بحيث تكون صورة وظيفة التجزئة هي اتحادها المفكك.
مواضع الأجزاء
لنفترض أن المقطع 102027 مقترن بالصف المعني. تتم قراءة الصف أو كتابته في جدول يسمى github_events_102027 في أحد العقد العاملة. مع المعلومات المخزنة في جداول بيانات التعريف، يحدد الملحق ما هو هذا العامل المحدد. يُعرف تعيين المقطع إلى عقدة عاملة باسم موضع المقطع.
تعيد العقدة كتابة الاستعلامات في أجزاء تشير إلى جداول معينة مثل github_events_102027 وتشغيل هذه الأجزاء على العمال المناسبين. فيما يلي مثال على تشغيل استعلام خلف الكواليس للعثور على العقدة التي تحتفظ بجزء مع المعرف 102027.
SELECT
shardid,
node.nodename,
node.nodeport
FROM pg_dist_placement placement
JOIN pg_dist_node node
ON placement.groupid = node.groupid
AND node.noderole = 'primary'::noderole
WHERE shardid = 102027;
┌─────────┬───────────┬──────────┐
│ shardid │ nodename │ nodeport │
├─────────┼───────────┼──────────┤
│ 102027 │ localhost │ 5433 │
└─────────┴───────────┴──────────┘