Azure Cosmos DB'de bölümleme ve yatay ölçeklendirme

Uygulama hedefı: MongoDB için SQL API Cassandra API gremlin API tablo API'si Azure Cosmos DB API 'si

Azure Cosmos DB, bölümleme kullanarak bir veritabanındaki kapsayıcıları tek tek ölçeklendirerek uygulamanın performans ihtiyaçlarını karşılar. Bölümlemede, kapsayıcıdaki öğeler mantıksal bölümler olarak adlandırılan ayrı alt kümelere ayrılır. Mantıksal bölümler, kapsayıcının her bir öğesiyle ilişkili bölüm anahtarının değerine göre oluşturulur. Mantıksal bölümdeki tüm öğeler aynı bölüm anahtarı değerine sahip olur.

Örneğin, kapsayıcı öğeleri tutar. Her öğenin özelliği için benzersiz bir değeri UserID vardır. Kapsayıcıdaki öğeler için bölüm anahtarı olarak görev yaptı ve 1.000 benzersiz değer varsa, kapsayıcı için UserID UserID 1.000 mantıksal bölüm oluşturulur.

Öğenin mantıksal bölümünü belirleyen bölüm anahtarına ek olarak, kapsayıcı içindeki her öğenin bir öğe kimliği (mantıksal bölüm içinde benzersiz) vardır. Bölüm anahtarını ve öğe kimliğini birleştirerek öğenin dizinini oluşturur ve bu da öğeyi benzersiz olarak tanımlar. Bölüm anahtarı seçmek, uygulamanın performansını etkileyecek önemli bir karardır.

Bu makalede mantıksal ve fiziksel bölümler arasındaki ilişki açıklanmıştır. Ayrıca, bölümleme için en iyi yöntemleri ele alır ve Azure Cosmos DB'de yatay ölçeklendirmenin nasıl çalıştığını ayrıntılı bir şekilde ele alır. Bölüm anahtarınızı seçmek için bu iç ayrıntıları anlamak gerekli değildir, ancak Azure Cosmos DB'nin nasıl çalıştığını net bir şekilde anlamanız için bunları ele Cosmos.

Mantıksal bölümler

Mantıksal bölüm, aynı bölüm anahtarına sahip öğelerden oluşur. Örneğin, besin besinleri hakkında veri içeren bir kapsayıcıda tüm öğeler bir özellik foodGroup içerir. Kapsayıcı için foodGroup bölüm anahtarı olarak kullanabilirsiniz. , ve gibi için belirli değerlere foodGroup sahip öğe grupları ayrı mantıksal bölümler Beef Products Baked Products Sausages and Luncheon Meats oluşturur.

Mantıksal bölüm, veritabanı işlemlerinin kapsamını da tanımlar. Anlık görüntü yalıtımına sahip bir işlem kullanarak mantıksal bölüm içindeki öğeleri güncelleştirebilirsiniz. Kapsayıcıya yeni öğeler ekleniyorsa, sistem tarafından saydam bir şekilde yeni mantıksal bölümler oluşturulur. Temel alınan veriler silindiğinde mantıksal bölümü silme konusunda endişelenmeniz gerekmemelidir.

Kapsayıcınız içinde mantıksal bölüm sayısıyla ilgili bir sınır yoktur. Her mantıksal bölüm en fazla 20 GB veri depolar. İyi bölüm anahtarı seçimlerinin çok çeşitli olası değerleri vardır. Örneğin, tüm öğelerin bir özellik içerdiği bir kapsayıcıda, mantıksal bölümdeki veriler foodGroup Beef Products 20 GB'a kadar büyüyebiliyor. Çok çeşitli olası değerlere sahip bir bölüm anahtarı seçmek, kapsayıcının ölçeklendirilemelerini sağlar.

Fiziksel bölümler

Kapsayıcı, verileri ve aktarım hızını fiziksel bölümler arasında dağıtarak ölçeklendirebilirsiniz. Dahili olarak, bir veya daha fazla mantıksal bölüm tek bir fiziksel bölüme eşlenmiş olur. Genellikle daha küçük kapsayıcılar birçok mantıksal bölüme sahip olur ancak tek bir fiziksel bölüm gerektirir. Mantıksal bölümlerin aksine, fiziksel bölümler sistemin bir iç uygulamasıdır ve tamamen Azure Cosmos DB tarafından yönetilir.

