Megosztás a következőn keresztül:


Adatok tömeges betöltése a Gremlinhez készült Azure Cosmos DB-ben egy tömeges végrehajtói kódtár használatával

A KÖVETKEZŐKRE VONATKOZIK: Gremlin

A gráfadatbázisoknak gyakran tömegesen kell betöltenie az adatokat egy teljes gráf frissítéséhez vagy egy részének frissítéséhez. Az Azure Cosmos DB, az elosztott adatbázis és a Gremlinhez készült Azure Cosmos DB gerince a legjobban úgy működik, ha a terhelések megfelelően vannak elosztva. Az Azure Cosmos DB tömeges végrehajtói kódtárait úgy tervezték, hogy kihasználják az Azure Cosmos DB egyedi képességeit, és optimális teljesítményt nyújtsanak. További információ: Bevezetés a tömeges támogatásba a .NET SDK-ban.

Ebben az oktatóanyagban megtudhatja, hogyan importálhat és frissíthet gráfobjektumokat egy Azure Cosmos DB for Gremlin-tárolóba az Azure Cosmos DB tömeges végrehajtói kódtárával. A folyamat során a kódtár használatával programozott módon hozhat létre csúcs - és élobjektumokat , majd hálózati kérésenként több objektumot szúrhat be.

Ahelyett, hogy Gremlin-lekérdezéseket küldene egy adatbázisba, ahol a parancsok kiértékelése és végrehajtása egyenként történik, a tömeges végrehajtótár használatával helyileg hozhatja létre és ellenőrizheti az objektumokat. Miután a kódtár inicializálja a gráfobjektumokat, lehetővé teszi, hogy egymás után küldje el őket az adatbázis-szolgáltatásnak.

Ezzel a módszerrel akár százszorosára is növelheti az adatbetöltési sebességet, ami ideális módszer a kezdeti adatmigrálások vagy az időszakos adatáthelyezési műveletek végrehajtására.

A tömeges végrehajtói kódtár most a következő fajtákba kerül.

.NET

Előfeltételek

Mielőtt hozzákezdene, győződjön meg arról, hogy rendelkezik az alábbiakval:

Klónozás

A minta használatához futtassa a következő parancsot:

git clone https://github.com/Azure-Samples/azure-cosmos-graph-bulk-executor.git

A minta lekéréséhez lépjen a következőre .\azure-cosmos-graph-bulk-executor\dotnet\src\: .

Minta


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);

Végrehajtás

Módosítsa a paramétereket az alábbi táblázatban leírtak szerint:

Paraméter Leírás
ConnectionString A szolgáltatás kapcsolati sztring, amelyet az Azure Cosmos DB for Gremlin-fiók Kulcsok szakaszában talál. Úgy van formázva, mint AccountEndpoint=https://<account-name>.documents.azure.com:443/;AccountKey=<account-key>;.
DatabaseName, ContainerName A céladatbázis és a tároló neve.
DocumentsToInsert A létrehozandó dokumentumok száma (csak a szintetikus adatokra vonatkozik).
PartitionKey Biztosítja, hogy minden dokumentumhoz meg legyen adva partíciókulcs az adatbetöltés során.
NumberOfRUs Csak akkor releváns, ha egy tároló még nem létezik, és a végrehajtás során létre kell hozni.

Töltse le a teljes mintaalkalmazást a .NET-ben.

Java

Mintahasználat

Az alábbi mintaalkalmazás a GraphBulkExecutor-csomag használatát mutatja be. A minták közvetlenül a tartományi objektum széljegyzeteit vagy a POJO (egyszerű régi Java-objektum) objektumokat használják. Javasoljuk, hogy mindkét módszert kipróbálva állapítsa meg, hogy melyik felel meg jobban a megvalósítási és teljesítményigénynek.

Klónozás

A minta használatához futtassa a következő parancsot:

git clone https://github.com/Azure-Samples/azure-cosmos-graph-bulk-executor.git

A minta lekéréséhez lépjen a következőre .\azure-cosmos-graph-bulk-executor\java\: .

