Suporte do Azure Cosmos DB para grafo do GremlinAzure Cosmos DB Gremlin graph support

Azure Cosmos DB suporta a linguagem transversal de gráficos Apache Tinkerpop, conhecida como gráfica Gremlin.Azure Cosmos DB supports Apache Tinkerpop's graph traversal language, known as Gremlin. É possível usar a linguagem Gremlin para criar entidades de grafo (vértices e bordas), modificar propriedades dentro dessas entidades, executar consultas e passagens e excluir entidades.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.

Neste artigo, fornecemos instruções passo a passo rápidas do Gremlin e enumeramos os recursos do Gremlin compatíveis com a API do Gremlin.In this article, we provide a quick walkthrough of Gremlin and enumerate the Gremlin features that are supported by the Gremlin API.

Bibliotecas de cliente compatíveisCompatible client libraries

A tabela a seguir mostra drivers Gremlin populares que você pode usar com o BD Cosmos do Azure:The following table shows popular Gremlin drivers that you can use against Azure Cosmos DB:

BaixarDownload FonteSource IntroduçãoGetting Started Versão do conector com suporteSupported connector version
.NET.NET Gremlin.NET no GitHubGremlin.NET on GitHub Criar Grafo usando .NETCreate Graph using .NET 3.4.0-RC23.4.0-RC2
JavaJava Gremlin JavaDocGremlin JavaDoc Criar Grafo usando JavaCreate Graph using Java 3.2.0+3.2.0+
Node.jsNode.js Gremlin-JavaScript no GitHubGremlin-JavaScript on GitHub Criar Grafo usando Node.jsCreate Graph using Node.js 3.3.4+3.3.4+
PythonPython Gremlin-Python no GitHubGremlin-Python on GitHub Criar Grafo usando PythonCreate Graph using Python 3.2.73.2.7
PHPPHP Gremlin-PHP no GitHubGremlin-PHP on GitHub Criar Grafo usando PHPCreate Graph using PHP 3.1.03.1.0
Console do GremlinGremlin console Documentos do TinkerPopTinkerPop docs Criar Grafo usando Console do GremlinCreate Graph using Gremlin Console 3.2.0 +3.2.0 +

Suporte para objetos de gráficosSupported Graph Objects

O TinkerPop é um padrão que abrange uma ampla variedade de tecnologias de grafo.TinkerPop is a standard that covers a wide range of graph technologies. Portanto, ele tem uma terminologia padrão para descrever quais recursos são fornecidos por um provedor de grafo.Therefore, it has standard terminology to describe what features are provided by a graph provider. O Azure Cosmos DB fornece um banco de dados de grafo gravável, persistente e de alta simultaneidade que pode ser particionado em vários servidores ou clusters.Azure Cosmos DB provides a persistent, high concurrency, writeable graph database that can be partitioned across multiple servers or clusters.

A tabela a seguir lista os recursos do TinkerPop que são implementados pelo BD Cosmos do Azure:The following table lists the TinkerPop features that are implemented by Azure Cosmos DB:

