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:
Visual Studio 2019 az Azure fejlesztési számítási feladattal. 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 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 skipIntegrationTests
pom.xml fájl értékét értékre 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 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.properties megadott é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
- Az ebben a névtérben definiált osztályokról és metódusokról a BulkExecutor Java nyílt forráskód dokumentációjában talál további információt.
- Lásd: Adatok tömeges importálása az Azure Cosmos DB SQL API-fiókba a .NET SDK használatával . Ez a tömeges módú dokumentáció a .NET V3 SDK része.