Előfeltételek

A minta futtatásához a következő szoftverre van szükség:

  • OpenJDK 11
  • Maven
  • Egy Azure Cosmos DB-fiók, amely a Gremlin API használatára van konfigurálva

Minta

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);
    }

Konfiguráció

A minta futtatásához tekintse meg a következő konfigurációt, és szükség szerint módosítsa.

A /resources/application.properties fájl határozza meg az Azure Cosmos DB konfigurálásához szükséges adatokat. A szükséges értékeket az alábbi táblázat ismerteti:

Tulajdonság Leírás
sample.sql.host Az Azure Cosmos DB által biztosított érték. Győződjön meg arról, hogy a .NET SDK URI-t használja, amelyet az Azure Cosmos DB-fiók Áttekintés szakaszában talál.
sample.sql.key Az elsődleges vagy másodlagos kulcsot az Azure Cosmos DB-fiók Kulcsok szakaszából szerezheti be.
sample.sql.database.name A minta futtatásához az Azure Cosmos DB-fiókon belüli adatbázis neve. Ha az adatbázis nem található, a mintakód létrehozza azt.
sample.sql.container.name Annak a tárolónak a neve az adatbázisban, amelyen a mintát futtatni szeretné. Ha a tároló nem található, a mintakód létrehozza.
sample.sql.partition.path Ha létre kell hoznia a tárolót, használja ezt az értéket az partitionKey elérési út meghatározásához.
sample.sql.allow.throughput A tároló frissül az itt definiált átviteli sebesség értékének használatára. Ha a teljesítményigények kielégítése érdekében különböző átviteli lehetőségeket keres, a feltárás befejezésekor mindenképpen állítsa alaphelyzetbe a tároló átviteli sebességét. A tároló magasabb átviteli sebességgel való elhagyásával kapcsolatos költségek merülnek fel.

Végrehajtás

Miután módosította a konfigurációt a környezetének megfelelően, futtassa a következő parancsot:

mvn clean package 

A biztonság érdekében az integrációs teszteket úgy is futtathatja, hogy a skipIntegrationTests pom.xml fájl értékét a következőre falsemódosítja.

Az egységtesztek sikeres futtatása után futtathatja a mintakódot:

java -jar target/azure-cosmos-graph-bulk-executor-1.0-jar-with-dependencies.jar -v 1000 -e 10 -d

Az előző parancs futtatása egy kis köteggel (1000 csúcsponttal és nagyjából 5000 éllel) hajtja végre a mintát. A következő szakaszok parancssori argumentumai segítségével módosíthatja a futtatott köteteket és a futtatandó mintaverziót.

Parancssori argumentumok

A minta futtatása során számos parancssori argumentum érhető el, az alábbi táblázatban leírtak szerint:

Vita Leírás
--vertexCount (-v) Megadja az alkalmazásnak, hogy hány csúcspontot kell létrehoznia.
--edgeMax (-e) Megadja az alkalmazásnak az egyes csúcspontokhoz létrehozandó élek maximális számát. A generátor véletlenszerűen kiválaszt egy számot 1-től a megadott értékig.
--domainSample (-d) Arra utasítja az alkalmazást, hogy futtassa a mintát a személy- és kapcsolati tartománystruktúrák használatával a , GremlinVertexés GremlinEdge a GraphBulkExecutorsPOJO helyett.
--createDocuments (-c) Utasítja az alkalmazást, hogy használjon create műveleteket. Ha az argumentum nem jelenik meg, az alkalmazás alapértelmezés szerint műveleteket használ upsert .

Részletes mintainformációk

Személy csúcspontja

A személyosztály egy egyszerű tartományi objektum, amelyet több széljegyzet díszít, hogy segítsen az GremlinVertex osztályba való átalakításban az alábbi táblázatban leírtak szerint:

