重要事項
新專案不再支援適用於 PostgreSQL 的 Azure Cosmos DB。 請勿將此服務用於新專案。 請改用下列兩項服務之一:
使用 Azure Cosmos DB for NoSQL 作為專為高規模應用場景設計的分散式資料庫解決方案,其特色包括99.999% 的可用性服務等級協定(SLA)、即時自動調整,以及跨多個區域的自動容錯移轉。
針對使用開放原始碼超大規模 (Citus) 延伸模組的分區化 PostgreSQL 使用適用於 PostgreSQL 的 Azure 資料庫的彈性叢集功能。
在此範例中,我們會使用 Azure Cosmos DB for PostgreSQL 分散式資料表,儲存並查詢 GitHub 開放原始碼參與者記錄的事件。
先決條件
若要遵循此快速入門,您首先必須:
建立資料表
在您透過 psql 連線後,我們會建立資料表。 將下列命令複製並貼到 psql 終端機視窗中,然後按 enter 鍵以執行:
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);
請注意 github_events 中 payload 上的 GIN 索引。 索引允許在 JSONB 資料行中快速查詢。 由於 Citus 是 PostgreSQL 擴充功能,因此 Azure Cosmos DB for PostgreSQL 支援進階 PostgreSQL 功能,例如 JSONB 資料類型來儲存半結構化資料。
散發資料表
create_distributed_table() 是 Azure Cosmos DB for PostgreSQL 的 magic 函式,不僅可以散發資料表,還可以跨多部機器使用資源。 函式會將資料表分解成分區,可分散到各節點以增加儲存體和計算效能。
附註
在實際應用程式中,當您的工作負載符合 64 個虛擬核心、256GB RAM 和 2TB 儲存體時,您可以使用單一節點叢集。 在此情況下,散發資料表是選擇性的。 之後,您可以使用 create_distributed_table_concurrently 視需要散發資料表。
現在我們可以散發資料表:
SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');
重要事項
您必須散發資料表或使用結構描述型分區化,才能利用 Azure Cosmos DB for PostgreSQL 效能功能。 如果您未散發資料表或結構描述,則背景工作角色節點就無法協助執行涉及其資料的查詢。
將資料載入分散式資料表
我們已準備好使用範例資料填入資料表。 在本快速入門中,我們將使用先前從 GitHub API 擷取的資料集。
我們將使用 pg_azure_storage 擴充功能,直接從 Azure Blob 儲存體中的公用容器載入資料。 首先,我們需要在資料庫中建立擴充功能:
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 儲存體,我們指向的檔案是 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)
後續步驟
現在我們已散發資料表,並使用資料載入。 接下來,讓我們嘗試跨分散式資料表執行查詢。