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

ŞUNLAR IÇIN GEÇERLIDIR: Nosql MongoDB Cassandra Gremlin Tablo

Azure Cosmos DB, uygulamanızın performans gereksinimlerini karşılamak üzere bir veritabanındaki kapsayıcıları tek tek ölçeklendirmek için bölümleme kullanır. 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, bir kapsayıcıdaki her öğeyle 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 sahiptir.

Örneğin, kapsayıcı öğeleri barındırır. Her öğenin özelliği için UserID benzersiz bir değeri vardır. UserID Kapsayıcıdaki öğeler için bölüm anahtarı olarak hizmet verirse ve 1.000 benzersiz UserID değer varsa, kapsayıcı için 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ıdaki her öğenin bir öğe kimliği (mantıksal bölüm içinde benzersiz) vardır. Bölüm anahtarı ve öğe kimliği birleştirilerek öğenin dizini oluşturulur ve bu dizin öğeyi benzersiz olarak tanımlar. Bölüm anahtarı seçmek , uygulamanızın performansını etkileyecek önemli bir karardır.

Bu makalede, mantıksal ve fiziksel bölümler arasındaki ilişki açıklanmaktadı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ığına ilişkin ayrıntılı bir görünüm sağlar. Bölüm anahtarınızı seçmek için bu iç ayrıntıları anlamanız gerekmez, ancak Azure Cosmos DB'nin nasıl çalıştığı konusunda netlik elde edebilmeniz için bunları ele aldık.

Mantıksal bölümler

Mantıksal bölüm, aynı bölüm anahtarına sahip bir dizi öğeden oluşur. Örneğin, gıda beslenmesi hakkındaki verileri içeren bir kapsayıcıda, tüm öğeler bir foodGroup özellik içerir. Kapsayıcı için bölüm anahtarı olarak kullanabilirsiniz foodGroup . için foodGroup, ve gibi Beef ProductsBaked ProductsSausages and Luncheon Meatsbelirli değerleri olan öğe grupları ayrı mantıksal bölümler oluşturur.

Mantıksal bölüm ayrıca 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 eklendiğinde, sistem tarafından yeni mantıksal bölümler saydam bir şekilde oluşturulur. Temel alınan veriler silindiğinde mantıksal bölümü silme konusunda endişelenmeniz gerekmez.

Kapsayıcınızdaki 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 depolayabilir. İyi bölüm anahtarı seçimleri çok çeşitli olası değerlere sahiptir. Örneğin, tüm öğelerin bir özellik içerdiği bir foodGroup kapsayıcıda, mantıksal bölüm içindeki Beef Products veriler 20 GB'a kadar büyüyebilir. Çok çeşitli olası değerlere sahip bir bölüm anahtarı seçmek, kapsayıcının ölçeklendirilebilmesini sağlar.

Mantıksal bölümün boyutunun 20 GB'a yaklaşmakta olup olmadığını izlemek için Azure İzleyici Uyarılarını kullanabilirsiniz.

Fiziksel bölümler

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

Kapsayıcınızdaki fiziksel bölümlerin sayısı aşağıdakilere bağlıdır:

  • Sağlanan aktarım hızı miktarı (her fiziksel bölüm saniyede 10.000 istek birimine kadar aktarım hızı sağlayabilir). Fiziksel bölümler için 10.000 RU/sn sınırı, mantıksal bölümlerin de 10.000 RU/sn sınırına sahip olduğunu gösterir çünkü her mantıksal bölüm yalnızca bir fiziksel bölüme eşlenir.

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

Not

Fiziksel bölümler sistemin dahili bir uygulamasıdır ve tamamen Azure Cosmos DB tarafından yönetilir. Çözümlerinizi geliştirirken fiziksel bölümlere odaklanmayın çünkü bunları denetleyemezsiniz. Bunun yerine bölüm anahtarlarınıza odaklanı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 dengelendiğinden emin olursunuz.

