Поддержка графа Gremlin в базе данных Azure Cosmos DBAzure Cosmos DB Gremlin graph support

Azure Cosmos DB поддерживает язык обхода графов Apache Tinkerpop, известный как Gremlin.Azure Cosmos DB supports Apache Tinkerpop's graph traversal language, known as Gremlin. Вы можете использовать язык Gremlin, чтобы создать сущности графа (вершины и ребра), изменить свойства в этих сущностях, выполнить запросы и обходы графа, а также удалить сущности.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.

Эта статья содержит краткое руководство по языку Gremlin с перечислением функций Gremlin, поддерживаемых в API Gremlin.In this article, we provide a quick walkthrough of Gremlin and enumerate the Gremlin features that are supported by the Gremlin API.

Совместимые клиентские библиотекиCompatible client libraries

В таблице ниже приведены распространенные драйверы Gremlin, которые вы можете использовать для базы данных Azure Cosmos DB.The following table shows popular Gremlin drivers that you can use against Azure Cosmos DB:

СкачиваниеDownload ИсточникSource Приступая к работеGetting Started Поддерживаемая версия соединителяSupported connector version
.NET.NET Gremlin.NET в GitHubGremlin.NET on GitHub Создание приложения Graph с помощью .NETCreate Graph using .NET 3.4.0-RC23.4.0-RC2
JavaJava Документация по Gremlin для JavaGremlin JavaDoc Создание приложения Graph с помощью JavaCreate Graph using Java 3.2.0 и выше3.2.0+
Node.jsNode.js Gremlin для JavaScript в GitHubGremlin-JavaScript on GitHub Создание приложения Graph с помощью Node.jsCreate Graph using Node.js 3.3.4 и выше3.3.4+
PythonPython Gremlin-Python в GitHubGremlin-Python on GitHub Создание приложения Graph с помощью PythonCreate Graph using Python 3.2.73.2.7
PHPPHP Gremlin-PHP в GitHubGremlin-PHP on GitHub Создание приложения Graph с помощью PHPCreate Graph using PHP 3.1.03.1.0
Консоль GremlinGremlin console Документация по TinkerPopTinkerPop docs Создание приложения Graph с помощью консоли GremlinCreate Graph using Gremlin Console 3.2.0 и выше3.2.0 +

Поддерживаемые объекты GraphSupported Graph Objects

TinkerPop — это стандартная платформа, которая охватывает широкий ряд технологий графа.TinkerPop is a standard that covers a wide range of graph technologies. Таким образом, она содержит стандартную терминологию для описания функций, которые предоставляет поставщик графа.Therefore, it has standard terminology to describe what features are provided by a graph provider. База данных Azure Cosmos DB обеспечивает временную базу данных графа с высокой степенью параллелизма и возможностью записи, которую можно разделить на секции на нескольких серверах или кластерах.Azure Cosmos DB provides a persistent, high concurrency, writeable graph database that can be partitioned across multiple servers or clusters.

В таблице ниже перечислены функции TinkerPop, реализованные в базе данных Azure Cosmos DB:The following table lists the TinkerPop features that are implemented by Azure Cosmos DB:

