PostgreSQL için Azure Cosmos DB'deki düğümler ve tablolar

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

Düğümler

PostgreSQL için Azure Cosmos DB, PostgreSQL sunucularının (düğümler olarak adlandırılır) "paylaşılan hiçbir şey yok" mimarisinde birbirleriyle eşgüdüm sağlamasına olanak tanır. Bir kümedeki düğümler topluca daha fazla veri tutar ve tek bir sunucuda mümkün olandan daha fazla CPU çekirdeği kullanır. Mimari ayrıca kümeye daha fazla düğüm ekleyerek veritabanının ölçeklendirilmesini sağlar.

Koordinatör ve çalışanlar

Her kümenin bir koordinatör düğümü ve birden çok çalışanı vardır. Uygulamalar sorgularını ilgili çalışanlara aktaran ve sonuçlarını biriktiren koordinatör düğümüne gönderir.

PostgreSQL için Azure Cosmos DB, veritabanı yöneticisinin tabloları ve/veya şemaları dağıtarak farklı çalışan düğümlerinde farklı satırlar depolamasına olanak tanır. Dağıtılmış tablolar ve/veya şemalar, PostgreSQL için Azure Cosmos DB performansının anahtarıdır. Tabloların ve/veya şemaların dağıtılaamaması, bunları tamamen koordinatör düğümünde bırakır ve makineler arası paralellikten yararlanamaz.

Dağıtılmış tablolardaki her sorgu için, koordinatör bunu tek bir çalışan düğümüne yönlendirir veya gerekli verilerin tek bir düğümde mi yoksa birden çok düğümde mi bulunduğuna bağlı olarak birkaç farklı düğümde paralelleştirir. Şema tabanlı parçalama ile koordinatör sorguları doğrudan şemayı barındıran düğüme yönlendirir. Hem şema tabanlı parçalama hem de satır tabanlı parçalamada, koordinatör meta veri tablolarına danışarak ne yapacağına karar verir. Bu tablolar çalışan düğümlerinin DNS adlarını ve sistem durumunu ve düğümler arasında veri dağıtımını izler.

Tablo türleri

Kümede her biri farklı düğümlerde depolanan ve farklı amaçlar için kullanılan beş tür tablo vardır.

Tür 1: Dağıtılmış tablolar

İlk tür ve en yaygın olanı dağıtılmış tablolardır. SQL deyimleri için normal tablolar gibi görünürler, ancak çalışan düğümleri arasında yatay olarak bölümlenmişlerdir. Bunun anlamı, tablonun satırlarının parçalar olarak adlandırılan parça tablolarında farklı düğümlerde depolanmasıdır.

PostgreSQL için Azure Cosmos DB, küme genelinde yalnızca SQL değil DDL deyimlerini de çalıştırır. Dağıtılmış bir tablonun şemasını değiştirerek çalışanlar arasında tablonun tüm parçalarını güncelleştirin.

Dağıtım sütunu

PostgreSQL için Azure Cosmos DB, parçalara satır atamak için algoritmik parçalama kullanır. Atama, dağıtım sütunu olarak adlandırılan tablo sütununun değerine göre belirlenimci olarak yapılır. Küme yöneticisi bir tablo dağıtırken bu sütunu belirlemelidir. Doğru seçimi yapmak, performans ve işlevsellik açısından önemlidir.

Tür 2: Başvuru tabloları

Başvuru tablosu, tüm içeriği tek bir parçaya odaklanmış dağıtılmış bir tablo türüdür. Parça her çalışana çoğaltılır. Herhangi bir çalışandaki sorgular, başka bir düğümden satır isteme ağ yükü olmadan başvuru bilgilerine yerel olarak erişebilir. Satır başına ayrı parçaları ayırt etmeye gerek olmadığından başvuru tablolarında dağıtım sütunu yoktur.

Başvuru tabloları genellikle küçüktür ve herhangi bir çalışan düğümünde çalıştırılan sorgularla ilgili verileri depolamak için kullanılır. Sipariş durumları veya ürün kategorileri gibi numaralandırılmış değerler buna örnek olarak verilmiştir.

Tür 3: Yerel tablolar