Kapsayıcınız içinde fiziksel bölüm sayısı aşağıdakilere bağlıdır:

  • Sağlanan aktarım hızı sayısı (her fiziksel bölüm, saniye başına 10.000 istek birimine kadar aktarım hızı sağlar). Fiziksel bölümler için 10.000 RU/sn sınırı, her mantıksal bölüm yalnızca bir fiziksel bölümle eşlenmiş olduğu için mantıksal bölümlerin de 10.000 RU/sn sınırına sahip olduğunu ifade eder.

  • Toplam veri depolama alanı (her fiziksel bölüm en fazla 50 GB veri depolar).

Not

Fiziksel bölümler sistemin iç uygulamasıdır ve tamamen Azure Cosmos DB tarafından yönetilir. Çözümlerinizi geliştirerek fiziksel bölümlere odaklanmayın çünkü bunları kontrol altında bulunduramazsiniz. Bunun yerine bölüm anahtarlarınızı kullanın. Aktarım hızı tüketimini mantıksal bölümler arasında eşit olarak dağıtan bir bölüm anahtarı seçerseniz, fiziksel bölümler arasında aktarım hızı tüketiminin dengelenmiş olmasını sağlar.

Kapsayıcıdaki toplam fiziksel bölüm sayısıyla ilgili bir sınır yoktur. Sağlanan aktarım hızınız veya veri boyutunuz arttıkça, Azure Cosmos DB mevcut olanları bölerek otomatik olarak yeni fiziksel bölümler oluşturur. Fiziksel bölüm bölmeleri, uygulamanın kullanılabilirliğini etkilemez. Fiziksel bölüm bölündikten sonra tek bir mantıksal bölüm içindeki tüm veriler aynı fiziksel bölümde depolanır. Fiziksel bölüm bölme yalnızca mantıksal bölümlerin fiziksel bölümlere yeni bir eşlemesini oluşturur.

Kapsayıcı için sağlanan aktarım hızı, fiziksel bölümler arasında eşit olarak bölündü. İstekleri eşit dağıtmayan bir bölüm anahtarı tasarımı, "sık erişimli" hale gelen bölümlerin küçük bir alt kümesine yönlendirilen çok fazla istekle sonuçlansa da olabilir. Etkin bölümler sağlanan aktarım hızının verimsiz kullanımına neden olur ve bu da hız sınırlaması ve daha yüksek maliyetlere neden olabilir.

Kapsayıcının ölçümler dikey penceresindeki Depolama bölümünde kapsayıcının fiziksel bölümlerini Azure portal:

Fiziksel bölüm sayısını görüntüleme

Yukarıdaki ekran görüntüsünde, bölüm anahtarı olarak /foodGroup bir kapsayıcı vardır. Grafikte yer alan üç çubukların her biri fiziksel bir bölümü temsil eder. Görüntüde bölüm anahtarı aralığı fiziksel bölümle aynıdır. Seçilen fiziksel bölüm en önemli 3 mantıksal bölümü içerir: Beef Products , Vegetable and Vegetable Products ve Soups, Sauces, and Gravies .

Saniye başına 18.000 istek birimi (RU/sn) aktarım hızı sağlarsanız, üç fiziksel bölümün her biri sağlanan toplam aktarım hızının 1/3'lerini kullanabilir. Seçilen fiziksel bölümde mantıksal bölüm anahtarları , ve birlikte fiziksel bölümün Beef Products Vegetable and Vegetable Products sağlanan Soups, Sauces, and Gravies 6.000 RU/sn'lerini kullanabilir. Sağlanan aktarım hızı kapsayıcının fiziksel bölümlerine eşit olarak bölündüklerinden, doğru mantıksal bölüm anahtarını seçerek aktarım hızı tüketimini eşit dağıtan bir bölüm anahtarı seçmek önemlidir.

Mantıksal bölümleri yönetme

