Freigeben über


Häufig gestellte Fragen zu Azure Cosmos DB for Apache Gremlin

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.

Gremlin-Abfragen

Auswerten der Effizienz von Gremlin-Abfragen

Mit dem Vorschauschritt executionProfile() können Sie eine Analyse des Abfrageausführungsplans bereitstellen. Dieser Schritt muss am Ende jeder Gremlin-Abfrage hinzugefügt werden. Sie können zum Beispiel den Schritt am Ende einer g.V('example').out('relationship')-Abfrage hinzufügen, die zu g.V('example').out('relationship').executionProfile() führt.

Die Ausgabe des Profils zeigt, wie viel Zeit für das Abrufen der Vertexobjekte, der Edgeobjekte und der Größe des Arbeitsdatensatzes aufgewendet wird. Diese Ausgabe bezieht sich auf die Standardkostenmessungen für Azure Cosmos DB-Abfragen.

Weitere häufig gestellte Fragen

Wie werden RUs/Sek. beim Ausführen von Abfragen für eine Graphdatenbank in Rechnung gestellt?

Alle Diagrammobjekte, Scheitelpunkte und Kanten werden als JSON-Dokumente im Back-End angezeigt. Eine Gremlin-Abfrage kann jeweils ein oder mehrere Diagrammobjekte ändern, und die Kosten hängen direkt von den Objekten und Kanten ab, die von der Abfrage verarbeitet werden. Dieser Prozess funktioniert genauso wie für alle anderen Azure Cosmos DB-APIs.

Die RU-Belastung hängt vom Arbeitsdatensatz der Traversierung ab, nicht vom Ergebnisdatensatz. Betrachten Sie ein Beispiel, in dem eine Abfrage als Ergebnis einen einzelnen Knoten erhält, aber dabei mehrere andere Objekte durchlaufen muss. In diesem Beispiel basiert die Kosten auf allen Diagrammobjekten, die an der Berechnung des Ergebnisvertex beteiligt sind.

Was ist die maximale Skalierung, die eine Graphdatenbank in Azure Cosmos DB für Apache Gremlin haben kann?