PostgreSQL için Azure Cosmos DB kullandığınızda, bağlandığınız koordinatör düğümü normal bir PostgreSQL veritabanıdır. Koordinatörde sıradan tablolar oluşturabilir ve bunları parçalanmamayı seçebilirsiniz.

Yerel tablolar için iyi bir aday, birleştirme sorgularına katılmayan küçük yönetim tabloları olabilir. Uygulama oturum açma ve kimlik doğrulaması için bir users tablo buna örnek olarak verilmiştir.

Tür 4: Yerel yönetilen tablolar

PostgreSQL için Azure Cosmos DB, yerel tablo ile başvuru tablosu arasında yabancı anahtar başvurusu varsa meta veriye otomatik olarak yerel tablolar ekleyebilir. Ayrıca yerel olarak yönetilen tablolar, normal yerel tablolarda create_reference_table citus_add_local_table_to_metadata işlevi yürütülerek el ile oluşturulabilir. Meta verilerde bulunan tablolar yönetilen tablolar olarak kabul edilir ve herhangi bir düğümden sorgulanabilir, Citus yerel yönetilen tablodan veri almak için koordinatöre yönlendirmeyi bilir. Bu tür tablolar citus_tables görünümde yerel olarak görüntülenir.

Tür 5: Şema tabloları

Citus 12.0'da kullanıma sunulan şema tabanlı parçalama ile, dağıtılmış şemalar tek tek ortak konum gruplarıyla otomatik olarak ilişkilendirilir. Bu şemalarda oluşturulan tablolar, parça anahtarı olmadan otomatik olarak birlikte bulunan dağıtılmış tablolara dönüştürülür. Bu tür tablolar şema tabloları olarak kabul edilir ve citus_tables görünümde şema olarak görüntülenir.

Parçalar

Önceki bölümde dağıtılmış tabloların çalışan düğümlerinde parça olarak nasıl depolandığı açıklanmıştır. Bu bölümde daha fazla teknik ayrıntı ele alınmaktadır.

pg_dist_shard Koordinatördeki meta veri tablosu, sistemdeki her dağıtılmış tablonun her parçası için bir satır içerir. Satır, bir karma alanda (shardminvalue, shardmaxvalue) tamsayı aralığına sahip bir parça kimliğiyle eşleşir.

SELECT * from pg_dist_shard;
 logicalrelid  | shardid | shardstorage | shardminvalue | shardmaxvalue
---------------+---------+--------------+---------------+---------------
 github_events |  102026 | t            | 268435456     | 402653183
 github_events |  102027 | t            | 402653184     | 536870911
 github_events |  102028 | t            | 536870912     | 671088639
 github_events |  102029 | t            | 671088640     | 805306367
 (4 rows)

Koordinatör düğümü hangi parçanın satırını barındırdığını belirlemek istiyorsa, satırdaki github_eventsdağıtım sütununun değerini karma olarak oluşturur. Ardından düğüm, hangi parça aralığının karma değeri içerdiğini denetler. Aralıklar, karma işlevinin görüntüsünün kendi kopuk birleşimleri olması için tanımlanır.

Parça yerleşimleri

Parça 102027 söz konusu satırla ilişkili olduğunu varsayalım. Satır, çalışanlardan birinde adlı github_events_102027 bir tabloda okunur veya yazılır. Hangi işçi? Bu, tamamen meta veri tabloları tarafından belirlenir. Parçanın çalışanla eşlemesi parça yerleşimi olarak bilinir.

Koordinatör düğümü sorguları gibi github_events_102027 belirli tablolara başvuran parçalara yeniden yazar ve bu parçaları uygun çalışanlarda çalıştırır. Aşağıda, parça kimliği 102027 tutan düğümü bulmak için arka planda çalıştırılacak bir sorgu örneği verilmiştır.

SELECT
    shardid,
    node.nodename,
    node.nodeport
FROM pg_dist_placement placement
JOIN pg_dist_node node
  ON placement.groupid = node.groupid
 AND node.noderole = 'primary'::noderole
WHERE shardid = 102027;
┌─────────┬───────────┬──────────┐
│ shardid │ nodename  │ nodeport │
├─────────┼───────────┼──────────┤
│  102027 │ localhost │     5433 │
└─────────┴───────────┴──────────┘

Sonraki adımlar