PostgreSQL için Azure Cosmos DB'de ölçeklendirmeye yönelik temel kavramlar

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Cosmos DB (PostgreSQL'e citus veritabanı uzantısıyla desteklenir)

Yeni uygulama oluşturma adımlarını araştırmadan önce, ilgili terimlere ve kavramlara hızlı bir genel bakış sağlamak yararlı olacaktır.

Mimariye genel bakış

PostgreSQL için Azure Cosmos DB, tabloları ve/veya şemaları bir kümedeki birden çok makineye dağıtma ve düz PostgreSQL'i sorguladığınız gibi saydam bir şekilde sorgulama olanağı sunar:

Diagram of the coordinator node sharding a table onto worker nodes.

PostgreSQL için Azure Cosmos DB mimarisinde birden çok düğüm türü vardır:

  • Koordinatör düğümü dağıtılmış tablo meta verilerini depolar ve dağıtılmış planlamadan sorumludur.
  • Buna karşılık, çalışan düğümleri gerçek verileri, meta verileri depolar ve hesaplamayı yapar.
  • Hem koordinatör hem de çalışanlar, citus uzantının yüklendiği düz PostgreSQL veritabanlarıdır.

Yukarıdaki diyagramda olduğu gibi campaigns normal bir PostgreSQL tablosunu dağıtmak için adlı create_distributed_table()bir komut çalıştırın. Bu komutu çalıştırdığınızda PostgreSQL için Azure Cosmos DB, çalışan düğümleri arasında tablo için saydam olarak parçalar oluşturur. Diyagramda parçalar mavi kutular olarak gösterilir.

Normal bir PostgreSQL şeması dağıtmak için komutunu çalıştırırsınız citus_schema_distribute() . Bu komutu çalıştırdığınızda PostgreSQL için Azure Cosmos DB, bu şemalardaki tabloları saydam bir şekilde küme düğümleri arasında birim olarak taşınabilen tek parçalı birlikte bulunan tablolara dönüştürür.

Dekont

Çalışan düğümü olmayan bir kümede, dağıtılmış tablo parçaları koordinatör düğümünde yer alır.

Parçalar, verilerinizin dilimlerini barındıran düz (ancak özel olarak adlandırılmış) PostgreSQL tablolarıdır. Örneğimizde, tarafından company_iddağıttığımız campaigns için parçalar, farklı şirketlerin kampanyalarının farklı parçalara atandığı kampanyaları barındırıyor.

Dağıtım sütunu (parça anahtarı olarak da bilinir)

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.

SELECT create_distributed_table(
	'table_name',
	'distribution_column');

Yukarıdaki ikinci bağımsız değişken, tablodan bir sütunu dağıtım sütunu olarak seçer. Yerel PostgreSQL türüne (tamsayı ve metin en yaygın olan) sahip herhangi bir sütun olabilir. Dağıtım sütununun değeri, hangi satırların hangi parçalara gireceğini belirler ve bu nedenle dağıtım sütunu parça anahtarı olarak da adlandırılır.

PostgreSQL için Azure Cosmos DB, parça anahtarı kullanımına göre sorguların nasıl çalıştırılmaya karar verir:

Sorgu şunları içerir: Çalıştığı yer
yalnızca bir parça anahtarı parçasının bulunduğu çalışan düğümünde
birden çok parça anahtarı birden çok düğüm arasında paralelleştirilmiş

Parça anahtarı seçimi, uygulamalarınızın performansını ve ölçeklenebilirliğini belirler.

  • Parça anahtarları başına eşit olmayan veri dağıtımı (veri dengesizliği olarak da bilinir) performans için en uygun değildir. Örneğin, tek bir değerin verilerin %50'sini temsil ettiği bir sütun seçmeyin.
  • Düşük kardinaliteye sahip parça anahtarları ölçeklenebilirliği etkileyebilir. Yalnızca farklı anahtar değerleri olduğu kadar çok parça kullanabilirsiniz. Yüzlerce ile binler içinde kardinaliteye sahip bir anahtar seçin.
  • Farklı parça anahtarlarıyla iki büyük tabloyu birleştirmek yavaş olabilir. Büyük tablolar arasında ortak bir parça anahtarı seçin. Birlikte bulundurma hakkında daha fazla bilgi edinin.

Birlikte konumlandırma

Parça anahtarıyla yakından ilgili bir diğer kavram da birlikte bulundurmadır. Aynı dağıtım sütunu değerleriyle parçalanmış tablolar birlikte bulunur- Birlikte bulunan tabloların parçaları aynı çalışanlarda birlikte depolanır.

Aşağıda aynı anahtarla parçalanmış iki tablo vardır: site_id. Birlikte konumlandırılmışlar.

Diagram of tables http_request and http_request_1min colocated by site_id.

PostgreSQL için Azure Cosmos DB, her iki tabloda da eşleşen site_id değere sahip satırların aynı çalışan düğümünde depolanmasını sağlar. Her iki tablo için de ile site_id=1 satırların çalışan 1'de depolandığını görebilirsiniz. Benzer şekilde diğer site kimlikleri için de.

Birlikte bulundurma, bu tablolardaki JOIN'leri iyileştirmeye yardımcı olur. üzerinde iki tabloyu site_idbirleştirirseniz PostgreSQL için Azure Cosmos DB, verileri düğümler arasında karıştırmadan birleştirmeyi çalışan düğümlerinde yerel olarak gerçekleştirebilir.

Dağıtılmış şema içindeki tablolar her zaman birbiriyle birlikte bulunur.

Sonraki adımlar