Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Suchen Sie nach einer Datenbanklösung für hochskalige Szenarien mit einer Vereinbarung über verfügbarkeitsbasierte Servicelevels (Service Level Agreement, SLA) von 99,999% Verfügbarkeit, sofortige Automatische Skalierung und automatisches Failover über mehrere Regionen hinweg? Betrachten Sie Azure Cosmos DB für NoSQL.
Möchten Sie ein OLAP-Diagramm (Online Analytical Processing) implementieren oder eine vorhandene Apache Gremlin-Anwendung migrieren? Betrachten Sie Graph in Microsoft Fabric.
Verwenden Sie die Azure Cosmos DB-Clientbibliothek für Apache Gremlin von Node.js, um unstrukturierte Daten zu speichern, zu verwalten und abzufragen. Führen Sie die Schritte in diesem Handbuch aus, um ein neues Konto zu erstellen, eine Node.js Clientbibliothek zu installieren, eine Verbindung mit dem Konto herzustellen, allgemeine Vorgänge auszuführen und Ihre endgültigen Beispieldaten abzufragen.
Quellcode der Bibliothek | Paket (npm)
Voraussetzungen
Ein Azure-Abonnement
- Wenn Sie noch kein Azure-Abonnement haben, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
Die neueste Version der Azure CLI in Azure Cloud Shell.
- Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, melden Sie sich mit dem
az loginBefehl bei der Azure CLI an.
- Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, melden Sie sich mit dem
- Node.js 22 oder höher
Einrichten
Richten Sie zunächst die Konto- und Entwicklungsumgebung für diesen Leitfaden ein. In diesem Abschnitt erfahren Sie, wie Sie ein Konto erstellen, die Anmeldeinformationen des Kontos abrufen und Ihre Entwicklungsumgebung vorbereiten.
Erstellen eines Kontos
Erstellen Sie zunächst eine API für Apache Gremlin-Konto. Nachdem das Konto erstellt wurde, erstellen Sie die Datenbank- und Diagrammressourcen.
Wenn Sie noch keine Zielressourcengruppe haben, verwenden Sie den
az group createBefehl, um eine neue Ressourcengruppe in Ihrem Abonnement zu erstellen.az group create \ --name "<resource-group-name>" \ --location "<location>"Verwenden Sie den
az cosmosdb createBefehl, um ein neues Azure Cosmos DB für Apache Gremlin-Konto mit Standardeinstellungen zu erstellen.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableGremlin"Erstellen Sie eine neue Datenbank mit
az cosmosdb gremlin database create, diecosmicworksheißt.az cosmosdb gremlin database create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Verwenden Sie den
az cosmosdb gremlin graph createBefehl, um ein neues Diagramm mit dem Namenproductszu erstellen.az cosmosdb gremlin graph create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --database-name "cosmicworks" \ --name "products" \ --partition-key-path "/category"
Abrufen von Anmeldeinformationen
Rufen Sie nun das Kennwort für die Clientbibliothek ab, um eine Verbindung mit dem vor Kurzem erstellten Konto herzustellen.
Verwenden Sie
az cosmosdb show, um den Host für das Konto zu erhalten.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{host:name}"Notieren Sie den Wert der Eigenschaft
hostaus der Ausgabe des vorherigen Befehls. Der Wert dieser Eigenschaft ist der Host, den Sie später in dieser Anleitung verwenden, um eine Verbindung mit dem Konto mit der Bibliothek herzustellen.Verwenden Sie
az cosmosdb keys list, um die Schlüssel für das Konto zu erhalten.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Notieren Sie den Wert der Eigenschaft
primaryMasterKeyaus der Ausgabe des vorherigen Befehls. Der Wert dieser Eigenschaft ist der Schlüssel , den Sie später in diesem Handbuch verwenden, um eine Verbindung mit dem Konto mit der Bibliothek herzustellen.
Vorbereiten der Entwicklungsumgebung
Konfigurieren Sie dann Ihre Entwicklungsumgebung mit einem neuen Projekt und der Clientbibliothek. Dieser Schritt ist die letzte erforderliche Voraussetzung, bevor Sie mit dem Rest dieses Handbuchs fortfahren.
Starten Sie in einem leeren Ordner.
Initialisieren Sie ein neues Modul.
npm init es6 --yesInstallieren Sie das
gremlinPaket vom Node Package Manager (npm).npm install --save gremlinErstellen Sie die index.js Datei.
Starten Sie in einem leeren Ordner.
Initialisieren Sie ein neues Modul.
npm init es6 --yesInstallieren Sie das
typescriptPaket vom Node Package Manager (npm).npm install --save-dev typescriptInstallieren Sie das
tsxPaket von npm.npm install --save-dev tsxInstallieren Sie das
gremlinPaket von npm.npm install --save gremlinInstallieren Sie das
@types/nodePaket von npm.npm install --save-dev @types/nodeInstallieren Sie das
@types/gremlinPaket von npm.npm install --save-dev @types/gremlinInitialisieren Sie das TypeScript-Projekt mit dem Compiler (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextErstellen Sie die index.ts Datei.
Objektmodell
| BESCHREIBUNG | |
|---|---|
DriverRemoteConnection |
Stellt die Verbindung mit dem Gremlin-Server dar. |
GraphTraversalSource |
Wird verwendet, um Gremlin-Traversals zu konstruieren und auszuführen |
Codebeispiele
Authentifizieren des Clients
Beginnen Sie damit, den Client mithilfe der Anmeldeinformationen zu authentifizieren, die zuvor in diesem Handbuch gesammelt wurden.
Öffnen Sie die index.js Datei in Ihrer integrierten Entwicklungsumgebung (IDE).
Importieren Sie das
gremlinPaket und die erforderlichen Typen:import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Erstellen Sie String-Variablen für die zuvor in diesem Handbuch gesammelten Anmeldeinformationen. Benennen Sie die Variablen
hostnameundprimaryKey.const hostname = '<host>'; const primaryKey = '<key>';Erstellen Sie ein Objekt vom Typ
PlainTextSaslAuthenticatormit den Anmeldeinformationen und Konfigurationsvariablen, die in den vorherigen Schritten erstellt wurden. Speichern Sie das Objekt in einer Variablen mit dem Namenauthenticator.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Erstellen Sie ein
ClientObjekt mithilfe der Authentifikatorvariable. Geben Sie der Variablen den Namenclient.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Öffnen Sie die datei index.ts in Ihrer integrierten Entwicklungsumgebung (IDE).
Importieren Sie das
gremlinPaket und die erforderlichen Typen:import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Erstellen Sie String-Variablen für die zuvor in diesem Handbuch gesammelten Anmeldeinformationen. Benennen Sie die Variablen
hostnameundprimaryKey.const hostname: string = '<host>'; const primaryKey: string = '<key>';Erstellen Sie ein Objekt vom Typ
PlainTextSaslAuthenticatormit den Anmeldeinformationen und Konfigurationsvariablen, die in den vorherigen Schritten erstellt wurden. Speichern Sie das Objekt in einer Variablen mit dem Namenauthenticator.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Erstellen Sie ein
ClientObjekt mithilfe der Authentifikatorvariable. Geben Sie der Variablen den Namenclient.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Einfügen von Daten
Fügen Sie als Nächstes neue Vertex- und Randdaten in das Diagramm ein. Löschen Sie vor dem Erstellen der neuen Daten das Diagramm aller vorhandenen Daten.
Führen Sie die
g.V().drop()Abfrage aus, um alle Scheitelpunkte und Kanten aus dem Diagramm zu löschen.await client.submit('g.V().drop()');Erstellen Sie eine Gremlin-Abfrage, die einen Scheitelpunkt hinzufügt.
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) `;Fügen Sie einen Scheitelpunkt für ein einzelnes Produkt hinzu.
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, });Fügen Sie zwei weitere Scheitelpunkte für zwei zusätzliche Produkte hinzu.
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, });Erstellen Sie eine weitere Gremlin-Abfrage, die einen Rand hinzufügt.
const insert_edge_query = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Fügen Sie zwei Kanten hinzu.
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', });
Führen Sie die
g.V().drop()Abfrage aus, um alle Scheitelpunkte und Kanten aus dem Diagramm zu löschen.await client.submit('g.V().drop()');Erstellen Sie eine Gremlin-Abfrage, die einen Scheitelpunkt hinzufügt.
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) `;Fügen Sie einen Scheitelpunkt für ein einzelnes Produkt hinzu.
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, });Fügen Sie zwei weitere Scheitelpunkte für zwei zusätzliche Produkte hinzu.
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, });Erstellen Sie eine weitere Gremlin-Abfrage, die einen Rand hinzufügt.
const insert_edge_query: string = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Fügen Sie zwei Kanten hinzu.
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', });
Daten lesen
Lesen Sie dann Daten, die zuvor in das Diagramm eingefügt wurden.
Erstellen Sie eine Abfrage, die einen Scheitelpunkt mithilfe des eindeutigen Bezeichners und des Partitionsschlüsselwerts liest.
const read_vertex_query = 'g.V([prop_partition_key, prop_id])';Lesen Sie dann einen Scheitelpunkt, indem Sie die erforderlichen Parameter angeben.
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];
Erstellen Sie eine Abfrage, die einen Scheitelpunkt mithilfe des eindeutigen Bezeichners und des Partitionsschlüsselwerts liest.
const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';Lesen Sie dann einen Scheitelpunkt, indem Sie die erforderlichen Parameter angeben.
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];
Abfragedaten
Verwenden Sie schließlich eine Abfrage, um alle Daten zu finden, die einem bestimmten Traversal oder Filter im Diagramm entsprechen.
Erstellen Sie eine Abfrage, die alle Scheitelpunkte findet, die von einem bestimmten Scheitelpunkt aus durchlaufen werden.
const find_vertices_query = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Führen Sie die Abfrage aus, die das
Montau Turtle SurfboardProdukt angibt.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Durchlaufen Sie die Abfrageergebnisse.
for (const item of find_results._items) { // Do something here with each result }
Erstellen Sie eine Abfrage, die alle Scheitelpunkte findet, die von einem bestimmten Scheitelpunkt aus durchlaufen werden.
const find_vertices_query: string = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Führen Sie die Abfrage aus, die das
Montau Turtle SurfboardProdukt angibt.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Durchlaufen Sie die Abfrageergebnisse.
for (const item of find_results._items) { // Do something here with each result }
Ausführen des Codes
Führen Sie die neu erstellte Anwendung mit einem Terminal in Ihrem Anwendungsverzeichnis aus.
node index.js
npx tsx index.ts
Bereinigen von Ressourcen
Wenn Sie das Konto nicht mehr benötigen, entfernen Sie das Konto aus Ihrem Azure-Abonnement, indem Sie die Ressource löschen .
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"