CategoriaCategory Implementação do BD Cosmos do AzureAzure Cosmos DB implementation ObservaçõesNotes
Recursos de grafoGraph features Fornece persistência e ConcurrentAccess.Provides Persistence and ConcurrentAccess. Projetado para dar suporte a TransactionsDesigned to support Transactions Métodos de computador podem ser implementados por meio do conector Spark.Computer methods can be implemented via the Spark connector.
Recursos variáveisVariable features Dá suporte a Boolean, Integer, Byte, Double, Float, Integer, Long, StringSupports Boolean, Integer, Byte, Double, Float, Integer, Long, String Dá suporte a tipos primitivos, é compatível com tipos complexos por meio do modelo de dadosSupports primitive types, is compatible with complex types via data model
Recursos do vérticeVertex features Dá suporte a RemoveVertices, MetaProperties, AddVertices, MultiProperties, StringIds, UserSuppliedIds, AddProperty, RemovePropertySupports RemoveVertices, MetaProperties, AddVertices, MultiProperties, StringIds, UserSuppliedIds, AddProperty, RemoveProperty Dá suporte à criação, modificação e exclusão de vérticesSupports creating, modifying, and deleting vertices
Recursos de propriedade do vérticeVertex property features StringIds, UserSuppliedIds, AddProperty, RemoveProperty, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValuesStringIds, UserSuppliedIds, AddProperty, RemoveProperty, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues Dá suporte à criação, modificação e exclusão de propriedades do vérticeSupports creating, modifying, and deleting vertex properties
Recursos da bordaEdge features AddEdges, RemoveEdges, StringIds, UserSuppliedIds, AddProperty, RemovePropertyAddEdges, RemoveEdges, StringIds, UserSuppliedIds, AddProperty, RemoveProperty Dá suporte à criação, modificação e exclusão de bordasSupports creating, modifying, and deleting edges
Recursos de propriedade da bordaEdge property features Properties, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValuesProperties, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues Dá suporte à criação, modificação e exclusão de propriedades da bordaSupports creating, modifying, and deleting edge properties

Formato de transmissão do Gremlin: GraphSONGremlin wire format: GraphSON

O Azure Cosmos DB usa o formato GraphSON ao retornar resultados de operações Gremlin.Azure Cosmos DB uses the GraphSON format when returning results from Gremlin operations. GraphSON é o formato padrão do Gremlin para representar vértices, bordas e propriedades (propriedades com um ou vários valores) usando JSON.GraphSON is the Gremlin standard format for representing vertices, edges, and properties (single and multi-valued properties) using JSON.

Por exemplo, o snippet a seguir mostra uma representação em GraphSON de um vértice retornado ao cliente no Azure Cosmos DB.For example, the following snippet shows a GraphSON 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
        }
      ]
    }
  }

As propriedades usadas por GraphSON para vértices são descritas a seguir:The properties used by GraphSON for vertices are described below:

PropriedadeProperty DESCRIÇÃODescription
id A ID do vértice.The ID for the vertex. Deve ser exclusiva (em combinação com o valor de _partition, se aplicável).Must be unique (in combination with the value of _partition if applicable). Se nenhum valor for fornecido, ele será automaticamente fornecido com um GUIDIf no value is provided, it will be automatically supplied with a GUID
label O rótulo do vértice.The label of the vertex. Esta propriedade é usada para descrever o tipo de entidade.This property is used to describe the entity type.
type Usado para distinguir vértices de documentos que não são grafosUsed to distinguish vertices from non-graph documents
properties Recipiente de propriedades definidas pelo usuário associadas ao vértice.Bag of user-defined properties associated with the vertex. Cada propriedade pode ter vários valores.Each property can have multiple values.
_partition A chave de partição do vértice.The partition key of the vertex. Usado para particionamento de gráfico.Used for graph partitioning.
outE Essa propriedade contém uma lista de bordas externas de um vértice.This property contains a list of out edges from a vertex. Armazenar as informações de adjacência com o vértice permite a execução rápida de passagens.Storing the adjacency information with vertex allows for fast execution of traversals. As bordas são agrupadas com base em seus rótulos.Edges are grouped based on their labels.

E a borda contém as seguintes informações para ajudar com a navegação para outras partes do grafo.And the edge contains the following information to help with navigation to other parts of the graph.

PropriedadeProperty DESCRIÇÃODescription
id A ID da borda.The ID for the edge. Deve ser exclusiva (em combinação com o valor de _partition, se aplicável)Must be unique (in combination with the value of _partition if applicable)
label O rótulo da borda.The label of the edge. Esta propriedade é opcional e é usada para descrever o tipo de relacionamento.This property is optional, and used to describe the relationship type.
inV Ela contém uma lista nos vértices de uma borda.This property contains a list of in vertices for an edge. Armazenar as informações de adjacência com a borda permite a execução rápida das passagens.Storing the adjacency information with the edge allows for fast execution of traversals. Os vértices são agrupados com base em seus rótulos.Vertices are grouped based on their labels.
properties Recipiente de propriedades definidas pelo usuário associadas à borda.Bag of user-defined properties associated with the edge. Cada propriedade pode ter vários valores.Each property can have multiple values.