Kapsayıcınızdaki fiziksel bölümlerin toplam 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 bölümleri bölerek otomatik olarak yeni fiziksel bölümler oluşturur. Fiziksel bölüm bölmeleri uygulamanızın kullanılabilirliğini etkilemez. Fiziksel bölüm bölündükten sonra, tek bir mantıksal bölümdeki tüm veriler aynı fiziksel bölümde depolanmaya devam eder. Fiziksel bölüm bölme işlemi, 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ünür. İstekleri eşit olarak dağıtmayan bir bölüm anahtarı tasarımı, "sık" hale gelen bölümlerin küçük bir alt kümesine çok fazla istek yönlendirilmesine neden olabilir. Sık erişimli bölümler sağlanan aktarım hızının verimsiz kullanılmasına neden olur ve bu da hız sınırlamasına ve daha yüksek maliyetlere neden olabilir.

Kapsayıcınızın fiziksel bölümlerini Azure portal Ölçümler dikey penceresinin Depolama bölümünde görebilirsiniz:

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

Yukarıdaki ekran görüntüsünde bölüm anahtarı bir kapsayıcıdadır /foodGroup . Grafikteki üç çubuğun 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 boyut mantıksal bölümü içerir: Beef Products, Vegetable and Vegetable Productsve Soups, Sauces, and Gravies.

Saniyede 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'lük bölümünü kullanabilir. Seçili fiziksel bölüm içinde mantıksal bölüm anahtarları Beef Products, Vegetable and Vegetable Productsve , ve Soups, Sauces, and Gravies fiziksel bölümün sağlanan 6.000 RU/sn değerini topluca kullanabilir. Sağlanan aktarım hızı kapsayıcınızın fiziksel bölümlerine eşit olarak bölündüğünden, doğru mantıksal bölüm anahtarını seçerek aktarım hızı tüketimini eşit olarak 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 gereksinimlerini verimli bir şekilde karşılamak için mantıksal bölümlerin fiziksel bölümlere yerleştirilmesini saydam ve otomatik olarak yönetir. Bir uygulamanın aktarım hızı ve depolama gereksinimleri arttıkça 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 edinebilirsiniz.

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 kullanır. Karma sonuç, fiziksel bölümü belirler. Ardından Azure Cosmos DB, bölüm anahtarı karmalarının anahtar alanını fiziksel bölümler arasında eşit olarak ayırır.

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

Çoğaltma kümeleri

Her fiziksel bölüm, çoğaltma kümesi olarak da adlandırılan bir çoğaltma kümesinden oluşur. Her çoğaltma, veritabanı altyapısının bir örneğini barındırıyor. Çoğaltma kümesi, fiziksel bölümde depolanan verileri dayanıklı, yüksek oranda kullanılabilir ve tutarlı hale getirir. Fiziksel bölümü oluşturan her çoğaltma, bölümün depolama kotasını devralı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şlendiği gösterilmektedir. Görüntüdeki bölüm kümesi, birden çok bölgede aynı mantıksal bölüm anahtarlarını yöneten bir fiziksel bölüm grubuna başvurur:

Azure Cosmos DB bölümlediğini 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" seçeneğini belirlerseniz bir öğeyi { "userId" : "Andrew", "worksFor": "Microsoft" } göz önünde bulundurun, iki bölüm anahtarı bileşeni şunlardır:

  • Bölüm anahtarı yolu (örneğin: "/userId"). Bölüm anahtarı yolu alfasayısal ve alt çizgi (_) karakterleri kabul eder. İç içe nesneleri, standart yol gösterimini(/) kullanarak da 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çtikten sonra yerinde değiştirmek mümkün değildir. Bölüm anahtarınızı değiştirmeniz gerekiyorsa, yeni istenen bölüm anahtarınızla verilerinizi yeni bir kapsayıcıya taşımanız gerekir. (Kapsayıcı kopyalama işleri bu işlemde yardımcı olur.)

