Aracılığıyla paylaş


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 yoluyla işleyebilme özelliğidir. Kapsayıcılar depolama ve aktarım hızı açısından bağımsız olarak ölçeklendirilebilir. Azure Cosmos DB'de 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 fazlaysa 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. Azure portalından veya Gremlin sürücülerinin 3.x veya üzeri sürümlerinden grafik 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 grafiğe özgü birkaç iyileştirme ile geçerlidir.

Grafik 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 bir bölüm anahtarı gerektirir. Bu anahtar, bir karma algoritması aracılığıyla köşenin hangi bölümde depolandığını 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ı bir bölümlenmiş 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'deki 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 için API'deki bir kapsayıcı için bölüm anahtarları olarak desteklenmez.

    • Kimliğine göre bir köşe 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şında 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

Bölümlenmiş grafikleri sınırsız kapsayıcılarla 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öşelerine başvuru kimliği ve bölüm anahtarı içerdiğinden sonraki tüm bitişiklik işlemlerinin kapsamı her zaman bir bölüme göre belirlenir.

  • 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 desen göz önünde bulundurularak tasarlandığında bölümler arası sorgulara başvurma olasılığı en aza indirilir. Tam tersine, in() sorgu her zaman pahalı bir fan-out sorgusu 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 bir bölüm anahtarı oluşturma hakkında daha fazla bilgi edinin.

  • Bir bölümün sınırları içinde veri almak için sorguları iyileştirin. En iyi bölümleme stratejisi, sorgu 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: