Aracılığıyla paylaş


Apache Gremlin için Azure Cosmos DB ile graf veri modelleme

ŞUNLAR IÇIN GEÇERLIDIR: Gremlin

Bu makalede, grafik veri modellerinin kullanımına yönelik öneriler sağlanır. Bu en iyi yöntemler, veriler geliştikçe graf veritabanı sisteminin ölçeklenebilirliğini ve performansını sağlamak için çok önemlidir. Verimli bir veri modeli özellikle büyük ölçekli grafikler için önemlidir.

Gereksinimler

Bu kılavuzda özetlenen işlem aşağıdaki varsayımları temel alır:

  • Sorun alanı içindeki varlıklar tanımlanır. Bu varlıkların her istek için atomik olarak tüketilmesi amaçlanır. Başka bir deyişle, veritabanı sistemi birden çok sorgu isteğinde tek bir varlığın verilerini alacak şekilde tasarlanmamıştır.
  • Veritabanı sistemi için okuma ve yazma gereksinimleri hakkında bilgi vardır. Bu gereksinimler graf veri modeli için gereken iyileştirmelere yol gösterir.
  • Apache Tinkerpop özellik grafı standardının ilkeleri iyi anlaşılmıştır.

Graf veritabanına ne zaman ihtiyacım var?

Bir veri etki alanındaki varlıklar ve ilişkiler aşağıdaki özelliklerden herhangi birine sahipse graf veritabanı çözümü en uygun şekilde kullanılabilir:

  • Varlıklar açıklayıcı ilişkiler aracılığıyla yüksek oranda bağlıdır . Bu senaryonun avantajı, ilişkilerin depolamada kalıcı olmasıdır.
  • Döngüsel ilişkiler veya kendi kendine başvurulan varlıklar vardır. bu düzen genellikle ilişkisel veya belge veritabanlarını kullandığınızda bir zorluk oluşturur.
  • Varlıklar arasında dinamik olarak gelişen ilişkiler vardır. Bu desen özellikle birçok düzeye sahip hiyerarşik veya ağaç yapılandırılmış veriler için geçerlidir.
  • Varlıklar arasında çoka çok ilişkiler vardır.
  • Hem varlıklar hem de ilişkilerde yazma ve okuma gereksinimleri vardır.

Yukarıdaki ölçütler karşılanırsa, grafik veritabanı yaklaşımı büyük olasılıkla sorgu karmaşıklığı, veri modeli ölçeklenebilirliği ve sorgu performansı için avantajlar sağlar.

Sonraki adım, grafiğin analiz veya işlem amaçları için kullanılıp kullanılmayacağını belirlemektir. Grafın yoğun hesaplama ve veri işleme iş yükleri için kullanılması amaçlanıyorsa Cosmos DB Spark bağlayıcısını ve GraphX kitaplığını keşfetmeye değer.

Grafik nesnelerini kullanma

Apache Tinkerpop özellik grafiği standardı iki tür nesne tanımlar: köşeler ve kenarlar.

Graf nesnelerindeki özellikler için en iyi yöntemler aşağıdadır:

Object Özellik Türü Notlar
İzdüşüm Kimlik String Bölüm başına benzersiz olarak zorlanır. Ekleme işleminde bir değer sağlanmazsa, otomatik olarak oluşturulan bir GUID depolanır.
İzdüşüm Etiket String Bu özellik köşenin temsil ettiği varlık türünü tanımlamak için kullanılır. Bir değer sağlanmazsa, varsayılan değer köşesi kullanılır.
İzdüşüm Properties Dize, boole, sayısal Her köşedeki anahtar-değer çiftleri olarak depolanan ayrı özelliklerin listesi.
İzdüşüm Bölüm anahtarı Dize, boole, sayısal Bu özellik, köşenin ve giden kenarlarının nerede depolandığını tanımlar. Grafik bölümleme hakkında daha fazla bilgi edinin.
Edge Kimlik String Bölüm başına benzersiz olarak zorlanır. Varsayılan olarak otomatik olarak oluşturulur. Kenarların genellikle bir kimlik tarafından benzersiz olarak alınması gerekmez.
Edge Etiket String Bu özellik, iki köşenin sahip olduğu ilişki türünü tanımlamak için kullanılır.
Edge Properties Dize, boole, sayısal Her kenarda anahtar-değer çiftleri olarak depolanan ayrı özelliklerin listesi.

Not

Kenarlar bölüm anahtarı değeri gerektirmez, çünkü değer kendi kaynak köşelerine göre otomatik olarak atanır. Azure Cosmos DB'de bölümlenmiş graf kullanma bölümünde daha fazla bilgi edinin.

Varlık ve ilişki modelleme yönergeleri

