Aracılığıyla paylaş


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:

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 falsede ç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, , GremlinVertexve GremlinEdge POJO'ları yerine kişi ve ilişki etki alanı yapılarını kullanarak örneği çalıştırmasını GraphBulkExecutorssö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 GremlinEdgeVertexInfobulunur. 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.propertiessağ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