Unterstützung und Kompatibilität von Gremlin-Diagrammen in Azure Cosmos DB mit TinkerPop-FeaturesAzure Cosmos DB Gremlin graph support and compatibility with TinkerPop features
GILT FÜR:
Gremlin-API
Azure Cosmos DB unterstützt die Apache Tinkerpop-Graphdurchlauf-Sprache, auch als Gremlin bezeichnet.Azure Cosmos DB supports Apache Tinkerpop's graph traversal language, known as Gremlin. Mithilfe der Gremlin-Sprache können Sie Diagrammentitäten (Vertices und Edges) erstellen, Eigenschaften innerhalb dieser Entitäten ändern, Abfragen und Traversierungen ausführen und Entitäten löschen.You can use the Gremlin language to create graph entities (vertices and edges), modify properties within those entities, perform queries and traversals, and delete entities.
Die Azure Cosmos DB Graph-Engine hält sich eng an die Apache TinkerPop-Spezifikation für die Durchlaufschritte, es gibt jedoch Azure Cosmos DB-spezifische Unterschiede bei der Implementierung.Azure Cosmos DB Graph engine closely follows Apache TinkerPop traversal steps specification but there are differences in the implementation that are specific for Azure Cosmos DB. Dieser Artikel enthält eine kurze exemplarische Vorgehensweise zu Gremlin und listet die Funktionen von Gremlin auf, die von der Gremlin-API unterstützt werden.In this article, we provide a quick walkthrough of Gremlin and enumerate the Gremlin features that are supported by the Gremlin API.
Kompatible ClientbibliothekenCompatible client libraries
In der folgenden Tabelle werden gängige Gremlin-Treiber aufgeführt, die Sie für Azure Cosmos DB verwenden können:The following table shows popular Gremlin drivers that you can use against Azure Cosmos DB:
Unterstützte Graph-ObjekteSupported Graph Objects
TinkerPop ist ein Standard, der eine große Bandbreite an Diagrammtechnologien abdeckt.TinkerPop is a standard that covers a wide range of graph technologies. Daher weist diese Standardterminologie auf, die beschreiben, welche Funktionen von einem Diagrammanbieter bereitgestellt werden.Therefore, it has standard terminology to describe what features are provided by a graph provider. Azure Cosmos DB stellt eine beständige und beschreibbare Diagrammdatenbank mit hoher Parallelität dar, die über mehrere Server oder Cluster hinweg partitioniert werden kann.Azure Cosmos DB provides a persistent, high concurrency, writeable graph database that can be partitioned across multiple servers or clusters.
Die folgende Tabelle enthält die TinkerPop-Funktionen, die von Azure Cosmos DB implementiert werden:The following table lists the TinkerPop features that are implemented by Azure Cosmos DB:
CategoryCategory | Implementierung von Azure Cosmos DBAzure Cosmos DB implementation | NotizenNotes |
---|---|---|
DiagrammfunktionenGraph features | Stellen Persistenz und ConcurrentAccess bereit.Provides Persistence and ConcurrentAccess. Sind zur Unterstützung für Transaktionen ausgelegt.Designed to support Transactions | Computermethoden können über den Spark-Connector implementiert werden.Computer methods can be implemented via the Spark connector. |
VariablenfunktionenVariable features | Unterstützen Boolean-, Integer-, Byte-, Double-, Float-, Long- und String-DatentypenSupports Boolean, Integer, Byte, Double, Float, Integer, Long, String | Unterstützen primitive Typen; ist mit komplexen Typen über Datenmodelle kompatibelSupports primitive types, is compatible with complex types via data model |
Vertex-FunktionenVertex features | Unterstützen RemoveVertices MetaProperties, AddVertices MultiProperties, StringIds UserSuppliedIds, AddProperty, RemovePropertySupports RemoveVertices, MetaProperties, AddVertices, MultiProperties, StringIds, UserSuppliedIds, AddProperty, RemoveProperty | Unterstützen die Erstellung, Änderung und Löschung von VerticesSupports creating, modifying, and deleting vertices |
Vertex-Eigenschafts-FunktionenVertex property features | StringIds, UserSuppliedIds, AddProperty, RemoveProperty, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValuesStringIds, UserSuppliedIds, AddProperty, RemoveProperty, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues | Unterstützen die Erstellung, Änderung und Löschung von Vertex-EigenschaftenSupports creating, modifying, and deleting vertex properties |
EdgefunktionenEdge features | AddEdges, RemoveEdges, StringIds, UserSuppliedIds, AddProperty, RemovePropertyAddEdges, RemoveEdges, StringIds, UserSuppliedIds, AddProperty, RemoveProperty | Unterstützen die Erstellung, Änderung und Löschung von EdgesSupports creating, modifying, and deleting edges |
Edge-Eigenschafts-FunktionenEdge property features | Properties, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValuesProperties, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues | Unterstützen die Erstellung, Änderung und Löschung von Edge-EigenschaftenSupports creating, modifying, and deleting edge properties |
Gremlin-SendeformatGremlin wire format
Azure Cosmos DB verwendet bei der Rückgabe von Ergebnissen aus Gremlin-Vorgängen das JSON-Format.Azure Cosmos DB uses the JSON format when returning results from Gremlin operations. Von Azure Cosmos DB wird aktuell das JSON-Format unterstützt.Azure Cosmos DB currently supports the JSON format. Der folgende Ausschnitt zeigt beispielsweise eine JSON-Darstellung eines Vertex, der von Azure Cosmos DB an den Client zurückgegeben wurde:For example, the following snippet shows a JSON representation of a vertex returned to the client from Azure Cosmos DB:
{
"id": "a7111ba7-0ea1-43c9-b6b2-efc5e3aea4c0",
"label": "person",
"type": "vertex",
"outE": {
"knows": [
{
"id": "3ee53a60-c561-4c5e-9a9f-9c7924bc9aef",
"inV": "04779300-1c8e-489d-9493-50fd1325a658"
},
{
"id": "21984248-ee9e-43a8-a7f6-30642bc14609",
"inV": "a8e3e741-2ef7-4c01-b7c8-199f8e43e3bc"
}
]
},
"properties": {
"firstName": [
{
"value": "Thomas"
}
],
"lastName": [
{
"value": "Andersen"
}
],
"age": [
{
"value": 45
}
]
}
}
Im Anschluss werden die Eigenschaften beschrieben, die im JSON-Format für Vertices verwendet werden:The properties used by the JSON format for vertices are described below:
EigenschaftProperty | BeschreibungDescription |
---|---|
id |
Die ID für den Vertex.The ID for the vertex. Muss eindeutig sein (in Kombination mit dem Wert von _partition , falls zutreffend).Must be unique (in combination with the value of _partition if applicable). Wird kein Wert angegeben, wird automatisch eine GUID bereitgestellt.If no value is provided, it will be automatically supplied with a GUID |
label |
Die Bezeichnung des Vertex.The label of the vertex. Diese Eigenschaft dient zur Beschreibung des Entitätstyps.This property is used to describe the entity type. |
type |
Dient zur Unterscheidung von Vertices von anderen Dokumenten, die keine Diagramme sind.Used to distinguish vertices from non-graph documents |
properties |
Sammlung von benutzerdefinierten Eigenschaften in Verbindung mit dem Vertex.Bag of user-defined properties associated with the vertex. Jede Eigenschaft kann mehrere Werte enthalten.Each property can have multiple values. |
_partition |
Der Partitionsschlüssel des Vertex.The partition key of the vertex. Wird für Graphpartitionierung verwendet.Used for graph partitioning. |
outE |
Diese Eigenschaft enthält eine Liste von externen Edges aus einem Vertex.This property contains a list of out edges from a vertex. Die Speicherung von Informationen zur Nähe zum Vertex ermöglicht die schnelle Ausführung von Traversierungen.Storing the adjacency information with vertex allows for fast execution of traversals. Edges werden basierend auf deren Bezeichnungen gruppiert.Edges are grouped based on their labels. |
Zudem enthalten Edges folgende Informationen, die die Navigation in anderen Teilen des Diagramms unterstützen können.And the edge contains the following information to help with navigation to other parts of the graph.
EigenschaftProperty | BeschreibungDescription |
---|---|
id |
Die ID für den Edge.The ID for the edge. Muss eindeutig sein (in Kombination mit dem Wert von _partition , falls zutreffend).Must be unique (in combination with the value of _partition if applicable) |
label |
Die Bezeichnung des Edge.The label of the edge. Diese Eigenschaft ist optional, und dient zur Beschreibung des Beziehungstyps.This property is optional, and used to describe the relationship type. |
inV |
Diese Eigenschaft enthält eine Liste von In-Vertices für einen Edge.This property contains a list of in vertices for an edge. Die Speicherung von Informationen über die Nähe zum Vertex mit dem Edge ermöglicht die schnelle Ausführung von Traversierungen.Storing the adjacency information with the edge allows for fast execution of traversals. Vertices werden basierend auf ihren Bezeichnungen gruppiert.Vertices are grouped based on their labels. |
properties |
Sammlung von benutzerdefinierten Eigenschaften in Verbindung mit dem Edge.Bag of user-defined properties associated with the edge. Jede Eigenschaft kann mehrere Werte enthalten.Each property can have multiple values. |
Jede Eigenschaft kann mehrere Werte in einem Array speichern.Each property can store multiple values within an array.
EigenschaftProperty | BeschreibungDescription |
---|---|
value |
Wert der EigenschaftThe value of the property |
Gremlin-SchritteGremlin steps
Sehen wir uns nun die Gremlin-Schritte an, die von Azure Cosmos DB unterstützt werden.Now let's look at the Gremlin steps supported by Azure Cosmos DB. Eine vollständige Referenz zu Gremlin finden Sie in der TinkerPop-Referenz.For a complete reference on Gremlin, see TinkerPop reference.
Schrittstep | BeschreibungDescription | Dokumentation zu TinkerPop 3.2TinkerPop 3.2 Documentation |
---|---|---|
addE |
Fügt einen Edge zwischen zwei Vertices hinzuAdds an edge between two vertices | addE-SchrittaddE step |
addV |
Fügt einen Vertex zum Diagramm hinzuAdds a vertex to the graph | addV-SchrittaddV step |
and |
Stellt sicher, dass alle Traversierungen einen Wert zurückgebenEnsures that all the traversals return a value | and-Schrittand step |
as |
Ein Schrittmodulator für die Zuweisung einer Variable zur Ausgabe eines SchrittsA step modulator to assign a variable to the output of a step | as-Schrittas step |
by |
Ein mit group und order verwendeter SchrittmodulatorA step modulator used with group and order |
by-Schrittby step |
coalesce |
Gibt die erste Traversierung, die ein Ergebnis zurückgibt, zurückReturns the first traversal that returns a result | coalesce-Schrittcoalesce step |
constant |
Gibt einen konstanten Wert zurück.Returns a constant value. Wird mit coalesce verwendet.Used with coalesce |
constant-Schrittconstant step |
count |
Gibt die Anzahl aus der Traversierung zurückReturns the count from the traversal | count-Schrittcount step |
dedup |
Gibt die Werte mit entfernten Duplikaten zurückReturns the values with the duplicates removed | dedup-Schrittdedup step |
drop |
Löscht die Werte (Vertex/Edge)Drops the values (vertex/edge) | drop-Schrittdrop step |
executionProfile |
Erstellt eine Beschreibung aller Vorgänge, die im ausgeführten Gremlin-Schritt generiert werden.Creates a description of all operations generated by the executed Gremlin step | executionProfile-SchrittexecutionProfile step |
fold |
Fungiert als Grenze, die Ergebnisse berechnet und zusammenfasstActs as a barrier that computes the aggregate of results | fold-Schrittfold step |
group |
Gruppiert die Werte basierend auf den angegebenen BezeichnungenGroups the values based on the labels specified | group-Schrittgroup step |
has |
Wird zum Filtern von Eigenschaften, Vertices und Edges verwendet.Used to filter properties, vertices, and edges. Unterstützt die Varianten hasLabel , hasId , hasNot und has .Supports hasLabel , hasId , hasNot , and has variants. |
has-Schritthas step |
inject |
Fügt Werte in einen Stream einInject values into a stream | inject-Schrittinject step |
is |
Dient zur Ausführung eines Filters mithilfe eines booleschen AusdrucksUsed to perform a filter using a boolean expression | is-Schrittis step |
limit |
Dient zur Beschränkung der Anzahl der Elemente in der TraversierungUsed to limit number of items in the traversal | limit-Schrittlimit step |
local |
Umschließt lokal einen Abschnitt einer Traversierung, ähnlich wie bei einer UnterabfrageLocal wraps a section of a traversal, similar to a subquery | local-Schrittlocal step |
not |
Dient zur Negierung eines FiltersUsed to produce the negation of a filter | not-Schrittnot step |
optional |
Gibt das Ergebnis der angegebenen Traversierung zurück, wenn diese ein anderes Ergebnis als das vom aufrufenden Element zurückgegebene Ergebnis liefertReturns the result of the specified traversal if it yields a result else it returns the calling element | optional-Schrittoptional step |
or |
Stellt sicher, dass mindestens einer der Traversierungen einen Wert zurückgibtEnsures at least one of the traversals returns a value | or-Schrittor step |
order |
Gibt die Ergebnisse in der angegebenen Sortierreihenfolge zurückReturns results in the specified sort order | order-Schrittorder step |
path |
Gibt den vollständigen Pfad der Traversierung zurückReturns the full path of the traversal | path-Schrittpath step |
project |
Projiziert die Eigenschaften als KarteProjects the properties as a Map | project-Schrittproject step |
properties |
Gibt die Eigenschaften für die angegebenen Bezeichnungen zurückReturns the properties for the specified labels | properties-Schrittproperties step |
range |
Filtert auf den angegebenen WertebereichFilters to the specified range of values | range-Schrittrange step |
repeat |
Wiederholt den Schritt für die angegebene Anzahl von Versuchen.Repeats the step for the specified number of times. Wird für die Ausführung als Schleife verwendet.Used for looping | repeat-Schrittrepeat step |
sample |
Wird zum Testen von Ergebnissen aus der Traversierung verwendetUsed to sample results from the traversal | sample-Schrittsample step |
select |
Wird zum Projizieren von Ergebnissen aus der Traversierung verwendetUsed to project results from the traversal | select-Schrittselect step |
store |
Wird für nicht blockierende Aggregate aus der Traversierung verwendetUsed for non-blocking aggregates from the traversal | store-Schrittstore step |
TextP.startingWith(string) |
Filterfunktion für Zeichenfolgen.String filtering function. Diese Funktion dient als ein Prädikat für den Schritt has() , um eine Eigenschaft mit dem Anfang einer bestimmten Zeichenfolge zu finden.This function is used as a predicate for the has() step to match a property with the beginning of a given string |
TextP-PrädikateTextP predicates |
TextP.endingWith(string) |
Filterfunktion für Zeichenfolgen.String filtering function. Diese Funktion dient als ein Prädikat für den Schritt has() , um eine Eigenschaft mit dem Ende einer bestimmten Zeichenfolge zu finden.This function is used as a predicate for the has() step to match a property with the ending of a given string |
TextP-PrädikateTextP predicates |
TextP.containing(string) |
Filterfunktion für Zeichenfolgen.String filtering function. Diese Funktion dient als ein Prädikat für den Schritt has() , um eine Eigenschaft mit dem Inhalt einer bestimmten Zeichenfolge zu finden.This function is used as a predicate for the has() step to match a property with the contents of a given string |
TextP-PrädikateTextP predicates |
TextP.notStartingWith(string) |
Filterfunktion für Zeichenfolgen.String filtering function. Diese Funktion dient als ein Prädikat für den Schritt has() , um eine Eigenschaft zu finden, die nicht mit einer bestimmten Zeichenfolge beginnt.This function is used as a predicate for the has() step to match a property that doesn't start with a given string |
TextP-PrädikateTextP predicates |
TextP.notEndingWith(string) |
Filterfunktion für Zeichenfolgen.String filtering function. Diese Funktion dient als ein Prädikat für den Schritt has() , um eine Eigenschaft zu finden, die nicht auf eine bestimmte Zeichenfolge endet.This function is used as a predicate for the has() step to match a property that doesn't end with a given string |
TextP-PrädikateTextP predicates |
TextP.notContaining(string) |
Filterfunktion für Zeichenfolgen.String filtering function. Diese Funktion dient als ein Prädikat für den Schritt has() , um eine Eigenschaft zu finden, die eine bestimmte Zeichenfolge nicht enthält.This function is used as a predicate for the has() step to match a property that doesn't contain a given string |
TextP-PrädikateTextP predicates |
tree |
Aggregiert Pfade aus einem Vertex in einer StrukturAggregate paths from a vertex into a tree | tree-Schritttree step |
unfold |
Löst einen Iterator als Schritt aufUnroll an iterator as a step | unfold-Schrittunfold step |
union |
Führt Ergebnisse aus mehreren Traversierungen zusammenMerge results from multiple traversals | union-Schrittunion step |
V |
Enthält die erforderlichen Schritte für Traversierungen zwischen Vertices und Edges: V , E , out , in , both , outE , inE , bothE , outV , inV , bothV und otherV fürIncludes the steps necessary for traversals between vertices and edges V , E , out , in , both , outE , inE , bothE , outV , inV , bothV , and otherV for |
vertex-Schrittevertex steps |
where |
Wird zum Filtern von Ergebnissen aus der Traversierung verwendet.Used to filter results from the traversal. Unterstützt die Operatoren eq , neq , lt , lte , gt , gte und between .Supports eq , neq , lt , lte , gt , gte , and between operators |
where-Schrittwhere step |
Die von Azure Cosmos DB bereitgestellte, für Schreibvorgänge optimierte Engine unterstützt standardmäßig die automatische Indizierung aller Eigenschaften in Vertices und Edges.The write-optimized engine provided by Azure Cosmos DB supports automatic indexing of all properties within vertices and edges by default. Daher werden Abfragen mit Filtern, Bereichsabfragen, Sortierungen oder Aggregate von Eigenschaften über den Index verarbeitet und effizient übermittelt.Therefore, queries with filters, range queries, sorting, or aggregates on any property are processed from the index, and served efficiently. Weitere Informationen zur Indizierung in Azure Cosmos DB finden Sie in unserem Dokument unter Schemagnostische Indizierung.For more information on how indexing works in Azure Cosmos DB, see our paper on schema-agnostic indexing.
Unterschiede im VerhaltenBehavior differences
- Die Azure Cosmos DB Graph-Engine führt einen Durchlauf mit breitem Ansatz aus, während TinkerPop Gremlin einen „tiefen“ Ansatz verfolgt.Azure Cosmos DB Graph engine runs breadth-first traversal while TinkerPop Gremlin is depth-first. Dieses Verhalten erzielt eine bessere Leistung in einem horizontal skalierbaren System wie Cosmos DB.This behavior achieves better performance in horizontally scalable system like Cosmos DB.
Nicht unterstützte FunktionenUnsupported features
Gremlin Bytecode ist eine von der Programmiersprache unabhängige Spezifikation für Diagrammdurchläufe.Gremlin Bytecode is a programming language agnostic specification for graph traversals. Cosmos DB Graph unterstützt dies noch nicht.Cosmos DB Graph doesn't support it yet. Verwenden Sie
GremlinClient.SubmitAsync()
, und übergeben Sie den Durchlauf als eine Textzeichenfolge.UseGremlinClient.SubmitAsync()
and pass traversal as a text string.property(set, 'xyz', 1)
: Das Festlegen der Kardinalität wird noch nicht unterstützt.property(set, 'xyz', 1)
set cardinality isn't supported today. Verwenden Sie stattdessenproperty(list, 'xyz', 1)
.Useproperty(list, 'xyz', 1)
instead. Weitere Informationen finden Sie unter Vertex-Eigenschaften mit TinkerPop.To learn more, see Vertex properties with TinkerPop.Der Schritt
match()
ist derzeit nicht verfügbar.Thematch()
step isn't currently available. Dieser Schritt bietet deklarative Abfragefunktionen.This step provides declarative querying capabilities.Objekte als Eigenschaften werden für Vertices und Edges nicht unterstützt.Objects as properties on vertices or edges aren't supported. Eigenschaften können nur primitive Typen oder Arrays sein.Properties can only be primitive types or arrays.
Sortieren nach Arrayeigenschaften
order().by(<array property>)
wird nicht unterstützt.Sorting by array propertiesorder().by(<array property>)
isn't supported. Die Sortierung wird nur von primitiven Typen unterstützt.Sorting is supported only by primitive types.Nicht primitive JSON-Typen werden nicht unterstützt.Non-primitive JSON types aren't supported. Verwenden Sie die Typen
string
,number
odertrue
/false
.Usestring
,number
, ortrue
/false
types.null
-Werte werden nicht unterstützt.null
values aren't supported.Das GraphSONv3-Serialisierungsmodul wird derzeit noch nicht unterstützt.GraphSONv3 serializer isn't currently supported. Verwenden Sie das
GraphSONv2
-Serialisierungsmodul sowie Reader- und Writerklassen in der Verbindungskonfiguration.UseGraphSONv2
Serializer, Reader, and Writer classes in the connection configuration. Das Format der von der Azure Cosmos DB Gremlin-API zurückgegebenen Ergebnisse ist nicht identisch mit dem GraphSON-Format.The results returned by the Azure Cosmos DB Gremlin API don't have the same format as the GraphSON format.Lambdaausdrücke und -funktionen werden derzeit nicht unterstützt.Lambda expressions and functions aren't currently supported. Dies umfasst die Funktionen
.map{<expression>}
,.by{<expression>}
und.filter{<expression>}
.This includes the.map{<expression>}
, the.by{<expression>}
, and the.filter{<expression>}
functions. Weitere Informationen und wie Sie sie mithilfe der Gremlin-Schritte neu schreiben können, finden Sie unter A Note on Lambdas (Hinweis zu Lambdas).To learn more, and to learn how to rewrite them using Gremlin steps, see A Note on Lambdas.Transaktionen werden aufgrund der verteilten Natur des Systems nicht unterstützt.Transactions aren't supported because of distributed nature of the system. Konfigurieren Sie ein geeignetes Konsistenzmodell für das Gremlin-Konto, um „Ihre eigenen Schreibvorgänge zu lesen“, und verwenden Sie optimistische Nebenläufigkeit, um Schreibvorgänge aufzulösen, zu einen Konflikt verursachen.Configure appropriate consistency model on Gremlin account to "read your own writes" and use optimistic concurrency to resolve conflicting writes.
Bekannte EinschränkungenKnown limitations
- Indexverwendung für Gremlin-Abfragen mit Schritten vom Typ
.V()
während des Durchlaufs: Aktuell wird nur beim ersten.V()
-Aufruf eines Durchlaufs der Index genutzt, um alle angefügten Filter oder Prädikate aufzulösen.Index utilization for Gremlin queries with mid-traversal.V()
steps: Currently, only the first.V()
call of a traversal will make use of the index to resolve any filters or predicates attached to it. Bei späteren Aufrufen wird der Index nicht herangezogen, wodurch sich die Wartezeit und die Kosten der Abfrage erhöhen können.Subsequent calls will not consult the index, which might increase the latency and cost of the query.
Bei Verwendung der Standardindizierung werden von einer typischen Gremlin-Leseabfrage, die mit dem Schritt .V()
beginnt, Parameter wie .has()
oder .where()
in den angefügten Filterschritten verwendet, um die Kosten und die Leistung der Abfrage zu optimieren.Assuming default indexing, a typical read Gremlin query that starts with the .V()
step would use parameters in its attached filtering steps, such as .has()
or .where()
to optimize the cost and performance of the query. Beispiel:For example:
g.V().has('category', 'A')
Enthält die Gremlin-Abfrage allerdings mehrere Schritte vom Typ .V()
, ist die Auflösung der Daten für die Abfrage möglicherweise nicht optimal.However, when more than one .V()
step is included in the Gremlin query, the resolution of the data for the query might not be optimal. Ein Beispiel hierfür wäre etwa die folgende Abfrage:Take the following query as an example:
g.V().has('category', 'A').as('a').V().has('category', 'B').as('b').select('a', 'b')
Diese Abfrage gibt auf der Grundlage der Eigenschaft category
zwei Gruppen von Vertices zurück.This query will return two groups of vertices based on their property called category
. In diesem Fall wird nur beim ersten Aufruf (g.V().has('category', 'A')
) der Index genutzt, um die Vertices auf der Grundlage der Werte ihrer Eigenschaften aufzulösen.In this case, only the first call, g.V().has('category', 'A')
will make use of the index to resolve the vertices based on the values of their properties.
Zur Umgehung dieses Problems können bei dieser Abfrage untergeordnete Durchlaufschritte wie .map()
und union()
verwendet werden.A workaround for this query is to use subtraversal steps such as .map()
and union()
. Beispiel:This is exemplified below:
// Query workaround using .map()
g.V().has('category', 'A').as('a').map(__.V().has('category', 'B')).as('b').select('a','b')
// Query workaround using .union()
g.V().has('category', 'A').fold().union(unfold(), __.V().has('category', 'B'))
Die Leistung der Abfragen kann mithilfe des GremlinexecutionProfile()
-Schritts überprüft werden.You can review the performance of the queries by using the Gremlin executionProfile()
step.
Nächste SchritteNext steps
- Erste Schritte zum Erstellen einer Diagrammanwendung mithilfe unserer SDKsGet started building a graph application using our SDKs
- Informieren Sie sich ausführlicher über die Diagrammunterstützung in Azure Cosmos DB.Learn more about graph support in Azure Cosmos DB