إنشاء جداول وتوزيعها في Azure Cosmos DB ل PostgreSQL

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

في هذا المثال، سنستخدم Azure Cosmos DB لجداول PostgreSQL الموزعة لتخزين الأحداث المسجلة من مساهمي GitHub مصدر مفتوح والاستعلام عنها.

المتطلبات الأساسية

لاتباع هذا التشغيل السريع، ستحتاج أولًا إلى:

  1. إنشاء نظام مجموعة في مدخل Microsoft Azure.
  2. اتصل بالمجموعة باستخدام psql لتشغيل أوامر SQL.

إنشاء جداول

بمجرد الاتصال عبر psql، فلنقم بإنشاء طاولتنا. انسخ والصق الأوامر التالية في نافذة psql الطرفية، واضغط على "إدراج" للتشغيل:

CREATE TABLE github_users
(
	user_id bigint,
	url text,
	login text,
	avatar_url text,
	gravatar_id text,
	display_login text
);

CREATE TABLE github_events
(
	event_id bigint,
	event_type text,
	event_public boolean,
	repo_id bigint,
	payload jsonb,
	repo jsonb,
	user_id bigint,
	org jsonb,
	created_at timestamp
);

CREATE INDEX event_type_index ON github_events (event_type);
CREATE INDEX payload_index ON github_events USING GIN (payload jsonb_path_ops);

لاحظ فهرس GIN payload في github_events. يسمح الفهرس بالاستعلام السريع في العمود JSONB. نظرا لأن Citus هو ملحق PostgreSQL، فإن Azure Cosmos DB ل PostgreSQL يدعم ميزات PostgreSQL المتقدمة مثل نوع بيانات JSONB لتخزين البيانات شبه المنظمة.

توزيع الجداول

create_distributed_table() هي الوظيفة السحرية التي يوفرها Azure Cosmos DB ل PostgreSQL لتوزيع الجداول واستخدام الموارد عبر أجهزة متعددة. تحلل الوظيفة الجداول إلى أجزاء، والتي يمكن أن تنتشر عبر العقد لزيادة التخزين وأداء الحساب.

إشعار

في التطبيقات الحقيقية، عندما يتناسب حمل العمل الخاص بك مع 64 vCores وذاكرة وصول عشوائي 256 غيغابايت وتخزين 2 تيرابايت، يمكنك استخدام مجموعة عقدة واحدة. في هذه الحالة، يكون توزيع الجداول اختياريا. في وقت لاحق، يمكنك توزيع الجداول حسب الحاجة باستخدام create_distributed_table_concurrently.

دعونا نوزع الجداول:

SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');

هام

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

تحميل البيانات في الجداول الموزعة

نحن جاهزون لملء الجداول بعينة من البيانات. بالنسبة إلى هذه البداية السريعة، سنستخدم مجموعة بيانات تم التقاطها مسبقًا من GitHub API.

سنستخدم ملحق pg_azure_storage، لتحميل البيانات مباشرة من حاوية عامة في Azure Blob Storage. أولا، نحتاج إلى إنشاء الملحق في قاعدة البيانات الخاصة بنا:

SELECT * FROM create_extension('azure_storage');

قم بتشغيل الأوامر التالية لجعل قاعدة البيانات تجلب ملفات CSV المثال وتحميلها في جداول قاعدة البيانات.

-- download users and store in table

COPY github_users FROM 'https://pgquickstart.blob.core.windows.net/github/users.csv.gz';

-- download events and store in table

COPY github_events FROM 'https://pgquickstart.blob.core.windows.net/github/events.csv.gz';

لاحظ كيف أدرك الملحق أن عناوين URL المقدمة إلى أمر النسخ هي من Azure Blob Storage، والملفات التي أشرنا إليها تم ضغطها بواسطة gzip وتم أيضا التعامل معها تلقائيا بالنسبة لنا.

يمكننا مراجعة تفاصيل جداولنا الموزعة، بما في ذلك أحجامها، citus_tablesمع طريقة العرض:

SELECT * FROM citus_tables;
  table_name   | citus_table_type | distribution_column | colocation_id | table_size | shard_count | table_owner | access_method 
---------------+------------------+---------------------+---------------+------------+-------------+-------------+---------------
 github_events | distributed      | user_id             |             1 | 388 MB     |          32 | citus       | heap
 github_users  | distributed      | user_id             |             1 | 39 MB      |          32 | citus       | heap
(2 rows)

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

الآن قمنا بتوزيع الجداول وتحميلها بالبيانات. بعد ذلك، لنحاول تشغيل الاستعلامات عبر الجداول الموزعة.