Osztályjegyzet Leírás
GremlinVertex Az opcionális label paraméterrel definiálja az osztály használatával létrehozott összes csúcspontot.
GremlinId Annak meghatározására szolgál, hogy melyik mező lesz az ID érték. A személyosztály mezőneve azonosító, de nem kötelező.
GremlinProperty A mezőben a email tulajdonság nevének módosítására szolgál, amikor az adatbázisban van tárolva.
GremlinPartitionKey Annak meghatározására szolgál, hogy az osztály melyik mezője tartalmazza a partíciókulcsot. A megadott mezőnévnek meg kell egyeznie a tároló partícióútvonala által meghatározott értékkel.
GremlinIgnore A mező kizárására isSpecial szolgál az adatbázisba írt tulajdonságból.

A RelationshipEdge osztály

Az RelationshipEdge osztály egy sokoldalú tartományobjektum. A mezőszintű címke széljegyzetének használatával dinamikus éltípus-gyűjteményt hozhat létre az alábbi táblázatban látható módon:

Osztályjegyzet Leírás
GremlinEdge Az GremlinEdge osztály díszítése határozza meg a megadott partíciókulcs mezőjének nevét. Peremdokumentum létrehozásakor a hozzárendelt érték a forrás csúcsadataiból származik.
GremlinEdgeVertex Két példány GremlinEdgeVertex van definiálva, egy a perem mindkét oldalán (forrás és cél). A mintánkban a mező adattípusa a következő GremlinEdgeVertexInfo: . Az osztály által GremlinEdgeVertex megadott információk szükségesek ahhoz, hogy a peremhálózat megfelelően létre legyen hozva az adatbázisban. Egy másik lehetőség az lenne, hogy a csúcspontok adattípusa egy olyan osztály legyen, amelyet a GremlinVertex széljegyzetek díszítenek.
GremlinLabel A minta éle egy mezőt használ az label érték meghatározásához. Lehetővé teszi a különböző címkék meghatározását, mivel ugyanazt az alaptartományosztályt használja.

Kimenet magyarázata

A konzol egy JSON-sztringgel fejezi be a futtatását, amely leírja a minta futási idejét. A JSON-sztring a következő információkat tartalmazza:

JSON-sztring Leírás
startTime A System.nanoTime() folyamat kezdetének kezdete.
endTime A System.nanoTime() folyamat befejezése.
durationInNanoSeconds A különbség az értékek és startTime az endTime értékek között.
durationInMinutes A durationInNanoSeconds percekké konvertált érték. Az durationInMinutes érték lebegőpontos számként van ábrázolva, nem időértékként. Egy 2,5-ös érték például 2 perc 30 másodpercet jelent.
csúcspontCount A generált csúcspontok mennyisége, amelynek meg kell egyeznie a parancssori végrehajtásba átadott értékkel.
edgeCount A létrehozott élek mennyisége, amely nem statikus, és véletlenszerűségi elemekkel van felépítve.
exception Csak akkor van feltöltve, ha a futtatás megkísérlésekor kivétel jelenik meg.

Állapottömb

Az állapottömb bemutatja, hogy a végrehajtás egyes lépései mennyi ideig tartnak. A lépéseket a következő táblázat ismerteti:

Végrehajtási lépés Leírás
Minta csúcspontok létrehozása A személyobjektumok kért mennyiségének létrehozásához szükséges idő.
Minta élek létrehozása A kapcsolatobjektumok létrehozásához szükséges idő.
Adatbázis konfigurálása Az adatbázis konfigurálásához szükséges idő a megadott application.propertiesértékek alapján.
Dokumentumok írása A dokumentumok adatbázisba való írásához szükséges idő.

Minden állapot a következő értékeket tartalmazza:

Állapotérték Leírás
stateName A jelentett állapot neve.
startTime Az System.nanoTime() az érték, amikor az állapot elindult.
endTime Az System.nanoTime() az érték, amikor az állapot befejeződött.
durationInNanoSeconds A különbség az értékek és startTime az endTime értékek között.
durationInMinutes A durationInNanoSeconds percekké konvertált érték. Az durationInMinutes érték lebegőpontos számként van ábrázolva, nem időértékként. Egy 2,5-ös érték például 2 perc 30 másodpercet jelent.

Következő lépések