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:
Visual Studio 2019 az Azure fejlesztési számítási feladatával. A Visual Studio 2019 Community Edition ingyenesen használható.
Azure-előfizetés. Ha még nem rendelkezik előfizetéssel, létrehozhat egy ingyenes Azure-fiókot.
Másik lehetőségként létrehozhat egy ingyenes Azure Cosmos DB-fiókot Azure-előfizetés nélkül.
Egy Azure Cosmos DB for Gremlin-adatbázis korlátlan gyűjteménysel. Első lépésként nyissa meg az Azure Cosmos DB for Gremlint a .NET-ben.
Git. Első lépésként nyissa meg a git letöltési oldalát.
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 false
mó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 GraphBulkExecutors POJO 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
- Az ebben a névtérben definiált osztályokról és metódusokról további információt a BulkExecutor Java nyílt forráskód dokumentációjában talál.
- Tekintse meg az Adatok tömeges importálása az Azure Cosmos DB SQL API-fiókba című cikket a .NET SDK-cikk használatával. Ez a tömeges módú dokumentáció a .NET V3 SDK része.