Tüm kapsayıcılar için bölüm anahtarınız şunları yapmalıdır:

  • Değişmeyen bir değere sahip bir özellik olun. Bölüm anahtarınız bir özellikse, bu özelliğin değerini güncelleştiremezsiniz.

  • Yalnızca değerleri içermelidir String - veya sayılar, IEEE 754 binary64'e göre çift duyarlıklı sayıların sınırlarının dışında kalma olasılığı varsa ideal olarak değerine Stringdönüştürülmelidir. Json belirtimi, genel olarak bu sınırın dışındaki sayıları kullanmanın olası birlikte çalışabilirlik sorunları nedeniyle kötü bir uygulama olmasının nedenlerini ortaya çıkarır. Bu endişeler özellikle bölüm anahtarı sütunu için geçerlidir, çünkü sabittir ve daha sonra değiştirmek için veri geçişi gerektirir.

  • Yüksek bir kardinaliteye sahip olma. Başka bir deyişle, özelliği çok çeşitli olası değerlere sahip olmalıdır.

  • İstek birimi (RU) tüketimini ve veri depolamasını tüm mantıksal bölümlere eşit olarak yayma. Bu, fiziksel bölümlerinizde RU tüketimini ve depolama dağıtımlarını bile güvence altına alır.

Azure Cosmos DB'de çok öğeli ACID işlemlerine ihtiyacınız varsa saklı yordamları veya tetikleyicileri kullanmanız gerekir. Tüm JavaScript tabanlı saklı yordamların ve tetikleyicilerin kapsamı tek bir mantıksal bölüme göre belirlenir.

Not

Yalnızca bir fiziksel bölümünüz varsa, tüm sorgular aynı fiziksel bölümü hedeflediğinden bölüm anahtarının değeri ilgili olmayabilir.

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

Kapsayıcıların çoğu için, bölüm anahtarı seçerken dikkate almanız gereken tek ölçüt yukarıdaki ölçütdür. Ancak yoğun okuma içeren büyük kapsayıcılar için, sorgularınızda sık sık filtre olarak görünen bir bölüm anahtarı seçmek isteyebilirsiniz. Sorgular, bölüm anahtarı filtre koşuluna eklenerek yalnızca ilgili fiziksel bölümlere verimli bir şekilde yönlendirilebilir .

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

Öte yandan kapsayıcınız küçükse, bölümler arası sorguların performans üzerindeki etkisi konusunda endişelenmeniz için yeterli fiziksel bölüme sahip değilsinizdir. Azure Cosmos DB'deki çoğu küçük kapsayıcı yalnızca bir veya iki fiziksel bölüm gerektirir.

Kapsayıcınız birkaç fiziksel bölüme kadar uzayabiliyorsa, bölümler arası sorguları en aza indiren bir bölüm anahtarı seçtiğinizden emin olmanız gerekir. Aşağıdakilerden biri doğru olduğunda kapsayıcınız birkaçtan fazla fiziksel bölüm gerektirir:

  • Kapsayıcınızda 30.000'den fazla RU sağlanacaktır

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

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

Kapsayıcınızın çok çeşitli olası değerlere sahip bir özelliği varsa, 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. Her boyuttaki küçük yoğun okuma içeren kapsayıcılar veya yoğun yazma içeren kapsayıcılar için öğe kimliği doğal olarak bölüm anahtarı için harika bir seçimdir.

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

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

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

Bölüm anahtarı olarak öğe kimliğini seçerken dikkate alınması gereken bazı şeyler şunlardır:

  • Öğe kimliği bölüm anahtarıysa, kapsayıcınızın tamamında benzersiz bir tanımlayıcıya dönüşür. Yinelenen öğe kimliğine sahip öğelere sahip olamazsınız.
  • Çok fazla fiziksel bölümü olan yoğun okuma içeren bir kapsayıcınız varsa, öğe kimliğine sahip bir eşitlik filtresine sahip olan sorgular daha verimli olur.
  • Birden çok mantıksal bölümde saklı yordamları veya tetikleyicileri çalıştıramazsınız.

Sonraki adımlar