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.
Apache Gremlin için Azure Cosmos DB, sorgular için Gremlin TinkerPop söz dizimini destekler. Bu kılavuzda, bu hizmet kullanılarak gerçekleştirilebilecek yaygın sorgular açıklanmaktadır. Gremlin konsolunu veya en sevdiğiniz Gremlin sürücüsünü kullanarak bu kılavuzda aşağıdaki sorguları çalıştırabilirsiniz.
Önkoşullar
Azure aboneliği
- Eğer bir Azure aboneliğiniz yoksa, başlamadan önce ücretsiz bir hesap oluşturun.
- Apache Gremlin için Azure Cosmos DB hesabı
- Test için örnek verilere erişim
Grafikteki köşe sayısını sayma
Grafikteki ürün köşelerinin toplam sayısını sayar. Bu işlem, ürün kataloğunuzun boyutunu anlamak veya veri yüklerini doğrulamak için kullanışlıdır.
g.V().hasLabel('product').count()
Grafikte belirli bir etikete sahip köşe sayısını sayma
Graftaki belirli bir etiketi içeren toplam ürün köşesi sayısını sayar. Bu örnekte etiket şeklindedir product.
g.V().hasLabel('product').count()
Ürünleri etikete ve özelliğe göre filtreleme
Belirli bir etiket ve özellik değeriyle eşleşen ürünleri alın. Bu sorgu, 800 TL'den büyük bir fiyata sahip ürünler gibi sonuçları ilgi çekici bir alt kümeye daraltmak için yararlıdır.
g.V().hasLabel('product').has('price', gt(800))
Ürünlerden belirli özellikleri yansıtma
Yalnızca eşleşen ürünlerden seçilen özellikleri döndürür. Bu sorgu, döndürülen veri miktarını azaltır ve ürün adları gibi ilgili alanlara odaklanır.
g.V().hasLabel('product').values('name')
Uçları kullanarak ilgili ürünleri bulma
Grafikte geçiş yaparak ilgili ürünleri bulun. Örneğin, giden 'değiştirir' kenarlarını ve ardından bağlı ürün köşelerini geçirerek belirli bir ürünle değiştirilen tüm ürünleri bulun.
g.V(['gear-surf-surfboards', 'bbbbbbbb-1111-2222-3333-cccccccccccc']).outE('replaces').inV().hasLabel('product')
Uçları kullanarak uzak ilişkili ürünleri bulma
Değiştirme zincirinde iki atlama ötedeki ürünleri bulmak için bu sorguyu kullanın:
g.V(['gear-surf-surfboards', 'bbbbbbbb-1111-2222-3333-cccccccccccc']).outE('replaces').inV().hasLabel('product').outE('replaces').inV().hasLabel('product')
Yürütme profiliyle sorgu yürütmeyi analiz etme
Adımını kullanarak Gremlin sorgusunun performans ve yürütme ayrıntılarını analiz edin executionProfile() . Bu adım, sorun giderme ve iyileştirmeye yardımcı olan sorgudaki her adım için ölçümleri içeren bir JSON nesnesi döndürür.
g.V(['gear-surf-surfboards', 'bbbbbbbb-1111-2222-3333-cccccccccccc']).out().executionProfile()
[
{
"gremlin": "g.V('mary').out().executionProfile()",
"totalTime": 28,
"metrics": [
{
"name": "GetVertices",
"time": 24,
"annotations": { "percentTime": 85.71 },
"counts": { "resultCount": 2 },
"storeOps": [ { "fanoutFactor": 1, "count": 2, "size": 696, "time": 0.4 } ]
},
{
"name": "GetEdges",
"time": 4,
"annotations": { "percentTime": 14.29 },
"counts": { "resultCount": 1 },
"storeOps": [ { "fanoutFactor": 1, "count": 1, "size": 419, "time": 0.67 } ]
},
{
"name": "GetNeighborVertices",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 1 }
},
{
"name": "ProjectOperator",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 1 }
}
]
}
]
Adım hakkında executionProfile() daha fazla bilgi için bkz. yürütme profili başvurusu.
Tavsiye
Adım executionProfile() Gremlin sorgusunu yürütür. Bu sorgu, sorguda addV belirtilen değişikliklerin oluşturulmasına ve işlenmesine neden olan veya addE adımlarını içerir. Gremlin sorgusu tarafından oluşturulan istek birimleri de ücretlendirilir.
Kör fan-out sorgu desenlerini tanımlama
Bir sorgu gerektiğinden daha fazla bölüme eriştiğinde, genellikle eksik bölüm anahtarı önkoşullarından dolayı kör bir fan-out oluşur. Bu kötü model gecikme süresini ve maliyeti artırabilir. Yürütme profili, yüksek fanoutFactorbir göstererek bu tür desenleri tanımlamaya yardımcı olur.
g.V(['gear-surf-surfboards', 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb']).executionProfile()
[
{
"gremlin": "g.V('tt0093640').executionProfile()",
"totalTime": 46,
"metrics": [
{
"name": "GetVertices",
"time": 46,
"annotations": { "percentTime": 100 },
"counts": { "resultCount": 1 },
"storeOps": [ { "fanoutFactor": 5, "count": 1, "size": 589, "time": 75.61 } ]
},
{
"name": "ProjectOperator",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 1 }
}
]
}
]
Yayma sorgularını iyileştirme
Yüksek fanoutFactor (örneğin 5), sorgunun birden çok bölüme erişmiş olduğunu gösterir. en iyi duruma getirmek için sorgu koşuluna bölüm anahtarını ekleyin:
g.V(['gear-surf-surfboards', 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'])
Filtrelenmemiş sorgu düzeni
Filtrelenmemiş sorgular büyük bir ilk veri kümesini işleyip maliyeti ve gecikme süresini artırabilir.
g.V().hasLabel('product').out().executionProfile()
[
{
"gremlin": "g.V().hasLabel('tweet').out().executionProfile()",
"totalTime": 42,
"metrics": [
{
"name": "GetVertices",
"time": 31,
"annotations": { "percentTime": 73.81 },
"counts": { "resultCount": 30 },
"storeOps": [ { "fanoutFactor": 1, "count": 13, "size": 6819, "time": 1.02 } ]
},
{
"name": "GetEdges",
"time": 6,
"annotations": { "percentTime": 14.29 },
"counts": { "resultCount": 18 },
"storeOps": [ { "fanoutFactor": 1, "count": 20, "size": 7950, "time": 1.98 } ]
},
{
"name": "GetNeighborVertices",
"time": 5,
"annotations": { "percentTime": 11.9 },
"counts": { "resultCount": 20 },
"storeOps": [ { "fanoutFactor": 1, "count": 4, "size": 1070, "time": 1.19 } ]
},
{
"name": "ProjectOperator",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 20 }
}
]
}
]
Filtrelenmiş sorgu düzeni
Geçişlerden önce filtre eklemek çalışma kümesini azaltabilir ve performansı artırabilir. Yürütme profili filtrelemenin etkisini gösterir. Filtrelenen sorgu daha az köşe işleyerek daha düşük gecikme süresine ve maliyete neden olur.
g.V().hasLabel('product').has('clearance', true).out().executionProfile()
[
{
"gremlin": "g.V().hasLabel('tweet').has('lang', 'en').out().executionProfile()",
"totalTime": 14,
"metrics": [
{
"name": "GetVertices",
"time": 14,
"annotations": { "percentTime": 58.33 },
"counts": { "resultCount": 11 },
"storeOps": [ { "fanoutFactor": 1, "count": 11, "size": 4807, "time": 1.27 } ]
},
{
"name": "GetEdges",
"time": 5,
"annotations": { "percentTime": 20.83 },
"counts": { "resultCount": 18 },
"storeOps": [ { "fanoutFactor": 1, "count": 18, "size": 7159, "time": 1.7 } ]
},
{
"name": "GetNeighborVertices",
"time": 5,
"annotations": { "percentTime": 20.83 },
"counts": { "resultCount": 18 },
"storeOps": [ { "fanoutFactor": 1, "count": 4, "size": 1070, "time": 1.01 } ]
},
{
"name": "ProjectOperator",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 18 }
}
]
}
]