Membuat dan mendistribusikan tabel di Azure Cosmos DB for PostgreSQL
BERLAKU UNTUK: Azure Cosmos DB for PostgreSQL (didukung oleh ekstensi database Citus ke PostgreSQL)
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 mulai cepat ini, Anda harus terlebih dahulu:
- 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 cocok dengan 64 vCore, RAM 256GB, dan penyimpanan 2TB, Anda dapat menggunakan kluster simpul tunggal. 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 diperlukan untuk memanfaatkan fitur performa Azure Cosmos DB for PostgreSQL. Jika Anda tidak mendistribusikan tabel, node pekerja tidak dapat membantu menjalankan kueri yang melibatkan tabel tersebut.
Memuat data ke dalam tabel terdistribusi
Kami siap mengisi tabel dengan data sampel. Untuk panduan mulai cepat ini, kami akan menggunakan himpunan data yang sebelumnya diambil 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 agar 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, file yang kami arahkan dikompresi gzip dan yang juga secara otomatis ditangani untuk kami.
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.