Gremlin için Azure Cosmos DB'de toplu yürütücü kitaplığı kullanarak verileri toplu olarak alma
ŞUNLAR IÇIN GEÇERLIDIR: Gremlin
Graf veritabanlarının genellikle bir grafiğin tamamını yenilemek veya bir bölümünü güncelleştirmek için verileri toplu olarak almaları gerekir. Dağıtılmış bir veritabanı olan ve Gremlin için Azure Cosmos DB'nin omurgası olan Azure Cosmos DB, yükler iyi dağıtıldığında en iyi performansı göstermeyi amaçlır. Azure Cosmos DB'deki toplu yürütücü kitaplıkları, Azure Cosmos DB'nin bu benzersiz özelliğinden yararlanacak ve en iyi performansı sağlayacak şekilde tasarlanmıştır. Daha fazla bilgi için bkz . .NET SDK'sında toplu desteğe giriş.
Bu öğreticide, Graf nesnelerini Gremlin için Azure Cosmos DB kapsayıcısına içeri aktarmak ve güncelleştirmek için Azure Cosmos DB toplu yürütücü kitaplığını kullanmayı öğreneceksiniz. Bu işlem sırasında, kitaplık kullanarak köşe ve kenar nesnelerini program aracılığıyla oluşturur ve ardından ağ isteği başına birden çok nesne eklersiniz.
Gremlin sorgularını, komutların değerlendirildiği ve ardından birer birer yürütüldüğü bir veritabanına göndermek yerine, nesneleri yerel olarak oluşturmak ve doğrulamak için toplu yürütücü kitaplığını kullanırsınız. Kitaplık grafik nesnelerini başlatıldıktan sonra, bunları sıralı olarak veritabanı hizmetine göndermenizi sağlar.
Bu yöntemi kullanarak, veri alımı hızlarını yüz kat artırabilirsiniz ve bu da onu ilk veri geçişlerini veya düzenli veri taşıma işlemlerini gerçekleştirmek için ideal bir yol haline getirir.
Toplu yürütücü kitaplığı artık aşağıdaki çeşitlerde gelir.
.NET
Önkoşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
Azure geliştirme iş yüküyle Visual Studio 2019. Visual Studio 2019 Community Edition'ı ücretsiz kullanmaya başlayabilirsiniz.
Azure aboneliği. Henüz aboneliğiniz yoksa ücretsiz bir Azure hesabı oluşturabilirsiniz.
Alternatif olarak, Azure aboneliği olmadan ücretsiz bir Azure Cosmos DB hesabı oluşturabilirsiniz.
Sınırsız koleksiyona sahip Gremlin için Azure Cosmos DB veritabanı. Başlamak için .NET'te Gremlin için Azure Cosmos DB'ye gidin.
Git. Başlamak için git indirmeleri sayfasına gidin.
Kopyalama
Bu örneği kullanmak için aşağıdaki komutu çalıştırın:
git clone https://github.com/Azure-Samples/azure-cosmos-graph-bulk-executor.git
Örneği almak için adresine .\azure-cosmos-graph-bulk-executor\dotnet\src\
gidin.
Örnek
IGraphBulkExecutor graphBulkExecutor = new GraphBulkExecutor("MyConnectionString", "myDatabase", "myContainer");
List<IGremlinElement> gremlinElements = new List<IGremlinElement>();
gremlinElements.AddRange(Program.GenerateVertices(Program.documentsToInsert));
gremlinElements.AddRange(Program.GenerateEdges(Program.documentsToInsert));
BulkOperationResponse bulkOperationResponse = await graphBulkExecutor.BulkImportAsync(
gremlinElements: gremlinElements,
enableUpsert: true);
Yürütme
Parametreleri, aşağıdaki tabloda açıklandığı gibi değiştirin:
Parametre | Açıklama |
---|---|
ConnectionString |
Hizmetiniz, Gremlin için Azure Cosmos DB hesabınızın Anahtarlar bölümünde bulabileceğiniz bağlantı dizesi. olarak AccountEndpoint=https://<account-name>.documents.azure.com:443/;AccountKey=<account-key>; biçimlendirilmiştir. |
DatabaseName , ContainerName |
Hedef veritabanının ve kapsayıcının adları. |
DocumentsToInsert |
Oluşturulacak belge sayısı (yalnızca yapay verilerle ilgilidir). |
PartitionKey |
Veri alımı sırasında her belgeyle bir bölüm anahtarının belirtilmesini sağlar. |
NumberOfRUs |
Yalnızca bir kapsayıcı henüz mevcut değilse ve yürütme sırasında oluşturulması gerekiyorsa geçerlidir. |
.NET'te tam örnek uygulamayı indirin.
Java
Örnek kullanım
Aşağıdaki örnek uygulama GraphBulkExecutor paketinin nasıl kullanılacağını göstermektedir. Örnekler doğrudan etki alanı nesnesi ek açıklamalarını veya POJO (düz eski Java nesnesi) nesnelerini kullanır. Hangisinin uygulama ve performans taleplerinizi daha iyi karşıladığını belirlemek için her iki yaklaşımı da denemenizi öneririz.
Kopyalama
Örneği kullanmak için aşağıdaki komutu çalıştırın:
git clone https://github.com/Azure-Samples/azure-cosmos-graph-bulk-executor.git
Örneği almak için adresine .\azure-cosmos-graph-bulk-executor\java\
gidin.
Önkoşullar
Bu örneği çalıştırmak için aşağıdaki yazılıma sahip olmanız gerekir:
- OpenJDK 11
- Maven
- Gremlin API'sini kullanacak şekilde yapılandırılmış bir Azure Cosmos DB hesabı
Örnek
private static void executeWithPOJO(Stream<GremlinVertex> vertices,
Stream<GremlinEdge> edges,
boolean createDocs) {
results.transitionState("Configure Database");
UploadWithBulkLoader loader = new UploadWithBulkLoader();
results.transitionState("Write Documents");
loader.uploadDocuments(vertices, edges, createDocs);
}
Yapılandırma
Örneği çalıştırmak için aşağıdaki yapılandırmaya bakın ve gerektiğinde değiştirin.
/resources/application.properties dosyası, Azure Cosmos DB'yi yapılandırmak için gereken verileri tanımlar. Gerekli değerler aşağıdaki tabloda açıklanmıştır:
Özellik | Açıklama |
---|---|
sample.sql.host |
Azure Cosmos DB tarafından sağlanan değer. Azure Cosmos DB hesabının Genel Bakış bölümünde bulabileceğiniz .NET SDK URI'sini kullandığınızdan emin olun. |
sample.sql.key |
Birincil veya ikincil anahtarı Azure Cosmos DB hesabının Anahtarlar bölümünden alabilirsiniz. |
sample.sql.database.name |
Örneği çalıştırmak için Azure Cosmos DB hesabındaki veritabanının adı. Veritabanı bulunamazsa örnek kod tarafından oluşturulur. |
sample.sql.container.name |
Örneği çalıştırmak için veritabanındaki kapsayıcının adı. Kapsayıcı bulunamazsa örnek kod tarafından oluşturulur. |
sample.sql.partition.path |
Kapsayıcıyı oluşturmanız gerekiyorsa yolu tanımlamak partitionKey için bu değeri kullanın. |
sample.sql.allow.throughput |
Kapsayıcı, burada tanımlanan aktarım hızı değerini kullanacak şekilde güncelleştirilir. Performans taleplerinizi karşılamak için çeşitli aktarım hızı seçeneklerini keşfediyorsanız, araştırmanız bittiğinde kapsayıcıdaki aktarım hızını sıfırladığınızdan emin olun. Kapsayıcının daha yüksek aktarım hızıyla sağlanmasıyla ilişkili maliyetler vardır. |
Yürütme
Yapılandırmayı ortamınıza göre değiştirdikten sonra aşağıdaki komutu çalıştırın:
mvn clean package
Ek güvenlik için, pom.xml dosyasındaki değeri olarak değiştirerek skipIntegrationTests
tümleştirme testlerini false
de çalıştırabilirsiniz.
Birim testlerini başarıyla çalıştırdıktan sonra örnek kodu çalıştırabilirsiniz:
java -jar target/azure-cosmos-graph-bulk-executor-1.0-jar-with-dependencies.jar -v 1000 -e 10 -d
Yukarıdaki komutu çalıştırmak, örneği küçük bir toplu iş (1.000 köşe ve kabaca 5.000 kenar) ile yürütür. Çalıştırılan birimleri ve çalıştırılacak örnek sürümü ayarlamak için aşağıdaki bölümlerdeki komut satırı bağımsız değişkenlerini kullanın.
Komut satırı bağımsız değişkenleri
Aşağıdaki tabloda açıklandığı gibi, bu örneği çalıştırırken çeşitli komut satırı bağımsız değişkenleri kullanılabilir:
Tartışma | Açıklama |
---|---|
--vertexCount (-v ) |
Uygulamaya kaç kişi köşesi oluşturulacağı bildirir. |
--edgeMax (-e ) |
Uygulamaya her köşe için oluşturulacak en fazla kenar sayısını bildirir. Oluşturucu, 1'den sağladığınız değere rastgele bir sayı seçer. |
--domainSample (-d ) |
Uygulamaya, , GremlinVertex ve GremlinEdge POJO'ları yerine kişi ve ilişki etki alanı yapılarını kullanarak örneği çalıştırmasını GraphBulkExecutors söyler. |
--createDocuments (-c ) |
Uygulamaya işlemleri kullanmasını create söyler. Bağımsız değişken yoksa, uygulama varsayılan olarak işlemleri kullanır upsert . |
Ayrıntılı örnek bilgiler
Kişi köşesi
Person sınıfı, aşağıdaki tabloda açıklandığı gibi sınıfa GremlinVertex
dönüştürmeye yardımcı olmak için çeşitli ek açıklamalarla donatılmış basit bir etki alanı nesnesidir:
Sınıf ek açıklaması | Açıklama |
---|---|
GremlinVertex |
Bu sınıfı kullanarak oluşturduğunuz tüm köşeleri tanımlamak için isteğe bağlı label parametresini kullanır. |
GremlinId |
Değer olarak ID hangi alanın kullanılacağını tanımlamak için kullanılır. Kişi sınıfındaki alan adı kimliktir, ancak gerekli değildir. |
GremlinProperty |
Veritabanında email depolandığında özelliğin adını değiştirmek için alanında kullanılır. |
GremlinPartitionKey |
Sınıfındaki hangi alanın bölüm anahtarını içerdiğini tanımlamak için kullanılır. Sağladığınız alan adı, kapsayıcıdaki bölüm yolu tarafından tanımlanan değerle eşleşmelidir. |
GremlinIgnore |
Alanı veritabanına yazılan özelliğin dışında tutmak isSpecial için kullanılır. |
RelationshipEdge sınıfı
RelationshipEdge
sınıfı çok yönlü bir etki alanı nesnesidir. Alan düzeyi etiket ek açıklamasını kullanarak, aşağıdaki tabloda gösterildiği gibi kenar türlerinden oluşan dinamik bir koleksiyon oluşturabilirsiniz:
Sınıf ek açıklaması | Açıklama |
---|---|
GremlinEdge |
GremlinEdge sınıfındaki dekorasyon, belirtilen bölüm anahtarı için alanın adını tanımlar. Kenar belgesi oluşturduğunuzda, atanan değer kaynak köşe bilgilerinden gelir. |
GremlinEdgeVertex |
İki örneği GremlinEdgeVertex tanımlanır ve biri kenarın her kenarı için (kaynak ve hedef). Örneğimizde alanın veri türü olarak GremlinEdgeVertexInfo bulunur. Sınıfı tarafından sağlanan bilgiler, uç öğesinin GremlinEdgeVertex veritabanında doğru şekilde oluşturulması için gereklidir. Bir diğer seçenek de köşelerin veri türünün ek açıklamalarla GremlinVertex süslenmiş bir sınıf olmasıdır. |
GremlinLabel |
Örnek kenar, değeri tanımlamak label için bir alan kullanır. Aynı temel etki alanı sınıfını kullandığından çeşitli etiketlerin tanımlanmasına izin verir. |
Çıktı açıklandı
Konsol, çalıştırmasını, örneğin çalışma sürelerini açıklayan bir JSON dizesiyle tamamlar. JSON dizesi aşağıdaki bilgileri içerir:
JSON dizesi | Açıklama |
---|---|
startTime | System.nanoTime() İşlemin ne zaman başladığı. |
endTime | System.nanoTime() İşlemin ne zaman bittiği. |
durationInNanoSeconds | ve startTime değerleri arasındaki endTime fark. |
durationInMinutes | Dakikalara durationInNanoSeconds dönüştürülen değer. Değer durationInMinutes , zaman değeri olarak değil, kayan sayı olarak temsil edilir. Örneğin, 2,5 değeri 2 dakika 30 saniyeyi temsil eder. |
vertexCount | Oluşturulan köşelerin hacmi, komut satırı yürütmesine geçirilen değerle eşleşmelidir. |
edgeCount | Statik olmayan ve rastgelelik öğesiyle oluşturulan uçların hacmi. |
özel durum | Yalnızca çalıştırmayı yapmaya çalıştığınızda bir özel durum oluştuğunda doldurulur. |
States dizisi
states dizisi, yürütme içindeki her adımın ne kadar sürdüğüne ilişkin içgörü sağlar. Adımlar aşağıdaki tabloda açıklanmıştır:
Yürütme adımı | Açıklama |
---|---|
Örnek köşeler oluşturma | İstenen kişi nesne hacmini ima etmek için gereken süre. |
Örnek kenarlar oluşturma | İlişki nesnelerinin izdişimini yapmak için gereken süre. |
Veritabanını yapılandırma | veritabanını yapılandırmak için gereken süre, içinde application.properties sağlanan değerlere göredir. |
Belge yazma | Belgeleri veritabanına yazma süresi. |
Her durum aşağıdaki değerleri içerir:
Durum değeri | Açıklama |
---|---|
stateName |
Raporlanan durumun adı. |
startTime |
Durum System.nanoTime() başlatıldığındaki değer. |
endTime |
Durum System.nanoTime() tamamlandığında değer. |
durationInNanoSeconds |
ve startTime değerleri arasındaki endTime fark. |
durationInMinutes |
Dakikalara durationInNanoSeconds dönüştürülen değer. Değer durationInMinutes , zaman değeri olarak değil, kayan sayı olarak temsil edilir. Örneğin, 2,5 değeri 2 dakika 30 saniyeyi temsil eder. |
Sonraki adımlar
- Bu ad alanında tanımlanan sınıflar ve yöntemler hakkında daha fazla bilgi için BulkExecutor Java açık kaynak belgelerini gözden geçirin.
- .NET SDK makalesini kullanarak Verileri Azure Cosmos DB SQL API hesabına toplu içeri aktarma makalesine bakın. Bu toplu mod belgeleri .NET V3 SDK'sının bir parçasıdır.