Azure Cosmos DB, kapsayıcının ölçeklenebilirlik ve performans ihtiyaçlarını verimli bir şekilde karşılamak için mantıksal bölümlerin fiziksel bölümlere yerleştirilmesini şeffaf ve otomatik olarak yönetir. Bir uygulamanın aktarım hızı ve depolama gereksinimleri artarak Azure Cosmos DB, yükü daha fazla sayıda fiziksel bölüme otomatik olarak yaymak için mantıksal bölümleri taşır. Fiziksel bölümler hakkında daha fazla bilgi öğrenebilirsiniz.

Azure Cosmos DB, mantıksal bölümleri fiziksel bölümlere yaymak için karma tabanlı bölümleme kullanır. Azure Cosmos DB, bir öğenin bölüm anahtarı değerini karma olarak oluşturur. Karma sonuç, fiziksel bölümü belirler. Ardından Azure Cosmos DB, bölüm anahtarı karmalarının anahtar alanı fiziksel bölümler arasında aynı şekilde ayırır.

İşlemlere (saklı yordamlarda veya tetikleyicilerde) yalnızca tek bir mantıksal bölümdeki öğelere izin verilir.

Çoğaltma kümeleri

Her fiziksel bölüm, çoğaltma kümesi olarak da adlandırılan bir dizi çoğaltmadan oluşur. Her çoğaltma kümesi, veritabanı altyapısının bir örneğini barındırr. Çoğaltma kümesi fiziksel bölümde depolanan verilerin dayanıklı, yüksek oranda kullanılabilir ve tutarlı olmasına neden olur. Fiziksel bölümü yapan her çoğaltma, bölümün depolama kotasını devralınır. Fiziksel bölümün tüm çoğaltmaları, fiziksel bölüme ayrılan aktarım hızını topluca destekler. Azure Cosmos DB çoğaltma kümelerini otomatik olarak yönetir.

Genellikle, daha küçük kapsayıcılar yalnızca tek bir fiziksel bölüm gerektirir, ancak yine de en az 4 çoğaltmaya sahip olur.

Aşağıdaki görüntüde mantıksal bölümlerin genel olarak dağıtılan fiziksel bölümlere nasıl eşlenmiş olduğu gösterir. Görüntüde ayarlanmış bölüm, birden çok bölgede aynı mantıksal bölüm anahtarlarını yöneten bir grup fiziksel bölüme başvurur:

Azure veritabanı bölümleme Cosmos gösteren görüntü

Bölüm anahtarını seçme

Bölüm anahtarının iki bileşeni vardır: bölüm anahtarı yolu ve bölüm anahtarı değeri. Örneğin, bölüm anahtarı olarak "userId" öğesini seçerseniz { "userId" : "Andrew", "worksFor": "Microsoft" } öğesini göz önünde bulundurabilirsiniz; aşağıdaki iki bölüm anahtarı bileşeni vardır:

  • Bölüm anahtarı yolu (örneğin: "/userId"). Bölüm anahtarı yolu alfasayısal ve alt çizgi (_) karakterlerini kabul eder. Ayrıca, standart yol notasyonu(/) kullanarak iç içe nesneleri de kullanabilirsiniz.

  • Bölüm anahtarı değeri (örneğin: "Andrew"). Bölüm anahtarı değeri dize veya sayısal türlerden olabilir.

Bölüm anahtarının aktarım hızı, depolama alanı ve uzunluğuyla ilgili sınırlar hakkında bilgi edinmek için Azure Cosmos DB hizmet kotaları makalesine bakın.

Bölüm anahtarınızı seçmek, Azure Cosmos DB'de basit ama önemli bir tasarım seçimidir. Bölüm anahtarınızı seçerek yerinde değiştirmek mümkün değildir. Bölüm anahtarınızı değiştirmeniz gerekirse, verilerinizi yeni istediğiniz bölüm anahtarıyla yeni bir kapsayıcıya taşımanız gerekir.

Tüm kapsayıcılar için bölüm anahtarınız şu şekildedir:

  • Değişmeden bir değeri olan bir özellik olabilir. Bir özellik bölüm anahtarınız ise, bu özelliğin değerini güncelleştiresiniz.

  • Yüksek bir kardinaliteye sahip olma. Başka bir deyişle özelliğin çok çeşitli olası değerlere sahip olması gerekir.

  • İstek birimi (RU) tüketimini ve veri depolamayı tüm mantıksal bölümlere doğru yayma. Bu, fiziksel bölümleriniz arasında RU tüketimini ve depolama dağıtımını bile sağlar.