Cada propriedade pode armazenar diversos valores em uma matriz.Each property can store multiple values within an array.

PropriedadeProperty DESCRIÇÃODescription
value O valor da propriedadeThe value of the property

Etapas do GremlinGremlin steps

Agora, vejamos as etapas do Gremlin com suporte do BD Cosmos do Azure.Now let's look at the Gremlin steps supported by Azure Cosmos DB. Para obter uma referência completa sobre o Gremlin, consulte Referência do TinkerPop.For a complete reference on Gremlin, see TinkerPop reference.

Etapastep DESCRIÇÃODescription Documentação do TinkerPop 3.2TinkerPop 3.2 Documentation
addE Adiciona uma borda entre dois vérticesAdds an edge between two vertices Etapa addEaddE step
addV Adiciona um vértice ao grafoAdds a vertex to the graph Etapa addVaddV step
and Garante que todas as passagens retornem um valorEnsures that all the traversals return a value e uma etapaand step
as Um modulador de etapa para atribuir uma variável à saída de uma etapaA step modulator to assign a variable to the output of a step Etapa asas step
by Um modulador de etapa usado com group e orderA step modulator used with group and order Etapa byby step
coalesce Retorna a primeira passagem que retorna um resultadoReturns the first traversal that returns a result Etapa coalescecoalesce step
constant Retorna um valor constante.Returns a constant value. Usada com coalesceUsed with coalesce Etapa constantconstant step
count Retorna a contagem da passagemReturns the count from the traversal Etapa countcount step
dedup Retorna os valores com as duplicatas removidasReturns the values with the duplicates removed Etapa dedupdedup step
drop Remove os valores (vértice/borda)Drops the values (vertex/edge) Etapa dropdrop step
executionProfile Cria uma descrição de todas as operações gerada pela etapa executada GremlinCreates a description of all operations generated by the executed Gremlin step etapa executionProfileexecutionProfile step
fold Atua como uma barreira que calcula o valor agregado dos resultadosActs as a barrier that computes the aggregate of results Etapa foldfold step
group Agrupa os valores com base nos rótulos especificadosGroups the values based on the labels specified Etapa groupgroup step
has Usada para filtrar propriedades, vértices e bordas.Used to filter properties, vertices, and edges. Dá suporte às variantes hasLabel, hasId, hasNot e has.Supports hasLabel, hasId, hasNot, and has variants. Etapa hashas step
inject Insere valores em um fluxoInject values into a stream Etapa injectinject step
is Usada para executar um filtro usando uma expressão boolianaUsed to perform a filter using a boolean expression Etapa isis step
limit Usada para limitar o número de itens na passagemUsed to limit number of items in the traversal Etapa limitlimit step
local A etapa local encapsula uma seção de uma passagem, de forma semelhante a uma subconsultaLocal wraps a section of a traversal, similar to a subquery Etapa locallocal step
not Usada para produzir a negação de um filtroUsed to produce the negation of a filter Etapa notnot step
optional Retorna o resultado da passagem especificada se ela produzir um resultado. Caso contrário, retorna o elemento de chamadaReturns the result of the specified traversal if it yields a result else it returns the calling element Etapa optionaloptional step
or Garante que pelo menos uma das passagens retorne um valorEnsures at least one of the traversals returns a value Etapa oror step
order Retorna os resultados na ordem de classificação especificadaReturns results in the specified sort order Etapa orderorder step
path Retorna o caminho completo da passagemReturns the full path of the traversal Etapa pathpath step
project Projeta as propriedades como um mapaProjects the properties as a Map Etapa projectproject step
properties Retorna as propriedades para os rótulos especificadosReturns the properties for the specified labels Etapa propertiesproperties step
range Filtra para o intervalo de valores especificadoFilters to the specified range of values Etapa rangerange step
repeat Repete a etapa o número de vezes especificado.Repeats the step for the specified number of times. Usada para efetuar loopUsed for looping Etapa repeatrepeat step
sample Usada para fazer a amostragem dos resultados da passagemUsed to sample results from the traversal Etapa samplesample step
select Usada para projetar resultados da passagemUsed to project results from the traversal Etapa selectselect step
store Usada para agregações sem bloqueio da passagemUsed for non-blocking aggregates from the traversal Etapa storestore step
TextP.startingWith(string) Função de filtragem de cadeia de caracteres.String filtering function. Essa função é usada como um predicado para a etapa has() para corresponder uma propriedade com o início de uma determinada cadeia de caracteresThis function is used as a predicate for the has() step to match a property with the beginning of a given string Predicados TextPTextP predicates
TextP.endingWith(string) Função de filtragem de cadeia de caracteres.String filtering function. Essa função é usada como um predicado para a etapa has() para corresponder uma propriedade com o final de uma determinada cadeia de caracteresThis function is used as a predicate for the has() step to match a property with the ending of a given string Predicados TextPTextP predicates
TextP.containing(string) Função de filtragem de cadeia de caracteres.String filtering function. Essa função é usada como um predicado para a etapa has() para corresponder uma propriedade com o conteúdo de uma determinada cadeia de caracteresThis function is used as a predicate for the has() step to match a property with the contents of a given string Predicados TextPTextP predicates
TextP.notStartingWith(string) Função de filtragem de cadeia de caracteres.String filtering function. Essa função é usada como um predicado para a etapa has() para corresponder uma propriedade que não começa com uma determinada cadeia de caracteresThis function is used as a predicate for the has() step to match a property that doesn't start with a given string Predicados TextPTextP predicates
TextP.notEndingWith(string) Função de filtragem de cadeia de caracteres.String filtering function. Essa função é usada como um predicado para a etapa has() para corresponder uma propriedade que não termina com uma determinada cadeia de caracteresThis function is used as a predicate for the has() step to match a property that doesn't end with a given string Predicados TextPTextP predicates
TextP.notContaining(string) Função de filtragem de cadeia de caracteres.String filtering function. Essa função é usada como um predicado para a etapa has() para corresponder uma propriedade que não contém uma determinada cadeia de caracteresThis function is used as a predicate for the has() step to match a property that doesn't contain a given string Predicados TextPTextP predicates
tree Agrega os caminhos de um vértice em uma árvoreAggregate paths from a vertex into a tree Etapa treetree step
unfold Desenrola um iterador como uma etapaUnroll an iterator as a step Etapa unfoldunfold step
union Mescla resultados de várias passagensMerge results from multiple traversals Etapa unionunion step
V Inclui as etapas necessárias para passagens entre vértices e bordas V, E, out, in, both, outE, inE, bothE, outV, inV, bothV e otherV paraIncludes the steps necessary for traversals between vertices and edges V, E, out, in, both, outE, inE, bothE, outV, inV, bothV, and otherV for Etapa vertexvertex steps
where Usada para filtrar os resultados da passagem.Used to filter results from the traversal. Dá suporte aos operadores eq, neq, lt, lte, gt, gte e betweenSupports eq, neq, lt, lte, gt, gte, and between operators Etapa wherewhere step

O mecanismo otimizado para gravação do Azure Cosmos DB dá suporte à indexação automática de todas as propriedades dentro dos vértices e bordas por padrão.The write-optimized engine provided by Azure Cosmos DB supports automatic indexing of all properties within vertices and edges by default. Sendo assim, consultas com filtros, consultas de intervalo, classificações ou agregações de qualquer propriedade são processadas no índice e atendidas de modo eficiente.Therefore, queries with filters, range queries, sorting, or aggregates on any property are processed from the index, and served efficiently. Para obter mais informações sobre como a indexação funciona no BD Cosmos do Azure, consulte nosso artigo sobre Indexação independente do esquema.For more information on how indexing works in Azure Cosmos DB, see our paper on schema-agnostic indexing.

Próximas etapasNext steps