Azure Cosmos DB verwendet horizontale Partitionierung, um Speicher und Durchsatz bei Bedarf automatisch zu skalieren. Die Anzahl der Partitionen in einem Container bestimmt den maximalen Durchsatz und die Speicherkapazität. Um eine optimale Leistung im großen Maßstab zu erzielen, befolgen Sie die spezifischen Richtlinien für API für Gremlin-Container. Weitere Informationen zur Partitionierung und bewährten Methoden finden Sie im Artikel [Partitionierung in Azure Cosmos DB.

Soll ich für die C#/.NET-Entwicklung das Paket „Microsoft.Azure.Graphs“ oder Gremlin.NET verwenden?

Azure Cosmos DB für Apache Gremlin verwendet die Open-Source-Treiber hauptsächlich als Hauptschnittstellen für den Dienst. Daher ist die empfohlene Option die Verwendung von Treibern, die von Apache unterstützt werden.

Wie kann ich mithilfe von Gremlin-Treibern vor Einschleusungsangriffen schützen?

Die meisten nativen Apache Gremlin-Treiber ermöglichen es, ein Wörterbuch mit Parametern für die Abfrageausführung bereitzustellen. Diese Funktionalität wird sowohl in den - als auch in den -Bibliotheken (Node.js) unterstützt.

Warum erhalte ich bei der Gremlin-Abfragekompilierung die Fehlermeldung, dass keine Methode gefunden werden kann?

Azure Cosmos DB für Apache Gremlin unterstützt eine Teilmenge der Gremlin-Oberflächenfläche. Ausführliche Informationen zu unterstützten Schritten finden Sie im Gremlin-Supportartikel .

Um diesen Fehler zu beheben, schreiben Sie Ihre Gremlin-Abfragen mithilfe der unterstützten Schritte neu, da Azure Cosmos DB alle wesentlichen Gremlin-Funktionen bereitstellt.

Warum erhalte ich die Fehlermeldung „WebSocketException: The server returned status code '200' when status code '101' was expected“?

Dieser Fehler wird wahrscheinlich ausgelöst, wenn der falsche Endpunkt verwendet wird.

Der Endpunkt, der diesen Fehler generiert, weist das folgende Muster auf: https://<account-name>.documents.azure.com:443/ Dieser Endpunkt ist tatsächlich der Dokumentenendpunkt für Ihre Graph-Datenbank.

Der richtige Zu verwendende Endpunkt ist der Gremlin-Endpunkt, der das folgende Format aufweist: https://<account-name>.gremlin.cosmosdb.azure.com:443/

Warum erhalte ich den Fehler „RequestRateIsTooLarge“?

Dieser Fehler weist darauf hin, dass die zugeordneten Anforderungseinheiten pro Sekunde für die Verarbeitung der Abfrage nicht ausreichen. Dieser Fehler wird angezeigt, wenn Sie eine Abfrage ausführen, die alle Scheitelpunkte abruft:

g.V()

Diese Abfrage versucht, alle Scheitelpunkte aus dem Graph abzurufen. Die Kosten dieser Abfrage entsprechen also mindestens der Anzahl der Scheitelpunkte in Bezug auf Anforderungseinheiten (RUs). Die Anforderungseinheiten pro Sekunde (RU/s) sollten an diese Abfrage angepasst werden.

Warum werden meine Gremlin-Treiberverbindungen schließlich gelöscht?

Eine Gremlin-Verbindung wird über eine WebSocket-Verbindung hergestellt. Obwohl WebSocket-Verbindungen keine bestimmte Zeit zum Leben haben, beendet Azure Cosmos DB für Apache Gremlin leerstehende Verbindungen nach 30 Minuten Inaktivität.

Warum kann ich keine Fluent-API-Aufrufe in den nativen Gremlin-Treibern verwenden?

Azure Cosmos DB für Apache Gremlin unterstützt noch keine Fluent-API-Aufrufe. Fluent-API-Aufrufe basieren auf einer internen Formatierungsfunktion namens Bytecode-Unterstützung, die Azure Cosmos DB für Apache Gremlin derzeit nicht bereitstellt. Aus diesem Grund wird auch der neueste Gremlin-JavaScript Treiber nicht unterstützt.

Wie finde ich die Anforderungseinheitsgebühr für eine Abfrage?

Sie können die Abrufeinheit (RU)-Gebühr für eine Azure Cosmos DB für Apache Gremlin-Abfrage mit einer der folgenden Methoden ermitteln:

  • Verwenden des Azure-Portals

    1. Melden Sie sich beim Azure-Portal an.

    2. Erstellen Sie ein neues Azure Cosmos DB für Apache Gremlin Konto und initialisieren Sie es mit Daten, oder wählen Sie ein vorhandenes Konto aus, das bereits Daten enthält.

    3. Wechseln Sie zum Daten-Explorer-Bereich , und wählen Sie dann den Container aus, an dem Sie arbeiten möchten.

    4. Geben Sie eine gültige Abfrage ein, und wählen Sie dann "Gremlin-Abfrage ausführen" aus.

    5. Wählen Sie Abfragestatistiken aus, um die tatsächliche Anforderungsgebühr für die von Ihnen ausgeführte Anforderung anzuzeigen.

  • Verwenden des .NET Software Development Kit (SDK)

    1. Führen Sie eine Abfrage aus, um das Ergebnis als Objekt vom Typ ResultSet<>abzurufen: ResultSet<dynamic> results = client.SubmitAsync<dynamic>("g.V().count()").Result;

    2. Ermitteln Sie die Anforderungsgebühr mithilfe des StatusAttributes Arrays und des x-ms-request-charge Indexers aus den Ergebnissen: double requestCharge = (double)results.StatusAttributes["x-ms-request-charge"];

  • Verwenden des Java SDK

    1. Führen Sie eine Abfrage aus, um das Ergebnis als Objekt vom Typ ResultSetabzurufen: ResultSet results = client.submit("g.V().count()");

    2. Ermitteln Sie die Anforderungsgebühr mithilfe des statusAttributes Arrays und des x-ms-request-charge Indexers aus den Ergebnissen: Map<String, Object> attributes = results.statusAttributes(); Double requestCharge = (Double) attributes.get("x-ms-request-charge");

Die Anfragegebühr ist unter dem x-ms-request-charge Schlüssel in den Antwortheadern verfügbar, die von der API für Gremlin zurückgegeben werden.