КатегорияCategory Реализация базы данных Azure Cosmos DBAzure Cosmos DB implementation ПримечанияNotes
Функции графаGraph features Обеспечивает сохраняемость и одновременный доступ.Provides Persistence and ConcurrentAccess. Разработаны для поддержки транзакций.Designed to support Transactions Вычислительные методы могут применяться через соединитель Spark.Computer methods can be implemented via the Spark connector.
Функции переменнойVariable features Поддерживаются такие типы значений: логическое значение, целое число, байт, двойное число с плавающей точкой, число с плавающей точкой, целое число со знаком, полная дата, строка.Supports Boolean, Integer, Byte, Double, Float, Integer, Long, String Поддерживаются несложные типы. Совместимы со сложными типами через модель данных.Supports primitive types, is compatible with complex types via data model
Функции вершиныVertex features Поддерживаются RemoveVertices, MetaProperties, AddVertices, MultiProperties, StringIds, UserSuppliedIds, AddProperty, RemoveProperty.Supports RemoveVertices, MetaProperties, AddVertices, MultiProperties, StringIds, UserSuppliedIds, AddProperty, RemoveProperty Поддерживается создание, изменение и удаление вершин.Supports creating, modifying, and deleting vertices
Функции свойств вершиныVertex property features Поддерживаются StringIds, UserSuppliedIds, AddProperty, RemoveProperty, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues.StringIds, UserSuppliedIds, AddProperty, RemoveProperty, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues Поддерживается создание, изменение и удаление свойств вершины.Supports creating, modifying, and deleting vertex properties
Функции ребраEdge features AddEdges, RemoveEdges, StringIds, UserSuppliedIds, AddProperty, RemovePropertyAddEdges, RemoveEdges, StringIds, UserSuppliedIds, AddProperty, RemoveProperty Поддерживается создание, изменение и удаление ребра.Supports creating, modifying, and deleting edges
Функции свойств ребраEdge property features Поддерживаются типы Properties, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues.Properties, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues Поддерживается создание, изменение и удаление свойств ребра.Supports creating, modifying, and deleting edge properties

Формат подключения GremlinGremlin wire format

При возвращении результатов операций Gremlin в Azure Cosmos DB используется формат JSON.Azure Cosmos DB uses the JSON format when returning results from Gremlin operations. Azure Cosmos DB сейчас поддерживает формат JSON.Azure Cosmos DB currently supports the JSON format. Например, в следующем фрагменте кода показано представление JSON вершины, возвращенной клиенту из Azure Cosmos DB.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
        }
      ]
    }
  }

Свойства вершин, используемые в формате JSON, описаны ниже:The properties used by the JSON format for vertices are described below:

СвойствоProperty ОписаниеDescription
id Идентификатор вершины.The ID for the vertex. Должен иметь уникальное значение (если применимо — со значением _partition).Must be unique (in combination with the value of _partition if applicable). Если значение не указано, оно будет предоставляться автоматически с помощью идентификатора GUID.If no value is provided, it will be automatically supplied with a GUID
label Метка вершины.The label of the vertex. Это свойство используется для описания типа сущности.This property is used to describe the entity type.
type Используется для отделения вершин от документов, не связанных с графом.Used to distinguish vertices from non-graph documents
properties Набор определенных пользователем свойств, связанных с вершиной.Bag of user-defined properties associated with the vertex. Каждое свойство может иметь несколько значений.Each property can have multiple values.
_partition Ключ секции вершины.The partition key of the vertex. Используется для секционирования данных графа.Used for graph partitioning.
outE Это свойство содержит список внешних ребер вершины.This property contains a list of out edges from a vertex. Хранение смежных сведений с помощью вершины обеспечивает быстрое выполнение обхода графов.Storing the adjacency information with vertex allows for fast execution of traversals. Ребра сгруппированы на основе меток.Edges are grouped based on their labels.

Ребро содержит приведенные ниже сведения, необходимые для перехода в другие части графа.And the edge contains the following information to help with navigation to other parts of the graph.

СвойствоProperty ОписаниеDescription
id Идентификатор ребра.The ID for the edge. Должен иметь уникальное значение (если применимо — со значением _partition).Must be unique (in combination with the value of _partition if applicable)
label Метка ребра.The label of the edge. Это свойство является необязательным и используется для описания типа связи.This property is optional, and used to describe the relationship type.
inV Это свойство содержит список внутренних вершин для ребра.This property contains a list of in vertices for an edge. Хранение смежных сведений с помощью ребра обеспечивает быстрое выполнение обхода графов.Storing the adjacency information with the edge allows for fast execution of traversals. Вершины сгруппированы на основе меток.Vertices are grouped based on their labels.
properties Набор определенных пользователем свойств, связанных с ребром.Bag of user-defined properties associated with the edge. Каждое свойство может иметь несколько значений.Each property can have multiple values.

