ınkerpop özellikleriyle Azure Cosmos DB gremlin graph desteği ve uyumluluğu
Uygulama hedefı:
Gremlin API
Azure Cosmos DB, gremlinolarak bilinen Apache tinkerpop 'un grafik çapraz geçiş dilini destekler. Grafik varlıkları (köşeler ve kenarlar) oluşturmak, bu varlıkların içindeki özellikleri değiştirmek, sorgu ve geçiş işlemleri gerçekleştirmek ve varlıkları silmek için Gremlin dilini kullanabilirsiniz.
Azure Cosmos DB Graph altyapısı Apache tinkerpop geçiş adımları belirtimini yakından izler, ancak uygulamada Azure Cosmos DB özgü farklılıklar vardır. Bu makalede, Gremlin için hızlı bir yol sunuyoruz ve Gremlin API tarafından desteklenen Gremlin özelliklerini listeliyoruz.
Uyumlu istemci kitaplıkları
Aşağıdaki tabloda Azure Cosmos DB’ye karşı kullanabileceğiniz popüler Gremlin sürücüleri gösterilir:
| İndir | Kaynak | Başlarken | Desteklenen bağlayıcı sürümü |
|---|---|---|---|
| .NET | GitHub’da Gremlin.NET | .NET kullanarak Grafik oluşturma | 3.4.6 |
| Java | Gremlin JavaDoc | Java kullanarak Grafik oluşturma | 3.2.0+ |
| Node.js | GitHub’da Gremlin-JavaScript | Node.js kullanarak Grafik oluşturma | 3.3.4 + |
| Python | Gremlin-Python on GitHub | Python kullanarak Grafik oluşturma | 3.2.7 |
| PHP | Github'da Gremlin-PHP | PHP kullanarak Grafik oluşturma | 3.1.0 |
| Git lang | Git lang | Bu kitaplık, dış katkıda bulunanlar tarafından oluşturulmuştur. Azure Cosmos DB takım herhangi bir destek sunmaz veya kitaplığı korumaz. | |
| Gremlin konsolu | TinkerPop belgeleri | Gremlin konsolunu kullanarak Grafik oluşturma | 3.2.0 + |
desteklenen Graph nesneleri
TinkerPop, çeşitli grafik teknolojilerini kapsayan bir standarttır. Bu nedenle bir grafik sağlayıcısı tarafından sağlanan özellikleri tanımlamaya yönelik standart bir terminolojisi vardır. Azure Cosmos DB kalıcı, yüksek eşzamanlılığa sahip, birden çok sunucu ve kümeye ayrılabilen yazılabilir bir grafik veritabanı sağlar.
Aşağıdaki tabloda Azure Cosmos DB tarafından uygulanan TinkerPop özellikleri listelenmektedir:
| Kategori | Azure Cosmos DB uygulaması | Notlar |
|---|---|---|
| Grafik özellikleri | Kalıcılık ve EşzamanlıErişim sağlar. İşlemleri desteklemek için tasarlanmıştır | Bilgisayar yöntemleri, Spark bağlayıcısı tarafından uygulanabilir. |
| Değişken özellikleri | Boolean, Tamsayı, Bayt, Çift, Kayan Sayı, Uzun, Dize destekler | İlkel türleri destekler ve veri modeli aracılığıyla oluşan karmaşık türlerle uyumludur |
| Köşe özellikleri | RemoveVertices, MetaProperties, AddVertices, MultiProperties, StringIds, UserSuppliedIds, AddProperty, RemoveProperty işlevlerini destekler | Köşe oluşturma, değiştirme ve silmeyi destekler |
| Köşe özellikleri | StringIds, UserSuppliedIds, AddProperty, RemoveProperty, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues işlevlerini destekler | Köşe özelliklerini oluşturma, değiştirme ve silmeyi destekler |
| Kenar özellikleri | AddEdges, RemoveEdges, StringIds, UserSuppliedIds, AddProperty, RemoveProperty | Kenar oluşturma, değiştirme ve silmeyi destekler |
| Kenar özellikleri | Properties, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues | Kenar özelliklerini oluşturma, değiştirme ve silmeyi destekler |
Gremlin Tel biçimi
Azure Cosmos DB gremlin işlemlerinden sonuçları döndürürken JSON biçimini kullanır. Azure Cosmos DB şu anda JSON biçimini destekliyor. örneğin, aşağıdaki kod parçacığında Azure Cosmos DB istemciye döndürülen bir köşesinin JSON temsili gösterilmektedir:
{
"id": "a7111ba7-0ea1-43c9-b6b2-efc5e3aea4c0",
"label": "person",
"type": "vertex",
"outE": {
"knows": [
{
"id": "3ee53a60-c561-4c5e-9a9f-9c7924bc9aef",
"inV": "04779300-1c8e-489d-9493-50fd1325a658"
},
{
"id": "21984248-ee9e-43a8-a7f6-30642bc14609",
"inV": "a8e3e741-2ef7-4c01-b7c8-199f8e43e3bc"
}
]
},
"properties": {
"firstName": [
{
"value": "Thomas"
}
],
"lastName": [
{
"value": "Andersen"
}
],
"age": [
{
"value": 45
}
]
}
}
Köşelere yönelik JSON biçimi tarafından kullanılan özellikler aşağıda açıklanmıştır:
| Özellik | Açıklama |
|---|---|
id |
Köşenin kimliği. Benzersiz olmalıdır (varsa değeriyle birlikte _partition ). Değer sağlanmazsa, otomatik olarak bir GUID ile sağlanacaktır |
label |
Köşenin etiketi. Bu özellik varlık türünü tanımlamakta kullanılır. |
type |
Grafik olmayan belgelerdeki köşeleri ayırt etmek için kullanılır |
properties |
Köşe ile ilişkili, kullanıcı tanımlı özellikler paketi. Her bir özellik birden çok değere sahip olabilir. |
_partition |
Köşenin bölüm anahtarı. Grafik bölümlendirmeiçin kullanılır. |
outE |
Bu özellik, bir köşenin giden kenarlarının bir listesini içerir. Komşuluk bilgilerini köşeyle birlikte depolamak, geçişlerin hızla yürütülmesini sağlar. Kenarlar etiketlerine göre gruplandırılır. |
Her bir özellik, bir dizi içinde birden çok değer depolayabilir.
| Özellik | Açıklama |
|---|---|
value |
Özelliğin değeri |
Kenar, grafiğin diğer bölümlerine gezintiyi kolaylaştırmak için aşağıdaki bilgiyi içerir.
| Özellik | Açıklama |
|---|---|
id |
Kenarın kimliği. Benzersiz olmalıdır (varsa değeriyle birlikte _partition ) |
label |
Kenarın etiketi. Bu özellik isteğe bağlıdır ve ilişki türünü tanımlamak için kullanılır. |
inV |
Bu özellik, bir kenar için köşelerin bir listesini içerir. Komşuluk bilgilerini kenarla birlikte depolamak, geçişlerin hızla yürütülmesini sağlar. Köşeler etiketlerine göre gruplandırılır. |
properties |
Kenar ile ilişkili, kullanıcı tanımlı özellikler paketi. |
Gremlin adımları
Şimdi de Azure Cosmos DB tarafından desteklenen Gremlin adımlarına bakalım. Gremlin hakkında eksiksiz bir başvuru için bkz. TinkerPop başvurusu.
| adım | Açıklama | TinkerPop 3.2 Belgeleri |
|---|---|---|
addE |
İki köşe arasına kenar ekler | addE step |
addV |
Grafiğe bir köşe ekler | addV step |
and |
Tüm geçişlerin bir değer döndürmesini sağlar | and step |
as |
Bir adımın çıktısına değişken atanmasını sağlayan adım modülatörü | as step |
by |
group ve order ile kullanılan bir adım modülatörü |
by step |
coalesce |
Sonuç döndüren ilk geçişi döndürür | coalesce step |
constant |
Sabit bir değer döndürür. coalesce ile kullanılır |
constant step |
count |
Geçiş sayımını döndürür | count step |
dedup |
Yinelenenlerin kaldırıldığı değerleri döndürür | dedup step |
drop |
Değerleri (köşe/kenar) bırakır | drop step |
executionProfile |
Yürütülen Gremlin adımı tarafından oluşturulan tüm işlemlerin açıklamasını oluşturur | executionProfile adımı |
fold |
Sonuçların toplamını hesaplayan bir engel gibi davranır | fold step |
group |
Belirtilen etiketleri temel alarak değerleri gruplandırır | group step |
has |
Özellikleri, köşeleri ve kenarları filtrelemek için kullanılır. hasLabel, hasId, hasNot ve has değişkenlerini destekler. |
has step |
inject |
Değerleri bir akışa ekler | inject step |
is |
Boole ifadesi kullanarak bir filtre uygulamak için kullanılır | is step |
limit |
Geçişteki öğelerin sayısını sınırlamak için kullanılır | limit step |
local |
Alt sorgu gibi, geçişin bir bölümünü yerel olarak sarmalar | local step |
not |
Filtre olumsuzlamayı üretmek için kullanılır | not step |
optional |
Bir sonuç elde ettiği takdirde, belirtilen geçişin sonucunu döndürür; aksi takdirde çağıran öğeyi döndürür | isteğe bağlı adım |
or |
En azından bir geçişin değer döndürmesini sağlar | or step |
order |
Sonuçları, belirtilen sıralama düzeninde döndürür | order step |
path |
Geçişin tam yolunu döndürür | path step |
project |
Özellikleri bir Harita gibi projelendirir | project step |
properties |
Belirtilen etiketlerin özelliklerini döndürür | properties step |
range |
Belirtilen değer aralığını filtreler | range step |
repeat |
Adımı belirtilen sayıda tekrarlar. Döngü için kullanılır | repeat step |
sample |
Sonuçları geçişten örneklendirmek için kullanılır | sample step |
select |
Sonuçları geçişten projelendirmek için kullanılır | select step |
store |
Geçişteki engelleyici olmayan toplamalar için kullanılır | store step |
TextP.startingWith(string) |
Dize filtreleme işlevi. Bu işlev, bir has() özelliğin belirli bir dizenin başlangıcıyla eşleşmesi için bir koşul olarak kullanılır |
TextP koşulları |
TextP.endingWith(string) |
Dize filtreleme işlevi. Bu işlev, has() belirli bir dizenin sonu ile bir özelliği eşleştirmek için bir koşul olarak kullanılır |
TextP koşulları |
TextP.containing(string) |
Dize filtreleme işlevi. Bu işlev, has() belirli bir dizenin içeriğiyle bir özelliği eşlemek için adım için bir koşul olarak kullanılır |
TextP koşulları |
TextP.notStartingWith(string) |
Dize filtreleme işlevi. Bu işlev, has() belirli bir dize ile başlamabir özelliği eşlemek için adım için bir koşul olarak kullanılır |
TextP koşulları |
TextP.notEndingWith(string) |
Dize filtreleme işlevi. Bu işlev, has() belirli bir dizeyle bitmeyen bir özelliği eşleştirmek için bir koşul olarak kullanılır |
TextP koşulları |
TextP.notContaining(string) |
Dize filtreleme işlevi. Bu işlev, has() belirli bir dize içermeyen bir özelliği eşleştirmek için bir koşul olarak kullanılır |
TextP koşulları |
tree |
Bir köşeden ağaca yolları toplar | tree step |
unfold |
Adım olarak bir yineleyici açar | unfold step |
union |
Birden çok geçişin sonuçlarını birleştirir | union step |
V |
Köşe ve kenarlar arasında geçiş için gerekli olan adımları içerir: V, E, out, in, both, outE, inE, bothE, outV, inV, bothV ve otherV |
vertex steps |
where |
Geçişten alınan sonuçları filtrelemek için kullanılır. eq, neq, lt, lte, gt, gte ve between işleçlerini destekler |
where step |
Azure Cosmos DB tarafından sağlanan, yazma için iyileştirilmiş altyapı, köşe ve kenarlar içindeki tüm özelliklerin dizinlerinin otomatik olarak oluşturulmasını varsayılan olarak destekler. Bu nedenle herhangi bir özellik üzerindeki sorgulu filtreler, aralık sorguları, sıralama veya toplamalar dizinden işlenir ve etkin bir biçimde sunulur. Azure Cosmos DB’de dizin oluşturmanın işleyişi hakkında daha fazla bilgi için schema-agnostic dizin oluşturma makalemizi okuyun.
Davranış farklılıkları
- Azure Cosmos DB Graph altyapısı, tinkerpop gremlin 'in derinliği ilk kez olacak şekilde, ilk çapraz geçişi çalıştırır. bu davranış, Cosmos DB benzer şekilde yatay ölçeklenebilir sistemde daha iyi performans elde eder.
Desteklenmeyen özellikler
Gremlin Bytecode graf dolaşma işlemlerine yönelik programlama dilinden bağımsız bir belirtimdir. Cosmos DB Graph henüz desteklemez.
GremlinClient.SubmitAsync()kullanın ve geçişi bir metin dizesi olarak geçirin.property(set, 'xyz', 1)kardinalite kümesi bugün desteklenmiyor. Bunun yerineproperty(list, 'xyz', 1)kullanın. Daha fazla bilgi için bkz. ınkerpop Ile köşe özellikleri.match()Adım Şu anda kullanılamıyor. Bu adım bildirime dayalı sorgulama özellikleri sağlar.Köşelerin veya kenarlardaki Özellikler olarak nesneler desteklenmez. Özellikler yalnızca temel türler veya diziler olabilir.
Dizi özelliklerine
order().by(<array property>)göre sıralama desteklenmez. Yalnızca temel türlere göre sıralama desteklenir.Ilkel olmayan JSON türleri desteklenmez.
string,numberVeya türlerini kullanıntrue/false.nulldeğerler desteklenmez.GraphSONv3 seri hale getirici Şu anda desteklenmiyor.
GraphSONv2Bağlantı yapılandırmasındaki serileştirici, okuyucu ve yazıcı sınıflarını kullanın. Azure Cosmos DB gremlin apı tarafından döndürülen sonuçlar graphson biçimiyle aynı biçimde değil.Lambda ifadeleri ve işlevleri Şu anda desteklenmemektedir. Bu,,
.map{<expression>}.by{<expression>}ve.filter{<expression>}işlevlerini içerir. Daha fazla bilgi edinmek ve Gremlin adımlarını kullanarak bunları yeniden yazmayı öğrenmek için Lambdalar hakkında bir notabakın.Sistemin dağıtılmış doğası nedeniyle işlemler desteklenmiyor. Gremlin hesabında uygun tutarlılık modelini "kendi yazınızla okumak" üzere yapılandırın ve çakışan yazmaları çözümlemek için iyimser eşzamanlılık kullanın.
Bilinen sınırlamalar
- Orta çapraz geçiş
.V()adımlarıyla Gremlin sorguları için dizin kullanımı: Şu anda,.V()bir geçiş geçişinin yalnızca ilk çağrısı, bu dizine iliştirilmiş tüm filtre ve koşullara çözüm sağlamak için dizini kullanır. Sonraki çağrılar dizine danışmayacak, bu da sorgunun gecikmesini ve maliyetini artırabilir.
Varsayılan dizin oluşturma varsayılırsa, adımla başlayan tipik bir okunan Gremlin sorgusu, .V() .has() .where() sorgu maliyetini ve performansını iyileştirmek için veya gibi ilgili filtreleme adımlarında parametreleri kullanacaktır. Örnek:
g.V().has('category', 'A')
Ancak, .V() Gremlin sorgusuna birden fazla adım eklendiğinde, sorgu verilerinin çözümlenmesi en iyi durumda olmayabilir. Örnek olarak aşağıdaki sorguyu gerçekleştirin:
g.V().has('category', 'A').as('a').V().has('category', 'B').as('b').select('a', 'b')
Bu sorgu, adlandırılan özelliklerine göre iki köşe grubu döndürür category . Bu durumda, yalnızca ilk çağrı, g.V().has('category', 'A') özelliklerinin değerlerine göre köşeleri çözümlemek için dizini kullanır.
Bu sorguya yönelik bir geçici çözüm, ve gibi subtraversal adımlarını kullanmaktır .map() union() . Bu, aşağıda belirtilen şekilde belirlenir:
// Query workaround using .map()
g.V().has('category', 'A').as('a').map(__.V().has('category', 'B')).as('b').select('a','b')
// Query workaround using .union()
g.V().has('category', 'A').fold().union(unfold(), __.V().has('category', 'B'))
Gremlin executionProfile() adımınıkullanarak sorguların performansını gözden geçirebilirsiniz.
Sonraki adımlar
- SDK’larımızı kullanarak bir grafik uygulaması oluşturmaya başlayın
- Azure Cosmos DB’de grafik desteği hakkında daha fazla bilgi edinin