Adatok tömeges betöltése a Gremlinhez készült Azure Cosmos DB-ben 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 gerinchálózata a legjobb teljesítményt nyújtja, 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ó: A tömeges támogatás bemutatása a .NET SDK-ban.

Ebből az oktatóanyagból 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ói kódtá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 elküldje ő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ódja a kezdeti adatmigrálásoknak vagy az időszakos adatáthelyezési műveleteknek.

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

.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 nyissa meg a következőt .\azure-cosmos-graph-bulk-executor\dotnet\src\: .

Sample


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. Formátuma 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 az adatbetöltés során minden dokumentumhoz meg legyen adva partíciókulcs.
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 bemutatja a GraphBulkExecutor csomag használatát. A minták a tartományi objektum széljegyzeteit vagy a POJO (egyszerű régi Java-objektum) objektumokat használják közvetlenül. Javasoljuk, hogy próbálkozzon mindkét megközelítéssel annak meghatározásához, hogy melyik felel meg jobban az implementációnak és a 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 nyissa meg a következőt .\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

Sample

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 a következő táblázat ismerteti:

Tulajdonság Leírás
sample.sql.host Az Azure Cosmos DB által megadott é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ókban található adatbázis neve. Ha az adatbázis nem található, a mintakód létrehozza.
sample.sql.container.name Annak a tárolónak a neve az adatbázisban, amelyen futtatni szeretné a mintát. 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, ezzel az értékkel határozhatja meg az partitionKey elérési utat.
sample.sql.allow.throughput A tároló frissül, hogy az itt meghatározott átviteli sebességértéket használja. Ha különböző átviteli lehetőségeket vizsgál a teljesítményigények kielégítése érdekében, mindenképpen állítsa alaphelyzetbe az átviteli sebességet a tárolón, amikor végzett a feltárással. A tároló magasabb átviteli sebességgel való kiépítésének 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 skipIntegrationTestspom.xml fájl értékét értékre 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 kis köteggel (1000 csúcsponttal és nagyjából 5000 éllel) hajtja végre a mintát. A következő szakaszokban található parancssori argumentumokkal 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:

Argumentum Description
--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 kapcsolattartomány-struktúrák használatával a GraphBulkExecutors, GremlinVertexés GremlinEdge POJO-k helyett.
--createDocuments (-c) Utasítja az alkalmazást, hogy használjon create műveleteket. Ha az argumentum nincs megadva, az alkalmazás alapértelmezés szerint műveleteket használ upsert .

Részletes mintaadatok

Személy csúcspontja

A személyosztály egy egyszerű tartományi objektum, amelyet több jegyzettel díszítettek az GremlinVertex osztályba való átalakítás elősegítése érdekében, az alábbi táblázatban leírtak szerint:

Osztályjegyzet Description
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őt fogja használni értékként ID . A személyosztály mezőneve azonosító, de nincs rá szükség.
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őjében található a partíciókulcs. A megadott mezőnévnek meg kell egyeznie a tároló partíciós ú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 Description
GremlinEdge Az GremlinEdge osztály díszítése határozza meg a megadott partíciókulcs mezőjének nevét. Éldokumentum 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 peremhálózat 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étrejönjön 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 a minta futási idejét írja le. A JSON-sztring a következő információkat tartalmazza:

JSON-sztring Description
startTime A System.nanoTime() folyamat kezdetének kezdete.
endTime A System.nanoTime() folyamat befejeztével.
durationInNanoSeconds A és startTime az endTime értékek közötti különbség.
durationInMinutes A durationInNanoSeconds percekké konvertált érték. Az durationInMinutes érték lebegőpontos számként jelenik meg, nem időértékként. A 2,5 érték például 2 percet és 30 másodpercet jelent.
csúcspontCount A létrehozott csúcspontok mennyisége, amelynek meg kell egyeznie a parancssori végrehajtás során átadott értékkel.
edgeCount A létrehozott élek mennyisége, amely nem statikus, és véletlenszerűséggel van felépítve.
kivétel Csak akkor töltődik fel, ha a futtatás megkísérlésekor kivételt jelez.

Állapottömb

Az állapottömb betekintést nyújt a végrehajtás egyes lépéseinek időtartamába. A lépéseket a következő táblázat ismerteti:

Végrehajtási lépés Description
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 rendszerben application.propertiesmegadott é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 Description
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 és startTime az endTime értékek közötti különbség.
durationInMinutes A durationInNanoSeconds percekké konvertált érték. Az durationInMinutes érték lebegőpontos számként jelenik meg, nem időértékként. A 2,5 érték például 2 percet és 30 másodpercet jelent.

Következő lépések