Aşağıdaki yönergeler, Apache Gremlin için Azure Cosmos DB graf veritabanı için veri modellemeye yaklaşmanıza yardımcı olur. Bu yönergelerde, veri etki alanının mevcut bir tanımı olduğu ve bu etki alanı için sorgular olduğu varsayılır.

Not

Aşağıdaki adımlar öneri olarak sunulur. Son modeli üretime hazır olarak değerlendirmeden önce değerlendirip test etmeniz gerekir. Ayrıca öneriler Azure Cosmos DB'nin Gremlin API uygulamasına özeldir.

Modelleme köşeleri ve özellikleri

Graf veri modelinin ilk adımı, tanımlanan her varlığı bir köşe nesnesine eşlemektir. Tüm varlıkların köşelere bire bir eşlenmesi ilk adım olmalı ve değiştirilebilir.

Yaygın bir tuzak, tek bir varlığın özelliklerini ayrı köşeler olarak eşlemektir. Aynı varlığın iki farklı şekilde temsil edildiği aşağıdaki örneği göz önünde bulundurun:

  • Köşe tabanlı özellikler: Bu yaklaşımda varlık, özelliklerini açıklamak için üç ayrı köşe ve iki kenar kullanır. Bu yaklaşım yedekliliği azaltabilir ancak model karmaşıklığını artırır. Model karmaşıklığındaki artış ek gecikme süresi, sorgu karmaşıklığı ve hesaplama maliyetine neden olabilir. Bu model bölümleme konusunda da güçlükler sunabilir.

    Özellikler için köşeleri olan varlık modelinin diyagramı.

  • Özellik eklenmiş köşeler: Bu yaklaşım, bir köşe içindeki varlığın tüm özelliklerini temsil etmek için anahtar-değer çifti listesinden yararlanır. Bu yaklaşım model karmaşıklığını azaltarak daha basit sorgulara ve daha uygun maliyetli çapraz geçişlere yol açar.

    Kimlik, etiket ve özelliklere sahip önceki diyagramdaki Luis köşesinin diyagramı.

Not

Yukarıdaki diyagramlarda, varlık özelliklerini bölmenin yalnızca iki yolunu karşılaştıran basitleştirilmiş bir grafik modeli gösterilmektedir.

Özellik eklenmiş köşe deseni genellikle daha performanslı ve ölçeklenebilir bir yaklaşım sağlar. Yeni bir graf veri modeline yönelik varsayılan yaklaşım bu desene doğru çekim yapmalıdır.

Ancak, bir özelliğe başvurmanın avantajlar sağlayabileceği senaryolar vardır. Örneğin, başvuruda bulunan özellik sık sık güncelleştiriliyorsa. Güncelleştirmenin gerektirdiği yazma işlemi miktarını en aza indirmek için sürekli değişen bir özelliği temsil etmek için ayrı bir köşe kullanın.

Uç yönleri olan ilişki modelleri

Köşeler modellendikten sonra, aralarındaki ilişkileri belirtmek için kenarlar eklenebilir. Değerlendirilmesi gereken ilk yön, ilişkinin yönüdür.

Edge nesnelerinin varsayılan yönü, veya outE() işlevleri kullanılırken bir geçişin ardından gelen out() bir yönü vardır. Tüm köşeler giden kenarlarında depolandığından bu doğal yönün kullanılması verimli bir işlemle sonuçlanabilir.

Ancak, işlevini kullanarak in() bir kenarın ters yönünde geçiş yaparak her zaman bölümler arası sorgu elde edebilirsiniz. Grafik bölümleme hakkında daha fazla bilgi edinin. İşlevi kullanarak in() sürekli dolaşmanız gerekiyorsa her iki yönde de kenar eklemeniz önerilir.

Gremlin adımıyla .addE() veya .from() koşullarını kullanarak .to() kenar yönünü belirleyebilirsiniz. Veya Gremlin API için toplu yürütücü kitaplığını kullanarak.

Not

Kenar nesnelerinin varsayılan olarak yönü vardır.

İlişki etiketleri

Açıklayıcı ilişki etiketlerinin kullanılması uç çözümleme işlemlerinin verimliliğini artırabilir. Bu deseni aşağıdaki yollarla uygulayabilirsiniz:

  • bir ilişkiyi etiketlemek için genel olmayan terimler kullanın.
  • Kaynak köşenin etiketini hedef köşenin etiketiyle ilişki adıyla ilişkilendirin.

İlişki etiketleme örneklerinin diyagramı.

Çapraz geçişin kenarları filtrelemek için kullandığı etiket ne kadar belirgin olursa o kadar iyi olur. Bu kararın sorgu maliyeti üzerinde de önemli bir etkisi olabilir. executionProfile adımını kullanarak istediğiniz zaman sorgu maliyetini değerlendirebilirsiniz.

Sonraki adımlar