Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fontos
Olyan adatbázismegoldást keres nagy léptékű forgatókönyvekhez, amelyekben 99,9999-es% rendelkezésre állási szolgáltatásiszint-szerződés (SLA), azonnali automatikus skálázás és automatikus feladatátvétel több régióban? Fontolja meg az Azure Cosmos DB for NoSQL-t.
Szeretne egy online elemzési feldolgozási (OLAP) gráfot implementálni, vagy migrálni egy meglévő Apache Gremlin-alkalmazást? Fontolja meg a Graph használatát a Microsoft Fabricben.
Ismerkedés az Apache Gremlinhez készült Azure Cosmos DB ügyfélkódtárával, amellyel Node.js strukturálatlan adatokat tárolhat, kezelhet és kérdezhet le. Kövesse az útmutató lépéseit egy új fiók létrehozásához, egy Node.js ügyfélkódtár telepítéséhez, a fiókhoz való csatlakozáshoz, a gyakori műveletek végrehajtásához és a végső mintaadatok lekérdezéséhez.
Kódtár forráskódcsomagja | (npm)
Előfeltételek
Azure-előfizetés
- Ha nincs Azure-előfizetésed, hozz létre egy ingyenes fiókot mielőtt elkezdenéd.
Az Azure CLI legújabb verziója az Azure Cloud Shellben.
- Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, jelentkezzen be az Azure CLI-be a
az loginparancs használatával.
- Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, jelentkezzen be az Azure CLI-be a
- Node.js 22 vagy újabb
Beállítás
Először állítsa be az útmutató fiók- és fejlesztési környezetét. Ez a szakasz végigvezeti a fiók létrehozásának, a hitelesítő adatok beszerzésének, majd a fejlesztési környezet előkészítésének folyamatán.
Fiók létrehozása
Először hozzon létre egy API-t Apache Gremlin-fiókhoz. A fiók létrehozása után hozza létre az adatbázis- és gráferőforrásokat.
Ha még nincs célerőforráscsoportja, a
az group createparanccsal hozzon létre egy új erőforráscsoportot az előfizetésben.az group create \ --name "<resource-group-name>" \ --location "<location>"az cosmosdb createA paranccsal hozzon létre egy új Azure Cosmos DB-fiókot az Apache Gremlinhez alapértelmezett beállításokkal.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableGremlin"Hozzon létre egy új adatbázist a
az cosmosdb gremlin database createnevűcosmicworkshasználatával.az cosmosdb gremlin database create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"az cosmosdb gremlin graph createA parancs használatával hozzon létre egy új gráfot.productsaz cosmosdb gremlin graph create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --database-name "cosmicworks" \ --name "products" \ --partition-key-path "/category"
Hitelesítő adatok lekérése
Most szerezze be az ügyfélkódtár jelszavát, amellyel kapcsolatot hozhat létre a nemrég létrehozott fiókkal.
Használja a
az cosmosdb show-t a fiók gazdagépének lekéréséhez.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{host:name}"Jegyezze fel a
hosttulajdonság értékét az előző parancsok kimenetéből. Ennek a tulajdonságnak az értéke az a gazdagép, amelyet az útmutató későbbi részében a könyvtárhoz való csatlakozáshoz használ az account összekapcsolásához.A fiók
az cosmosdb keys listlekéréséhez használható.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Jegyezze fel a
primaryMasterKeytulajdonság értékét az előző parancsok kimenetéből. Ez a tulajdonság értéke az a kulcs, amelyet az útmutató későbbi részében használ, hogy csatlakozzon a fiókhoz a könyvtárral.
Fejlesztési környezet előkészítése
Ezután konfigurálja a fejlesztési környezetet egy új projekttel és az ügyfélkódtárral. Ez a lépés az utolsó szükséges előfeltétel, mielőtt továbblépne az útmutató többi részére.
Kezdje egy üres mappában.
Új modul inicializálása.
npm init es6 --yesTelepítse a csomagot a
gremlinNode Package Managerből (npm).npm install --save gremlinHozza létre a index.js fájlt.
Kezdje egy üres mappában.
Új modul inicializálása.
npm init es6 --yesTelepítse a csomagot a
typescriptNode Package Managerből (npm).npm install --save-dev typescriptTelepítse az
tsxcsomagot az npm-ből.npm install --save-dev tsxTelepítse az
gremlincsomagot az npm-ből.npm install --save gremlinTelepítse az
@types/nodecsomagot az npm-ből.npm install --save-dev @types/nodeTelepítse az
@types/gremlincsomagot az npm-ből.npm install --save-dev @types/gremlinInicializálja a TypeScript-projektet a fordítóval (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextHozza létre a index.ts fájlt.
Objektummodell
| Leírás | |
|---|---|
DriverRemoteConnection |
A Gremlin-kiszolgálóhoz való kapcsolatot jelöli |
GraphTraversalSource |
Gremlin-bejárások létrehozására és végrehajtására szolgál |
Kódpéldák
Ügyfél hitelesítése
Első lépésként hitelesíti az ügyfelet az útmutatóban korábban összegyűjtött hitelesítő adatokkal.
Nyissa meg a index.js fájlt az integrált fejlesztési környezetben (IDE).
Importálja a
gremlincsomagot és a szükséges típusokat:import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Sztringváltozók létrehozása az útmutatóban korábban gyűjtött hitelesítő adatokhoz. Nevezze el a változókat
hostnameésprimaryKeya .const hostname = '<host>'; const primaryKey = '<key>';Hozzon létre egy típusobjektumot
PlainTextSaslAuthenticatoraz előző lépésekben létrehozott hitelesítő adatok és konfigurációs változók használatával. Tárolja az objektumot egy névvel ellátottauthenticatorváltozóban.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Hozzon létre egy objektumot
Clienta hitelesítő változó használatával. Nevezze el a változótclient.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Nyissa meg a index.ts fájlt az integrált fejlesztési környezetben (IDE).
Importálja a
gremlincsomagot és a szükséges típusokat:import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Sztringváltozók létrehozása az útmutatóban korábban gyűjtött hitelesítő adatokhoz. Nevezze el a változókat
hostnameésprimaryKeya .const hostname: string = '<host>'; const primaryKey: string = '<key>';Hozzon létre egy típusobjektumot
PlainTextSaslAuthenticatoraz előző lépésekben létrehozott hitelesítő adatok és konfigurációs változók használatával. Tárolja az objektumot egy névvel ellátottauthenticatorváltozóban.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Hozzon létre egy objektumot
Clienta hitelesítő változó használatával. Nevezze el a változótclient.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Adatok beszúrása
Ezután szúrjon be új csúcs- és éladatokat a gráfba. Az új adatok létrehozása előtt törölje a meglévő adatok gráfját.
Futtassa a
g.V().drop()lekérdezést a gráf összes csúcsának és élének eltávolításához.await client.submit('g.V().drop()');Hozzon létre egy Gremlin-lekérdezést, amely egy csúcspontot ad hozzá.
const insert_vertex_query = ` g.addV('product') .property('id', prop_id) .property('name', prop_name) .property('category', prop_category) .property('quantity', prop_quantity) .property('price', prop_price) .property('clearance', prop_clearance) `;Adjon hozzá egy csúcspontot egyetlen termékhez.
await client.submit(insert_vertex_query, { prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', prop_name: 'Yamba Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 12, prop_price: 850.00, prop_clearance: false, });Adjon hozzá két további csúcspontot két további termékhez.
await client.submit(insert_vertex_query, { prop_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_name: 'Montau Turtle Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 5, prop_price: 600.00, prop_clearance: true, }); await client.submit(insert_vertex_query, { prop_id: 'cccccccc-2222-3333-4444-dddddddddddd', prop_name: 'Noosa Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 31, prop_price: 1100.00, prop_clearance: false, });Hozzon létre egy újabb Gremlin-lekérdezést, amely élt ad hozzá.
const insert_edge_query = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Adjon hozzá két élt.
await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'cccccccc-2222-3333-4444-dddddddddddd', });
Futtassa a
g.V().drop()lekérdezést a gráf összes csúcsának és élének eltávolításához.await client.submit('g.V().drop()');Hozzon létre egy Gremlin-lekérdezést, amely egy csúcspontot ad hozzá.
const insert_vertex_query: string = ` g.addV('product') .property('id', prop_id) .property('name', prop_name) .property('category', prop_category) .property('quantity', prop_quantity) .property('price', prop_price) .property('clearance', prop_clearance) `;Adjon hozzá egy csúcspontot egyetlen termékhez.
await client.submit(insert_vertex_query, { prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', prop_name: 'Yamba Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 12, prop_price: 850.00, prop_clearance: false, });Adjon hozzá két további csúcspontot két további termékhez.
await client.submit(insert_vertex_query, { prop_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_name: 'Montau Turtle Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 5, prop_price: 600.00, prop_clearance: true, }); await client.submit(insert_vertex_query, { prop_id: 'cccccccc-2222-3333-4444-dddddddddddd', prop_name: 'Noosa Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 31, prop_price: 1100.00, prop_clearance: false, });Hozzon létre egy újabb Gremlin-lekérdezést, amely élt ad hozzá.
const insert_edge_query: string = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Adjon hozzá két élt.
await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'cccccccc-2222-3333-4444-dddddddddddd', });
Adatok beolvasása
Ezután olvassa be a gráfba korábban beszúrt adatokat.
Hozzon létre egy lekérdezést, amely beolvassa a csúcsot az egyedi azonosító és a partíciókulcs értéke alapján.
const read_vertex_query = 'g.V([prop_partition_key, prop_id])';Ezután olvassa el a csúcspontot a szükséges paraméterek megadásával.
let read_results = await client.submit(read_vertex_query, { prop_partition_key: 'gear-surf-surfboards', prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); let matched_item = read_results._items[0];
Hozzon létre egy lekérdezést, amely beolvassa a csúcsot az egyedi azonosító és a partíciókulcs értéke alapján.
const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';Ezután olvassa el a csúcspontot a szükséges paraméterek megadásával.
let read_results = await client.submit(read_vertex_query, { prop_partition_key: 'gear-surf-surfboards', prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); let matched_item = read_results._items[0];
Adatok lekérdezése
Végül egy lekérdezéssel megkeresheti az összes olyan adatot, amely megfelel egy adott bejárásnak vagy szűrésnek a gráfban.
Hozzon létre egy lekérdezést, amely megkeresi az összes csúcsot, amely egy adott csúcsból halad ki.
const find_vertices_query = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Hajtsa végre a terméket meghatározó lekérdezést
Montau Turtle Surfboard.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Iterálja át a lekérdezés eredményeit.
for (const item of find_results._items) { // Do something here with each result }
Hozzon létre egy lekérdezést, amely megkeresi az összes csúcsot, amely egy adott csúcsból halad ki.
const find_vertices_query: string = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Hajtsa végre a terméket meghatározó lekérdezést
Montau Turtle Surfboard.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Iterálja át a lekérdezés eredményeit.
for (const item of find_results._items) { // Do something here with each result }
A kód futtatása
Futtassa az újonnan létrehozott alkalmazást egy terminál használatával az alkalmazáskönyvtárban.
node index.js
npx tsx index.ts
Az erőforrások eltávolítása
Ha már nincs szüksége a fiókra, távolítsa el a fiókot az Azure-előfizetésből az erőforrás törlésével .
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"