Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
Gunakan Azure Cosmos DB for NoSQL untuk solusi database terdistribusi yang dirancang untuk skenario skala tinggi dengan perjanjian tingkat layanan ketersediaan (SLA) 99,999%, skala otomatis instan, dan failover otomatis di beberapa wilayah.
Gunakan fitur Elastic Clusters dari Azure Database For PostgreSQL untuk PostgreSQL yang dipecah menggunakan ekstensi Citus sumber terbuka.
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:
- Buat kluster di portal Azure.
- 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.