Bagikan melalui


Membuat dan mendistribusikan tabel di Azure Cosmos DB for PostgreSQL

Penting

Azure Cosmos DB for PostgreSQL tidak lagi didukung untuk proyek baru. Jangan gunakan layanan ini untuk proyek baru. Sebagai gantinya, gunakan salah satu dari dua layanan ini:

Dalam contoh ini, kita akan menggunakan tabel terdistribusi Azure Cosmos DB for PostgreSQL untuk menyimpan dan mengkueri peristiwa yang direkam dari GitHub sumber terbuka kontributor.

Prasyarat

Untuk mengikuti panduan memulai cepat ini, Anda perlu:

  1. Buat kluster di portal Azure.
  2. Sambungkan ke kluster dengan psql untuk menjalankan perintah SQL.

Membuat tabel

Setelah terhubung melalui psql, mari kita buat tabel kita. Salin dan tempel perintah berikut ke jendela terminal psql, dan tekan enter untuk menjalankan:

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);

Perhatikan indeks GIN pada payload di github_events. Indeks memungkinkan kueri cepat di kolom JSONB. Karena Citus adalah ekstensi PostgreSQL, Azure Cosmos DB for PostgreSQL mendukung fitur PostgreSQL tingkat lanjut seperti jenis data JSONB untuk menyimpan data semi-terstruktur.

Mendistribusikan tabel

create_distributed_table() adalah fungsi ajaib yang disediakan Azure Cosmos DB for PostgreSQL untuk mendistribusikan tabel dan menggunakan sumber daya di beberapa komputer. Fungsi ini menguraikan tabel menjadi pecahan, yang dapat tersebar di seluruh simpul untuk meningkatkan penyimpanan dan performa komputasi.

Catatan

Dalam aplikasi nyata, ketika beban kerja Anda sesuai dengan 64 vCores, RAM 256GB, dan penyimpanan 2TB, Anda dapat menggunakan kluster dengan satu simpul. Dalam hal ini, mendistribusikan tabel bersifat opsional. Nantinya, Anda dapat mendistribusikan tabel sesuai kebutuhan menggunakan create_distributed_table_concurrently.

Mari kita distribusikan tabel:

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

Penting

Mendistribusikan tabel atau menggunakan sharding berbasis skema diperlukan untuk memanfaatkan fitur performa Azure Cosmos DB for PostgreSQL. Jika Anda tidak mendistribusikan tabel atau skema, simpul pekerja tidak dapat membantu menjalankan kueri yang melibatkan data mereka.

Memuat data ke dalam tabel terdistribusi

Kami siap mengisi tabel dengan data sampel. Untuk panduan cepat ini, kami akan menggunakan dataset yang sebelumnya diperoleh dari GitHub API.

Kita akan menggunakan ekstensi pg_azure_storage, untuk memuat data langsung dari kontainer publik di Azure Blob Storage. Pertama, kita perlu membuat ekstensi di database kita:

SELECT * FROM create_extension('azure_storage');

Jalankan perintah berikut untuk meminta database mengambil contoh file CSV dan memuatnya ke dalam tabel database.

-- 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';

Perhatikan bagaimana ekstensi mengenali bahwa URL yang disediakan untuk perintah salin berasal dari Azure Blob Storage, dan file yang kami tunjuk sudah dikompresi dalam format gzip, yang juga ditangani secara otomatis oleh sistem.

Kami dapat meninjau detail tabel terdistribusi kami, termasuk ukurannya, dengan citus_tables tampilan:

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)

Langkah berikutnya

Sekarang kita telah mendistribusikan tabel dan memuatnya dengan data. Selanjutnya, mari kita coba menjalankan kueri di seluruh tabel terdistribusi.