Каждое свойство может хранить несколько значений в массиве.Each property can store multiple values within an array.

СвойствоProperty ОписаниеDescription
value Значение свойстваThe value of the property

Шаги GremlinGremlin steps

Теперь рассмотрим шаги Gremlin, поддерживаемые базой данных Azure Cosmos DB.Now let's look at the Gremlin steps supported by Azure Cosmos DB. Дополнительные сведения о Gremlin см. в руководстве по TinkerPop.For a complete reference on Gremlin, see TinkerPop reference.

Шагstep ОписаниеDescription Руководство по TinkerPop 3.2TinkerPop 3.2 Documentation
addE Добавляет ребро между двумя вершинами.Adds an edge between two vertices Шаг addEaddE step
addV Добавляет вершину в граф.Adds a vertex to the graph Шаг addVaddV step
and Обеспечивает возвращение значения для всех обходов.Ensures that all the traversals return a value Шаг andand step
as Модулятор шага для назначения переменной выходным данным шага.A step modulator to assign a variable to the output of a step Шаг asas step
by Модулятор шага, используемый с group и order.A step modulator used with group and order Шаг byby step
coalesce Возвращает первый обход, который возвращает результат.Returns the first traversal that returns a result Шаг coalescecoalesce step
constant Возвращает постоянное значение.Returns a constant value. Используется с coalesce.Used with coalesce Шаг constantconstant step
count Возвращает число из обхода.Returns the count from the traversal Шаг countcount step
dedup Возвращает значения с удаленными повторяющимися значениями.Returns the values with the duplicates removed Шаг dedupdedup step
drop Удаляет значения (вершины или ребра).Drops the values (vertex/edge) Шаг dropdrop step
executionProfile Создает описание всех операций, формируемых выполненным шагом GremlinCreates a description of all operations generated by the executed Gremlin step Шаг executionProfileexecutionProfile step
fold Действует как барьер, который вычисляет статистическое значение результатов.Acts as a barrier that computes the aggregate of results Шаг foldfold step
group Группирует значения на основе указанных меток.Groups the values based on the labels specified Шаг groupgroup step
has Используется для фильтрации свойств, вершин и ребер.Used to filter properties, vertices, and edges. Поддерживает варианты hasLabel, hasId, hasNot и has.Supports hasLabel, hasId, hasNot, and has variants. Шаг hashas step
inject Вставляет значения в поток.Inject values into a stream Шаг injectinject step
is Используется для выполнения фильтра с помощью логического выражения.Used to perform a filter using a boolean expression Шаг isis step
limit Используется для ограничения числа элементов в обходе.Used to limit number of items in the traversal Шаг limitlimit step
local Локально обертывает раздел обхода аналогично вложенному запросу.Local wraps a section of a traversal, similar to a subquery Шаг locallocal step
not Используется для создания отрицания фильтра.Used to produce the negation of a filter Шаг notnot step
optional Возвращает результат указанного обхода, если он выдается. В противном случае возвращается вызывающий элемент.Returns the result of the specified traversal if it yields a result else it returns the calling element Шаг optionaloptional step
or Гарантирует, что по крайней мере один из обходов возвращает значение.Ensures at least one of the traversals returns a value Шаг oror step
order Возвращает результаты в заданном порядке сортировки.Returns results in the specified sort order Шаг orderorder step
path Возвращает полный путь обхода.Returns the full path of the traversal Шаг pathpath step
project Выполняет проекцию свойств в виде сопоставления.Projects the properties as a Map Шаг projectproject step
properties Возвращает свойства для указанных меток.Returns the properties for the specified labels Шаг propertiesproperties step
range Выполняет фильтрацию до заданного диапазона значений.Filters to the specified range of values Шаг rangerange step
repeat Повторяет шаг указанное количество раз.Repeats the step for the specified number of times. Используется для циклов.Used for looping Шаг repeatrepeat step
sample Используется для вывода примеров результатов из обхода.Used to sample results from the traversal Шаг samplesample step
select Используется для проектирования результатов из обхода.Used to project results from the traversal Шаг selectselect step
store Используется для статистических функций из обхода без блокировки.Used for non-blocking aggregates from the traversal Шаг storestore step
TextP.startingWith(string) Функция фильтрации строк.String filtering function. Эта функция используется в качестве предиката для шага has() для сопоставления свойства, начинающегося с определенной строки.This function is used as a predicate for the has() step to match a property with the beginning of a given string Предикаты TextPTextP predicates
TextP.endingWith(string) Функция фильтрации строк.String filtering function. Эта функция используется в качестве предиката для шага has() для сопоставления свойства, заканчивающегося определенной строкой.This function is used as a predicate for the has() step to match a property with the ending of a given string Предикаты TextPTextP predicates
TextP.containing(string) Функция фильтрации строк.String filtering function. Эта функция используется в качестве предиката для шага has() для сопоставления свойства, содержащего определенную строку.This function is used as a predicate for the has() step to match a property with the contents of a given string Предикаты TextPTextP predicates
TextP.notStartingWith(string) Функция фильтрации строк.String filtering function. Эта функция используется в качестве предиката для шага has() для сопоставления свойства, не начинающегося с определенной строки.This function is used as a predicate for the has() step to match a property that doesn't start with a given string Предикаты TextPTextP predicates
TextP.notEndingWith(string) Функция фильтрации строк.String filtering function. Эта функция используется в качестве предиката для шага has() для сопоставления свойства, не заканчивающегося определенной строкой.This function is used as a predicate for the has() step to match a property that doesn't end with a given string Предикаты TextPTextP predicates
TextP.notContaining(string) Функция фильтрации строк.String filtering function. Эта функция используется в качестве предиката для шага has() для сопоставления свойства, не содержащего определенную строку.This function is used as a predicate for the has() step to match a property that doesn't contain a given string Предикаты TextPTextP predicates
tree Выполняет статистическое вычисление путей из вершины в дерево.Aggregate paths from a vertex into a tree Шаг treetree step
unfold Развертывает итератор.Unroll an iterator as a step Шаг unfoldunfold step
union Объединяет результаты из нескольких обходов.Merge results from multiple traversals Шаг unionunion step
V Содержит шаги, необходимые для обходов между вершинами и ребрами (V, E, out, in, both, outE, inE, bothE, outV, inV, bothV) и otherV — для других вершин.Includes the steps necessary for traversals between vertices and edges V, E, out, in, both, outE, inE, bothE, outV, inV, bothV, and otherV for Шаги vertexvertex steps
where Используется для фильтрации результатов из обхода.Used to filter results from the traversal. Поддерживает операторы eq, neq, lt, lte, gt, gte и between.Supports eq, neq, lt, lte, gt, gte, and between operators Шаг wherewhere step

Оптимизированный для операций записи обработчик Azure Cosmos DB по умолчанию поддерживает автоматическое индексирование всех свойств вершин и ребер.The write-optimized engine provided by Azure Cosmos DB supports automatic indexing of all properties within vertices and edges by default. Следовательно, запросы с фильтрами, запросы диапазона, сортировка или статистические функции для любого свойства обрабатываются из индекса и эффективно обслуживаются.Therefore, queries with filters, range queries, sorting, or aggregates on any property are processed from the index, and served efficiently. Дополнительные сведения о выполнении индексирования в базе данных Azure Cosmos DB см. в руководстве об индексировании без использования схем.For more information on how indexing works in Azure Cosmos DB, see our paper on schema-agnostic indexing.

Дальнейшие действияNext steps