Azure Cosmos DB'de bölümlenmiş graf kullanma

ŞUNLAR IÇIN GEÇERLIDIR: Gremlin

Azure Cosmos DB'de Gremlin API'sinin temel özelliklerinden biri, büyük ölçekli grafikleri yatay ölçeklendirme aracılığıyla işleyebilmektir. Kapsayıcılar depolama ve aktarım hızı açısından bağımsız olarak ölçeklendirilebilir. Azure Cosmos DB'de bir grafik verilerini depolamak için otomatik olarak ölçeklendirilebilen kapsayıcılar oluşturabilirsiniz. Veriler, belirtilen bölüm anahtarına göre otomatik olarak dengelenmiş durumdadır.

Kapsayıcının boyutu 20 GB'tan fazla olması bekleniyorsa veya saniyede 10.000'den fazla istek birimi (RU) ayırmak istiyorsanız bölümleme dahili olarak yapılır. Veriler, belirttiğiniz bölüm anahtarına göre otomatik olarak bölümlenmiştir. Gremlin sürücülerinin Azure portal veya 3.x veya üzeri sürümlerinden graf kapsayıcıları oluşturursanız bölüm anahtarı gereklidir. Gremlin sürücülerinin 2.x veya daha düşük sürümlerini kullanıyorsanız bölüm anahtarı gerekli değildir.

Azure Cosmos DB bölümleme mekanizmasının genel ilkeleri aşağıda açıklanan birkaç grafiğe özgü iyileştirmeyle geçerlidir.

Graf bölümleme.

Graf bölümleme mekanizması

Aşağıdaki yönergelerde Azure Cosmos DB'deki bölümleme stratejisinin nasıl çalıştığı açıklanmaktadır:

  • Hem köşeler hem de kenarlar JSON belgeleri olarak depolanır.

  • Köşeler için bölüm anahtarı gerekir. Bu anahtar, köşenin bir karma algoritması aracılığıyla depolanacağı bölümü belirler. Bölüm anahtarı özellik adı yeni bir kapsayıcı oluşturulurken tanımlanır ve şu biçime sahiptir: /partitioning-key-name.

  • Kenarlar kaynak köşeleriyle birlikte depolanır. Başka bir deyişle, her köşe için bölüm anahtarı, giden kenarlarıyla birlikte nerede depolandıklarını tanımlar. Bu iyileştirme, grafik sorgularında kardinaliteyi out() kullanırken bölümler arası sorguları önlemek için yapılır.

  • Kenarlar işaret ettikleri köşelere başvurular içerir. Tüm kenarlar, işaret ettikleri köşelerin bölüm anahtarları ve kimlikleriyle birlikte depolanır. Bu hesaplama, tüm out() yön sorgularının her zaman kapsamlı bölümlenmiş bir sorgu olmasını sağlar ve kör bölümler arası sorgu olmasını sağlar.

  • Graf sorgularının bir bölüm anahtarı belirtmesi gerekir. Azure Cosmos DB'de yatay bölümlemeden tam olarak yararlanmak için, mümkün olduğunda tek bir köşe seçildiğinde bölüm anahtarı belirtilmelidir. Bölümlenmiş bir grafikte bir veya birden çok köşe seçmeye yönelik sorgular aşağıdadır:

    • /id ve /label Gremlin API'sindeki bir kapsayıcı için bölüm anahtarları olarak desteklenmez.

    • Kimliğine göre köşeyi seçip bölüm anahtarı özelliğini belirtmek için adımını kullanın.has():

      g.V('vertex_id').has('partitionKey', 'partitionKey_value')
      
    • Bölüm anahtarı değeri ve kimliği dahil olmak üzere bir tanımlama grubu belirterek köşe seçme:

      g.V(['partitionKey_value', 'vertex_id'])
      
    • Kimlikleriyle bir köşe kümesi seçme ve bölüm anahtarı değerlerinin listesini belirtme:

      g.V('vertex_id0', 'vertex_id1', 'vertex_id2', …).has('partitionKey', within('partitionKey_value0', 'partitionKey_value01', 'partitionKey_value02', …)
      
    • Sorgunun başındaki Bölüm stratejisini kullanma ve Gremlin sorgusunun geri kalanının kapsamı için bir bölüm belirtme:

      g.withStrategies(PartitionStrategy.build().partitionKey('partitionKey').readPartitions('partitionKey_value').create()).V()
      

Bölümlenmiş graf kullanırken en iyi yöntemler

Sınırsız kapsayıcı içeren bölümlenmiş grafikleri kullanırken performans ve ölçeklenebilirlik sağlamak için aşağıdaki yönergeleri kullanın:

  • Köşeyi sorgularken her zaman bölüm anahtarı değerini belirtin. Bilinen bir bölümden köşe almak, performans elde etmenin bir yoludur. Edge'ler hedef köşelerinde başvuru kimliği ve bölüm anahtarı içerdiğinden, sonraki tüm bitişiklik işlemleri her zaman bir bölüm kapsamına alınacaktır.

  • Mümkün olduğunda kenarları sorgularken giden yönü kullanın. Yukarıda belirtildiği gibi kenarlar, kaynak köşeleriyle birlikte giden yönde depolanır. Bu nedenle, veriler ve sorgular bu düzen göz önünde bulundurularak tasarlandığında bölümler arası sorgulara başvurma olasılığı en aza indirilir. Aksine, in() sorgu her zaman pahalı bir yaygın sorgu olacaktır.

  • Verileri bölümler arasında eşit olarak dağıtacak bir bölüm anahtarı seçin. Bu karar büyük ölçüde çözümün veri modeline bağlıdır. Azure Cosmos DB'de bölümleme ve ölçeklendirme bölümünde uygun bölüm anahtarı oluşturma hakkında daha fazla bilgi edinin.

  • Bölümün sınırları içinde veri almak için sorguları iyileştirin. En uygun bölümleme stratejisi sorgulama desenlerine hizalanır. Tek bir bölümden veri alan sorgular mümkün olan en iyi performansı sağlar.

Sonraki adımlar

Ardından aşağıdaki makaleleri okumaya devam edebilirsiniz: