Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
99,999% kullanılabilirlik hizmet düzeyi sözleşmesi (SLA), anında otomatik ölçeklendirme ve birden çok bölgede otomatik yük devretme ile yüksek ölçekli senaryolar için bir veritabanı çözümü mü arıyorsunuz? NoSQL için Azure Cosmos DB'ye göz önünde bulundurun.
Çevrimiçi analitik işleme (OLAP) grafı uygulamak mı yoksa mevcut bir Apache Gremlin uygulamasını geçirmek mi istiyorsunuz? Microsoft Fabric'te Graph'i göz önünde bulundurun.
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 | GitHub'daGremlin-Python | 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 | KenarEkle, KenarKaldır, DiziKimlikleri, KullanıcıTarafındanSağlananKimlikler, ÖzellikEkle, ÖzellikKaldır | Kenar oluşturma, değiştirme ve silmeyi destekler |
| Kenar özellikleri | Özellikler, 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 adımı |
addV |
Grafiğe bir köşe ekler | addV adımı |
and |
Tüm geçişlerin bir değer döndürmesini sağlar | ve adım |
as |
Bir adımın çıktısına değişken atanmasını sağlayan adım modülatörü | adım olarak |
by |
group ve order ile kullanılan bir adım modülatörü |
adım adım |
coalesce |
Sonuç döndüren ilk geçişi döndürür | birleşim adımı |
constant |
Sabit bir değer döndürür.
coalesce ile kullanılır |
sabit adım |
count |
Geçiş sayımını döndürür | adım sayma |
dedup |
Yinelenenlerin kaldırıldığı değerleri döndürür | dedup adımı |
drop |
Değerleri (köşe/kenar) bırakır | çapraz adım |
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 | katlama adımı |
group |
Belirtilen etiketleri temel alarak değerleri gruplandırır | grup adımı |
has |
Özellikleri, köşeleri ve kenarları filtrelemek için kullanılır.
hasLabel, hasId, hasNot ve has değişkenlerini destekler. |
adımı mevcut |
inject |
Değerleri bir akışa ekler | ekleme adımı |
is |
Boole ifadesi kullanarak bir filtre uygulamak için kullanılır | adımdır |
limit |
Geçişteki öğelerin sayısını sınırlamak için kullanılır | sınırlama adımı |
local |
Alt sorgu gibi, geçişin bir bölümünü yerel olarak sarmalar | yerel adım |
not |
Filtre olumsuzlamayı üretmek için kullanılır | adım değil |
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 | veya aşama |
order |
Sonuçları, belirtilen sıralama düzeninde döndürür | sipariş adımı |
path |
Geçişin tam yolunu döndürür | yol adımı |
project |
Özellikleri bir Harita gibi projelendirir | proje adımı |
properties |
Belirtilen etiketlerin özelliklerini döndürür | özellikler aşaması |
range |
Belirtilen değer aralığını filtreler | aralık adımı |
repeat |
Adımı belirtilen sayıda tekrarlar. Döngü için kullanılır | adımı yinele |
sample |
Sonuçları geçişten örneklendirmek için kullanılır | örnek adım |
select |
Sonuçları geçişten projelendirmek için kullanılır | adımı seçme |
store |
Geçişteki engelleyici olmayan toplamalar için kullanılır | depo adımı |
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 | ağaç adımı |
unfold |
Adım olarak bir yineleyici açar | adımı aç |
union |
Birden çok geçişin sonuçlarını birleştirir | birleşim adımı |
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 |
tepe noktası adımları |
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 |
hangi aşama |
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. ,
stringveyanumbertrue/ türlerini kullanın.falsenulldeğ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 , ,
.map{<expression>}ve işlevleri dahildir..by{<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 .has() gibi .where() 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 .map()gibi union() çı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.