Gremlin için Azure Cosmos DB graf desteği ve TinkerPop özellikleriyle uyumluluk
ŞUNLAR IÇIN GEÇERLIDIR: Gremlin
Azure Cosmos DB, Apache Tinkerpop'un Gremlin olarak bilinen graf 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'ye özgü farklılıklar vardır. Bu makalede, Gremlin'e yönelik hızlı bir kılavuz sağlar ve Gremlin api'sinin desteklediği Gremlin özelliklerini numaralandırırız.
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 | Kullanmaya Başlama | Desteklenen/Önerilen bağlayıcı sürümü |
---|---|---|---|
.NET | GitHub’da Gremlin.NET | .NET kullanarak Grafik oluşturma | 3.4.13 |
Java | Gremlin JavaDoc | Java kullanarak Grafik oluşturma | 3.4.13 |
Python | Gremlin-Python on GitHub | Python kullanarak Grafik oluşturma | 3.4.13 |
Gremlin konsolu | TinkerPop belgeleri | Gremlin konsolunu kullanarak Grafik oluşturma | 3.4.13 |
Node.js | GitHub’da Gremlin-JavaScript | Node.js kullanarak Grafik oluşturma | 3.4.13 |
PHP | Github'da Gremlin-PHP | PHP kullanarak Grafik oluşturma | 3.1.0 |
Go Lang | Go Lang | Bu kitaplık dış katkıda bulunanlar tarafından oluşturulur. Azure Cosmos DB ekibi herhangi bir destek sunmaz veya kitaplığın bakımını yapmaz. |
Not
3.5.*, 3.6.* için Gremlin istemci sürücüsü sürümlerinde bilinen uyumluluk sorunları vardır, bu nedenle yukarıda listelenen desteklenen en son 3.4.* sürücü sürümlerini kullanmanızı öneririz. Bu yeni sürücü sürümleri için uyumluluk sorunları giderildiğinde bu tablo güncelleştirilecektir.
Desteklenen Grafik 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 | Boole, Integer, Byte, Double, Float, Long, String'i 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ç döndürürken JSON biçimini kullanır. Azure Cosmos DB şu anda JSON biçimini desteklemektedir. Örneğin aşağıdaki kod parçacığı, Azure Cosmos DB'den istemciye döndürülen bir köşenin JSON gösterimini gösterir:
{
"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öşeler için 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 _partition birlikte). Hiçbir değer sağlanmazsa, otomatik olarak bir GUID sağlanır |
label |
Köşenin etiketi. Bu özellik, varlık türünü açıklamak için 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ı. Graf bölümleme için kullanılır. |
outE |
Bu özellik, bir köşenin dış kenarlarının 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 _partition birlikte) |
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 in köşelerinin 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.
step | 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 | optional step |
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, belirli bir dizenin has() başlangıcıyla bir özelliği eşleştirmek için adımın koşulu olarak kullanılır |
TextP önkoşulları |
TextP.endingWith(string) |
Dize filtreleme işlevi. Bu işlev, bir özelliği belirli bir dizenin has() sonuyla eşleştirmek için adımın koşulu olarak kullanılır |
TextP önkoşulları |
TextP.containing(string) |
Dize filtreleme işlevi. Bu işlev, bir özelliği belirli bir dizenin has() içeriğiyle eşleştirme adımının koşulu olarak kullanılır |
TextP önkoşulları |
TextP.notStartingWith(string) |
Dize filtreleme işlevi. Bu işlev, belirli bir dizeyle başlamayan bir özelliği eşleştirmek için has() adımın koşulu olarak kullanılır |
TextP önkoşulları |
TextP.notEndingWith(string) |
Dize filtreleme işlevi. Bu işlev, belirli bir dizeyle bitmeyen has() bir özelliği eşleştirmek için adımın koşulu olarak kullanılır |
TextP önkoşulları |
TextP.notContaining(string) |
Dize filtreleme işlevi. Bu işlev, belirli bir dize içermeyen bir özelliği eşleştirmek için has() adımın koşulu olarak kullanılır |
TextP önkoş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ı
- TinkerPop Gremlin derinlik öncelikliyken Azure Cosmos DB Graph altyapısı genişlik öncelikli dolaşma çalıştırır. Bu davranış, Azure Cosmos DB gibi yatay olarak ölçeklenebilir sistemde daha iyi performans sağlar.
Desteklenmeyen özellikler
Gremlin Bytecode graf dolaşma işlemlerine yönelik programlama dilinden bağımsız bir belirtimdir. Azure Cosmos DB Graph henüz bunu desteklemiyor.
GremlinClient.SubmitAsync()
kullanın ve geçişi bir metin dizesi olarak geçirin.property(set, 'xyz', 1)
küme kardinalitesi bugün desteklenmiyor. Bunun yerineproperty(list, 'xyz', 1)
kullanın. Daha fazla bilgi edinmek için bkz . TinkerPop ile köşe özellikleri.Bu
match()
adım şu anda kullanılamıyor. Bu adım bildirim temelli sorgulama özellikleri sağlar.Köşelerde veya kenarlarda özellik 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.İlkel olmayan JSON türleri desteklenmez. ,
number
veyatrue
/false
türlerini kullanın.string
null
değerleri desteklenmez.GraphSONv3 seri hale getiricisi şu anda desteklenmiyor. Bağlantı yapılandırmasında Seri Hale Getirici, Okuyucu ve Yazıcı sınıflarını kullanın
GraphSONv2
. Gremlin için Azure Cosmos DB tarafından döndürülen sonuçlar GraphSON biçimiyle aynı biçime sahip değildir.Lambda ifadeleri ve işlevleri şu anda desteklenmemektedir. Buna , ,
.by{<expression>}
ve işlevleri dahildir..map{<expression>}
.filter{<expression>}
Daha fazla bilgi edinmek ve Gremlin adımlarını kullanarak bunları yeniden yazmayı öğrenmek için bkz . Lambdas'ta Not.Sistemin dağıtılmış yapısı nedeniyle işlemler desteklenmez. Gremlin hesabında uygun tutarlılık modelini "kendi yazmalarınızı okuyacak" şekilde yapılandırın ve çakışan yazmaları çözmek için iyimser eşzamanlılık kullanın.
Bilinen sınırlamalar
- Orta çapraz geçiş
.V()
adımlarını içeren Gremlin sorguları için dizin kullanımı: Şu anda, yalnızca ilk.V()
geçiş çağrısı, dizine eklenen filtreleri veya önkoşulları çözümlemek için dizinden yararlanacaktır. Sonraki çağrılar dizine danışmaz ve bu da sorgunun gecikme süresini ve maliyetini artırabilir.
Varsayılan dizin oluşturma varsayıldığında, adımla .V()
başlayan tipik bir okuma Gremlin sorgusu, ekli filtreleme adımlarında veya .where()
gibi .has()
parametreleri kullanarak sorgunun maliyetini ve performansını iyileştirir. Örneğin:
g.V().has('category', 'A')
Ancak, Gremlin sorgusuna birden .V()
fazla adım eklendiğinde, sorgunun veri çözümlemesi en uygun olmayabilir. Örnek olarak aşağıdaki sorguyu alın:
g.V().has('category', 'A').as('a').V().has('category', 'B').as('b').select('a', 'b')
Bu sorgu, adlı category
özelliklerine göre iki köşe grubu döndürür. 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 sorgu için geçici bir çözüm, ve union()
gibi .map()
çıkarma adımlarını kullanmaktır. Bu, aşağıda örneklenmiştir:
// 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