Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:
PostgreSQL için Azure Cosmos DB (Citus veritabanı uzantısı ile PostgreSQL için güçlendirilmiştir)
Kiracı Kimliği parça anahtarı olarak
Kiracı kimliği, iş yükünün kökündeki sütun veya veri modelinizdeki hiyerarşinin üst kısmıdır. Örneğin, bu SaaS e-ticaret şemasında mağaza kimliği olacaktır:
Bu veri modeli Shopify gibi bir işletme için tipik olacaktır. Her mağazanın kendi verileriyle etkileşime geçtiği birden çok çevrimiçi mağazanın sitelerini barındırıyor.
- Bu veri modelinin bir dizi tablosu vardır: mağazalar, ürünler, siparişler, satır öğeleri ve ülkeler.
- Mağazalar tablosu hiyerarşinin en üstünde yer alır. Ürünlerin, siparişlerin ve satır öğelerinin tümü depolarla ilişkilendirilir, bu nedenle hiyerarşide daha düşüktür.
- Ülkeler tablosu tek tek mağazalarla ilgili değildir, mağazalar arasında ortak bir öğedir.
Bu örnekte, store_id
hiyerarşinin en üstünde yer alan , kiracının tanımlayıcısıdır. Doğru parça anahtarı. Parça anahtarı olarak store_id
seçmek, tek bir çalışanda tek bir mağaza için tüm tabloların verilerinin birleştirilmesini sağlar.
Tabloları mağazaya göre birlikte konumlandırmanın avantajları vardır:
- SQL kapsamı, yabancı anahtarlar ve JOIN'ler gibi özellikleri içerir. Tek bir kiracının işlemleri, her kiracının bulunduğu tek bir çalışan düğümünde yerelleştirilir.
- Tek basamaklı milisaniyelik performans elde eder. Tek bir kiracının sorguları paralelleştirilmek yerine tek bir düğüme yönlendirilir ve bu, ağ atlamalarını optimize etmeye ve işlem/belleği ölçeklendirmeye yardımcı olur.
- Ölçeklendirilir. Kiracı sayısı arttıkça, yeni düğümler ekleyebilir, kiracıları bu düğümlere yeniden dengeleyebilir veya büyük kiracıları kendi düğümlerinde izole edebilirsiniz. Kiracı yalıtımı, ayrılmış kaynaklar sağlamanıza olanak tanır.
Çok kiracılı uygulamalar için en uygun veri modeli
Bu örnekte, mağazaya özgü tabloları mağaza kimliğine göre dağıtmalı ve countries
'yi bir başvuru tablosu yapmalıyız.
Kiracıya özgü tabloların kiracı kimliğine sahip olduğuna ve dağıtıldığına dikkat edin. Örneğimizde mağazalar, ürünler ve line_items dağıtılır. Tabloların geri kalanı başvuru tablolarıdır. Örneğimizde ülkeler tablosu bir başvuru tablosudur.
-- Distribute large tables by the tenant ID
SELECT create_distributed_table('stores', 'store_id');
SELECT create_distributed_table('products', 'store_id', colocate_with => 'stores');
-- etc for the rest of the tenant tables...
-- Then, make "countries" a reference table, with a synchronized copy of the
-- table maintained on every worker node
SELECT create_reference_table('countries');
Büyük tabloların tümü kiracı kimliğine sahip olmalıdır.
- Mevcut çok kiracılı bir uygulamayı PostgreSQL için Azure Cosmos DB'ye geçiriyorsanız, biraz normalleştirme yapmanız ve eksikse kiracı kimliği sütununu büyük tablolara eklemeniz ve sonra da sütunun eksik değerlerini doldurmanız gerekebilir.
- PostgreSQL için Azure Cosmos DB'de yeni uygulamalar için kiracı kimliğinin kiracıya özgü tüm tablolarda bulunduğundan emin olun.
Dağıtılmış tablolarda birincil, benzersiz ve yabancı anahtar kısıtlamalarına bileşik anahtar biçiminde kiracı kimliğini eklediğinizden emin olun. Örneğin, bir tablonun birincil anahtarı id
varsa, bunu bileşik anahtara (tenant_id,id)
dönüştürün.
Başvuru tablolarının anahtarlarını değiştirmeniz gerekmez.
En iyi performans için dikkat edilmesi gerekenler
Kiracı kimliğine göre filtrelenen dağıtılmış sorgular, çok kiracılı uygulamalarda en verimli şekilde çalışır. Sorgularınızın kapsamının her zaman tek bir kiracı olarak belirlenmiş olduğundan emin olun.
SELECT *
FROM orders
WHERE order_id = 123
AND store_id = 42; -- ← tenant ID filter
Özgün filtre koşulları istediğiniz satırları kesin olarak tanımlasa bile kiracı kimliği filtresinin eklenmesi gerekir. Kiracı kimliği filtresi, yedekli gibi görünse de PostgreSQL için Azure Cosmos DB'ye sorguyu tek bir çalışan düğümüne nasıl yönlendireceklerini bildirir.
Benzer şekilde, iki dağıtılmış tabloyu birleştirirken, her iki tablonun da kapsamının tek bir kiracı olarak ayarlandığından emin olun. Kapsam belirleme, birleştirme koşullarının kiracı kimliğini içerdiğinden emin olunarak yapılabilir.
SELECT sum(l.quantity)
FROM line_items l
INNER JOIN products p
ON l.product_id = p.product_id
AND l.store_id = p.store_id -- ← tenant ID in join
WHERE p.name='Awesome Wool Pants'
AND l.store_id='8c69aa0d-3f13-4440-86ca-443566c1fc75';
-- ↑ tenant ID filter
Sorgulara kiracı kimliği eklemeyi kolaylaştıran çeşitli popüler uygulama çerçeveleri için yardımcı kitaplıklar vardır. Yönergeler şunlardır:
Sonraki adımlar
Şimdi ölçeklenebilir uygulamalar için veri modellemeyi incelemeyi tamamladık. Sonraki adım, veritabanını seçtiğiniz programlama diliyle bağlamak ve sorgulamaktır.