Azure Cosmos DB'de çok öğeli ACID işlemlerine ihtiyacınız varsa saklı yordamları veya tetikleyicileri kullanabilirsiniz. Tüm JavaScript tabanlı saklı yordamların ve tetikleyicilerin kapsamı tek bir mantıksal bölüme ayrılmıştır.

Yoğun okumalı kapsayıcılar için bölüm anahtarları

Çoğu kapsayıcı için bölüm anahtarı seçmeye dikkat etmek için yukarıdaki ölçütlere dikkat edin. Ancak yoğun okuma kullanılan büyük kapsayıcılar için sorgularınıza filtre olarak sık görünen bir bölüm anahtarı seçmeniz iyi olabilir. Sorgular yalnızca ilgili fiziksel bölümlere, bölüm anahtarını filtreye dahil etmek için verimli bir şekilde yönlendirebilirsiniz.

İş yüklerinin isteklerinin çoğu sorgu ise ve sorgularının çoğu aynı özellikte eşitlik filtresine sahipse, bu özellik iyi bir bölüm anahtarı seçimi olabilir. Örneğin, sık sık üzerinde filtrelenmiş bir sorgu çalıştırıyorsanız, bölüm anahtarı olarak seçmek bölümler arası UserID UserID sorgu sayısını azaltır.

Ancak kapsayıcınız küçükse bölümler arası sorguların performans etkisi konusunda endişelenmeniz gereken yeterli fiziksel bölüme sahip olmadığınız da olabilir. Azure Cosmos DB'Cosmos çoğu küçük kapsayıcı için yalnızca bir veya iki fiziksel bölüm gerekir.

Kapsayıcınız birkaç fiziksel bölüme kadar büyüyecekse bölümler arası sorguları en aza indiren bir bölüm anahtarı seçmeyi tercih edin. Aşağıdakilerden biri doğru olduğunda kapsayıcınız için birden fazla fiziksel bölüm gerekir:

  • Kapsayıcınıza 30.000'den fazla RU sağlandı

  • Kapsayıcınız 100 GB'ın üzerinde veri depolar

Bölüm anahtarı olarak öğe kimliğini kullanma

Kapsayıcınız çok çeşitli olası değerlere sahip bir özellik içerirse, büyük olasılıkla harika bir bölüm anahtarı seçimidir. Böyle bir özelliğin olası örneklerinden biri öğe kimliğidir. Okuma yoğun küçük kapsayıcılar veya herhangi bir boyuttaki yoğun yazma kapsayıcıları için öğe kimliği, bölüm anahtarı için doğal olarak harika bir seçimdir.

Sistem özellik öğesi kimliği, kapsayıcınız içinde her öğede mevcuttur. Öğenizin mantıksal kimliğini temsil eden başka özellikleriniz olabilir. Çoğu durumda, bunlar öğe kimliğiyle aynı nedenlerle harika bölüm anahtarı seçenekleridir.

Öğe kimliği, aşağıdaki nedenlerden dolayı harika bir bölüm anahtarı seçimidir:

  • Çok çeşitli olası değerler (öğe başına bir benzersiz öğe kimliği) vardır.
  • Öğe başına benzersiz bir öğe kimliği olduğundan, öğe kimliği RU tüketimini ve veri depolama alanını dengeleme konusunda harika bir iş yapar.
  • Öğe kimliğini biliyorsanız her zaman bir öğenin bölüm anahtarını bilebilirsiniz, çünkü verimli nokta okumaları yapabilirsiniz.

Bölüm anahtarı olarak öğe kimliğini seçme konusunda dikkat etmek gereken bazı şeyler şunlardır:

  • Öğe kimliği bölüm anahtarı ise kapsayıcının tamamına benzersiz bir tanımlayıcı haline gelecektir. Yinelenen öğe kimliğine sahip öğeleriniz olmayacaktır.
  • Çok fazla fiziksel bölüme sahip okuma açısından yoğun bir kapsayıcınız varsa,öğe kimliğine sahip eşitlik filtresine sahip sorgular daha verimli olur.
  • Saklı yordamları veya tetikleyicileri birden çok mantıksal bölümde çalıştıramayrı.

Sonraki adımlar