Aracılığıyla paylaş


PostgreSQL için Azure Cosmos DB'de tablo oluşturma ve dağıtma

Önemli

PostgreSQL için Azure Cosmos DB artık yeni projeler için desteklenmemektedir. Bu hizmeti yeni projeler için kullanmayın. Bunun yerine, şu iki hizmetlerden birini kullanın:

Bu örnekte, GitHub açık kaynak katkıda bulunanlarından kaydedilen olayları depolamak ve sorgulamak için PostgreSQL için Azure Cosmos DB dağıtılmış tablolarını kullanacağız.

Önkoşullar

Bu hızlı başlangıcı izlemek için önce şunları yapmanız gerekir:

  1. Azure portalında bir küme oluşturun.
  2. SQL komutlarını çalıştırmak için psql ile kümeye bağlanın.

Tablo oluştur

psql aracılığıyla bağlandıktan sonra tablomuzu oluşturalım. Aşağıdaki komutları kopyalayıp psql terminal penceresine yapıştırın ve çalıştırmak için Enter tuşuna basın:

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

payload içindeki github_events GIN dizinine dikkat edin. Dizin, JSONB sütununda hızlı sorgulamaya izin verir. Citus bir PostgreSQL uzantısı olduğundan PostgreSQL için Azure Cosmos DB, yarı yapılandırılmış verileri depolamak için JSONB veri türü gibi gelişmiş PostgreSQL özelliklerini destekler.

Tabloları dağıtma

create_distributed_table() , PostgreSQL için Azure Cosmos DB'nin tabloları dağıtmak ve kaynakları birden çok makine arasında kullanmak için sağladığı sihirli işlevdir. İşlev, tabloları parçalara ayırarak daha yüksek depolama ve işlem performansı için düğümlere yayılabilir.

Not

Gerçek uygulamalarda, iş yükünüz 64 sanal çekirdek, 256 GB RAM ve 2 TB depolama alanına sığdığında tek düğümlü bir küme kullanabilirsiniz. Bu durumda, tabloları dağıtmak isteğe bağlıdır. Daha sonra, create_distributed_table_concurrently kullanarak tabloları gerektiği gibi dağıtabilirsiniz.

Şimdi tabloları dağıtalım:

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

Önemli

PostgreSQL için Azure Cosmos DB performans özelliklerinden yararlanmak için tabloları dağıtmak veya şema tabanlı parçalama kullanmak gerekir. Tabloları veya şemaları dağıtmazsanız, bu durumda işçi düğümleri, verileriyle ilgili sorguları çalıştıramaz.

Dağıtılmış tablolara veri yükleme

Tabloları örnek verilerle doldurmaya hazırız. Bu hızlı başlangıçta GitHub API'sinden daha önce yakalanan bir veri kümesini kullanacağız.

Verileri doğrudan Azure Blob Depolama'daki bir genel kapsayıcıdan yüklemek için pg_azure_storage uzantısını kullanacağız. İlk olarak uzantıyı veritabanımızda oluşturmamız gerekir:

SELECT * FROM create_extension('azure_storage');

Veritabanının örnek CSV dosyalarını getirmesini ve veritabanı tablolarına yüklemesini sağlamak için aşağıdaki komutları çalıştırın.

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

Uzantının, kopyalama komutuna sağlanan URL'lerin Azure Blob Depolama'ya ait olduğunu, bizim işaret ettiğimiz dosyaların gzip ile sıkıştırılmış olduğunu ve bunun da bizim için otomatik olarak işlendiğini fark ettiğini gözlemleyin.

Görünümle citus_tables , boyutları da dahil olmak üzere dağıtılmış tablolarımızın ayrıntılarını gözden geçirebiliriz:

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)

Sonraki adımlar

Şimdi tabloları dağıttık ve bunları verilerle yükledik. Şimdi dağıtılmış tablolarda sorgu çalıştırmayı deneyelim.