Introdução ao Azure Cosmos DB: API do GremlinIntroduction to Azure Cosmos DB: Gremlin API

O Azure Cosmos DB é o serviço de banco de dados multimodelo distribuído globalmente da Microsoft para aplicativos de missão crítica.Azure Cosmos DB is the globally distributed, multi-model database service from Microsoft for mission-critical applications. Ele é um banco de dados multimodelo e dá suporte a modelos de dados de colunas, grafos, valores-chave e documentos.It is a multi-model database and supports document, key-value, graph, and columnar data models. A API do Gremlin do Azure Cosmos DB é usada para armazenar e operar com dados de grafo em um ambiente de banco de dados totalmente gerenciado em qualquer escala.The Azure Cosmos DB Gremlin API is used to store and operate with graph data on a fully managed database environment at any scale.

Arquitetura de grafo do Azure Cosmos DB

Este artigo fornece uma visão geral da API do Gremlin do Azure Cosmos DB e explica como você pode usá-lo para armazenar grandes grafos com bilhões de vértices e bordas.This article provides an overview of the Azure Cosmos DB Gremlin API and explains how you can use it to store massive graphs with billions of vertices and edges. Você pode consultar os grafos com latência de milissegundo e desenvolver a estrutura do grafo facilmente.You can query the graphs with millisecond latency and evolve the graph structure easily. API do Gremlin do Azure Cosmos DB se baseia no padrão do banco de dados de grafo do Apache TinkerPop  e usa a linguagem de consulta Gremlin.Azure Cosmos DB's Gremlin API is based on the Apache TinkerPop graph database standard, and uses the Gremlin query language.

A API do Gremlin do Azure Cosmos DB combina o poder dos algoritmos de banco de dados de grafo com a infraestrutura altamente escalonável e gerenciada para fornecer uma solução exclusiva e flexível para os problemas mais comuns de dados associados à falta de flexibilidade e abordagens relacionais.Azure Cosmos DB's Gremlin API combines the power of graph database algorithms with highly scalable, managed infrastructure to provide a unique, flexible solution to most common data problems associated with lack of flexibility and relational approaches.

Recursos do banco de dados de grafo do Azure Cosmos DBFeatures of Azure Cosmos DB graph database

O Azure Cosmos DB é um banco de dados de grafo totalmente gerenciado que oferece distribuição global, dimensionamento elástico do armazenamento e da taxa de transferência, indexação e consulta automática, níveis de consistência ajustáveis e suporte ao padrão TinkerPop.Azure Cosmos DB is a fully managed graph database that offers global distribution, elastic scaling of storage and throughput, automatic indexing and query, tunable consistency levels, and support for the TinkerPop standard.

Estes são recursos diferenciados oferecidos pela API do Gremlin do Azure Cosmos DB:The following are the differentiated features that Azure Cosmos DB Gremlin API offers:

  • Dimensionamento elástico do armazenamento e da taxa de transferênciaElastically scalable throughput and storage

    Grafos no mundo real precisam ser dimensionados além da capacidade de um único servidor.Graphs in the real world need to scale beyond the capacity of a single server. O Azure Cosmos DB oferece suporte a bancos de dados de grafo que podem ter um tamanho praticamente ilimitado em termos de taxa de transferência provisionada.Azure Cosmos DB supports horizontally scalable graph databases that can have a virtually unlimited size in terms of and provisioned throughput. À medida que aumenta a escala do banco de dados de grafo, os dados serão distribuídos automaticamente usando o particionamento do graph.As the graph database scale grows, the data will be automatically distributed using graph partitioning.

  • Replicação de várias regiõesMulti-region replication

    O Azure Cosmos DB pode replicar automaticamente seus dados de grafo para qualquer região do Azure.Azure Cosmos DB can automatically replicate your graph data to any Azure region. A replicação simplifica o desenvolvimento de aplicativos que exigem acesso global aos dados.Replication simplifies the development of applications that require global access to data. Além de minimizar a latência de leitura, o Azure Cosmos DB fornece um mecanismo de failover regional que pode garantir a continuidade do seu aplicativo no caso raro de uma interrupção de serviço em uma região.In addition to minimizing read latency, Azure Cosmos DB provides a regional failover mechanism that can ensure the continuity of your application in the rare case of a service interruption in a region.

  • Passagens e consultas rápidas com o padrão de consulta de grafo mais amplamente adotadoFast queries and traversals with the most widely adopted graph query standard

    Armazenar bordas e vértices heterogêneos e consultar esses documentos por meio de uma sintaxe Gremlin familiar.Store heterogeneous vertices and edges and query these documents through a familiar Gremlin syntax. O Gremlin é uma linguagem de consulta imperativa e funcional que fornece uma interface avançada para implementar algoritmos de grafo comuns.Gremlin is an imperative, functional query language that provides a rich interface to implement common graph algorithms.

    O Azure Cosmos DB habilita passagens e consultas avançadas em tempo real sem a necessidade de especificar dicas de esquema, índices secundários ou exibições.Azure Cosmos DB enables rich real-time queries and traversals without the need to specify schema hints, secondary indexes, or views. Saiba mais em Consultar grafos usando Gremlin.Learn more in Query graphs by using Gremlin.

  • Banco de dados de grafo totalmente gerenciadoFully managed graph database

    O BD Cosmos do Azure elimina a necessidade de gerenciar recursos do computador e do banco de dados.Azure Cosmos DB eliminates the need to manage database and machine resources. A maioria das plataformas existentes de banco de dados de grafo está associada às limitações de infraestrutura dela e geralmente exigem um alto grau de manutenção para garantir sua operação.Most existing graph database platforms are bound to the limitations of their infrastructure and often require a high degree of maintenance to ensure its operation.

    Como um serviço do Microsoft Azure totalmente gerenciado, não é necessário gerenciar máquinas virtuais, atualizar o software de tempo de execução, gerenciar a fragmentação ou a replicação nem lidar com atualizações de camadas de dados complexas.As a fully managed Microsoft Azure service, there is no need to manage virtual machines, update runtime software, manage sharding or replication, or deal with complex data-tier upgrades. Cada grafo é salvo em backup automaticamente e protegido contra falhas regionais.Every graph is automatically backed up and protected against regional failures. Essas garantias permitem que os desenvolvedores se concentrem no fornecimento de valor para o aplicativo em vez de operar e gerenciar os bancos de dados deles.These guarantees allow developers to focus on delivering application value instead of operating and managing their databases.

  • Indexação automáticaAutomatic indexing

    Por padrão, o Azure Cosmos DB indexa automaticamente todas as propriedades dentro dos nós e bordas do grafo e não espera ou exige qualquer esquema ou criação de índices secundários.By default, Azure Cosmos DB automatically indexes all the properties within nodes and edges in the graph and doesn't expect or require any schema or creation of secondary indices. Saiba mais sobre a indexação no Azure Cosmos DB.Learn more about indexing in Azure Cosmos DB.

  • Compatibilidade com o Apache TinkerPopCompatibility with Apache TinkerPop

    O Azure Cosmos DB dá suporte a padrão do código-fonte aberto Apache TinkerPop.Azure Cosmos DB supports the open-source Apache TinkerPop standard. O padrão Tinkerpop tem um amplo ecossistema de aplicativos e bibliotecas que podem ser facilmente integradas com a API do Gremlin do Azure Cosmos DB.The Tinkerpop standard has an ample ecosystem of applications and libraries that can be easily integrated with Azure Cosmos DB's Gremlin API.

  • Níveis de consistência ajustáveisTunable consistency levels

    Escolha entre cinco níveis de consistência bem-definidos para chegar ao equilíbrio ideal entre consistência e desempenho.Select from five well-defined consistency levels to achieve optimal tradeoff between consistency and performance. Para operações de consulta e leitura, o Azure Cosmos DB oferece cinco níveis de consistência diferentes: forte, desatualização limitada, sessão, prefixo constante e eventual.For queries and read operations, Azure Cosmos DB offers five distinct consistency levels: strong, bounded-staleness, session, consistent prefix, and eventual. Esses níveis de consistência granulares e bem-definidos permitem que você faça compensações seguras entre consistência, disponibilidade e latência.These granular, well-defined consistency levels allow you to make sound tradeoffs among consistency, availability, and latency. Saiba mais em Níveis ajustáveis de consistência de dados no Azure Cosmos DB.Learn more in Tunable data consistency levels in Azure Cosmos DB.

Cenários que podem usar a API GremlinScenarios that can use Gremlin API

Veja alguns cenários em que o suporte para grafo do Azure Cosmos DB pode ser usado:Here are some scenarios where graph support of Azure Cosmos DB can be used:

  • Redes SociaisSocial networks

    Combinando dados sobre seus clientes e as interações deles com outras pessoas, você pode desenvolver experiências personalizadas, prever o comportamento do cliente ou conectar pessoas com interesses semelhantes.By combining data about your customers and their interactions with other people, you can develop personalized experiences, predict customer behavior, or connect people with others with similar interests. O BD Cosmos do Azure pode ser usado para gerenciar redes sociais e monitorar dados e preferências do cliente.Azure Cosmos DB can be used to manage social networks and track customer preferences and data.

  • Mecanismos de recomendaçãoRecommendation engines

    Este cenário costuma ser usado no setor de varejo.This scenario is commonly used in the retail industry. Combinando informações sobre produtos, usuários e interações do usuário, como compras, navegação ou a classificação de um item, você pode criar recomendações personalizadas.By combining information about products, users, and user interactions, like purchasing, browsing, or rating an item, you can build customized recommendations. O Azure Cosmos DB, com sua baixa latência, dimensionamento elástico e suporte para grafo nativo, é ideal para modelar essas interações.The low latency, elastic scale, and native graph support of Azure Cosmos DB is ideal for modeling these interactions.

  • GeoespacialGeospatial

    Muitos aplicativos de telecomunicações, logística e planejamento de viagens precisam encontrar um local de interesse em uma área específica ou localizar a rota mais curta/ideal entre dois locais.Many applications in telecommunications, logistics, and travel planning need to find a location of interest within an area or locate the shortest/optimal route between two locations. O BD Cosmos do Azure é uma solução natural para esses problemas.Azure Cosmos DB is a natural fit for these problems.

  • Internet das coisasInternet of Things

    Com a rede e as conexões entre os dispositivos IoT modelados como um grafo, você pode criar uma melhor compreensão do estado de seus dispositivos e ativos.With the network and connections between IoT devices modeled as a graph, you can build a better understanding of the state of your devices and assets. Você também pode saber mais como as alterações em uma parte da rede podem afetar potencialmente outra parte.You also can learn how changes in one part of the network can potentially affect another part.

Introdução aos bancos de dados de grafoIntroduction to graph databases

Os dados da forma como aparecem no mundo real são conectados naturalmente.Data as it appears in the real world is naturally connected. A modelagem de dados tradicional se concentra em definir as entidades separadamente e computar as relações delas no tempo de execução.Traditional data modeling focuses on defining entities separately and computing their relationships at runtime. Embora esse modelo tenha suas vantagens, dados altamente conectados podem ser desafiadores de gerenciar em conformidade com as restrições deles.While this model has its advantages, highly connected data can be challenging to manage under its constraints.

Por sua vez, uma abordagem de banco de dados de grafo se baseia em manter relações na camada de armazenamento,o que leva a operações de recuperação de grafo altamente eficientes.A graph database approach relies on persisting relationships in the storage layer instead, which leads to highly efficient graph retrieval operations. A API do Gremlin do Azure Cosmos DB dá suporte ao modelo de grafo da propriedade.Azure Cosmos DB's Gremlin API supports the property graph model.

Objetos de grafo de propriedadeProperty graph objects

Um grafo de propriedade é uma estrutura composta por vértices e bordas.A property graph is a structure that's composed of vertices and edges. Ambos os objetos têm um número arbitrário de pares chave-valor como propriedades.Both objects can have an arbitrary number of key-value pairs as properties.

  • Vértices – os vértices denotam entidades individuais, como uma pessoa, um lugar ou um evento.Vertices - Vertices denote discrete entities, such as a person, a place, or an event.

  • Bordas - as bordas indicam relações entre os vértices.Edges - Edges denote relationships between vertices. Por exemplo, uma pessoa pode conhecer a outra pessoa, estar envolvida em um evento e foi recentemente a um local.For example, a person might know another person, be involved in an event, and recently been at a location.

  • Propriedades - as propriedades expressam informações sobre os vértices e as bordas.Properties - Properties express information about the vertices and edges. Pode haver qualquer número de propriedades nos vértices ou nas bordas e elas podem ser usadas para descrever e filtrar os objetos em uma consulta.There can be any number of properties in either vertices or edges, and they can be used to describe and filter the objects in a query. As propriedades de exemplo incluem um vértice com um nome, uma idade e um limite com um carimbo de data/hora ou um peso.Example properties include a vertex that has name and age, or an edge, which can have a time stamp and/or a weight.

Os bancos de dados de gráfico costumam ser incluídos na categoria de banco de dados de NoSQL, ou não relacional, uma vez que não há nenhuma dependência no modelo de dados restrito ou de esquema.Graph databases are often included within the NoSQL, or non-relational, database category since there is no dependency on a schema or constrained data model. Essa falta de esquema permite modelar e armazenar estruturas conectadas de forma natural e eficiente.This lack of schema allows for modelling and storing connected structures naturally and efficiently.

Gremlin pelo exemploGremlin by example

Vamos usar um grafo de exemplo para entender como as consultas podem ser expressas no Gremlin.Let's use a sample graph to understand how queries can be expressed in Gremlin. A figura a seguir mostra um aplicativo de negócios que gerencia dados sobre usuários, interesses e dispositivos na forma de um grafo.The following figure shows a business application that manages data about users, interests, and devices in the form of a graph.

Banco de dados de exemplo mostrando interesses, dispositivos e pessoas

Este grafo tem os seguintes tipos de vértice (chamados de "rótulo" no Gremlin):This graph has the following vertex types (called "label" in Gremlin):

  • Pessoas: O grafo tem três pessoas; Robin, Thomas e BenPeople: The graph has three people, Robin, Thomas, and Ben
  • Interesses: Os interesses dessas pessoas, que neste exemplo é o jogo de futebolInterests: Their interests, in this example, the game of Football
  • Dispositivos: Os dispositivos que as pessoas usamDevices: The devices that people use
  • Sistemas operacionais: Os sistemas operacionais em que os dispositivos executamOperating Systems: The operating systems that the devices run on

Nós representamos as relações entre essas entidades usando os seguintes tipos/rótulos de borda:We represent the relationships between these entities via the following edge types/labels:

  • Conhece: Por exemplo, "Thomas conhece Robin"Knows: For example, "Thomas knows Robin"
  • Interessado: Para representar os interesses das pessoas em nosso grafo, por exemplo, "Ben está interessado em futebol"Interested: To represent the interests of the people in our graph, for example, "Ben is interested in Football"
  • RunsOS: O laptop executa o sistema operacional WindowsRunsOS: Laptop runs the Windows OS
  • Usa: Para representar qual dispositivo uma pessoa usa.Uses: To represent which device a person uses. Por exemplo, Robin usa um telefone Motorola com o número de série 77For example, Robin uses a Motorola phone with serial number 77

Vamos executar algumas operações nesse grafo usando o Console do Gremlin.Let's run some operations against this graph using the Gremlin Console. Você também pode executar essas operações usando drivers do Gremlin na plataforma de sua escolha (Java, Node.js, Python ou .NET).You can also perform these operations using Gremlin drivers in the platform of your choice (Java, Node.js, Python, or .NET). Antes de examinarmos o que tem suporte no BD Cosmos do Azure, vejamos alguns exemplos para nos familiarizarmos com a sintaxe.Before we look at what's supported in Azure Cosmos DB, let's look at a few examples to get familiar with the syntax.

Primeiro, vamos ver o CRUD.First let's look at CRUD. A seguinte instrução do Gremlin insere o vértice "Thomas" no grafo:The following Gremlin statement inserts the "Thomas" vertex into the graph:

:> g.addV('person').property('id', 'thomas.1').property('firstName', 'Thomas').property('lastName', 'Andersen').property('age', 44)

Em seguida, a seguinte instrução do Gremlin insere uma borda do tipo "conhece" entre Thomas e Robin.Next, the following Gremlin statement inserts a "knows" edge between Thomas and Robin.

:> g.V('thomas.1').addE('knows').to(g.V('robin.1'))

A consulta a seguir retorna os vértices do tipo "pessoa" na ordem decrescente de seus nomes:The following query returns the "person" vertices in descending order of their first names:

:> g.V().hasLabel('person').order().by('firstName', decr)

Os grafos se destacam em situações em que você precisa responder perguntas como "Quais sistemas operacionais os amigos de Thomas usam?".Where graphs shine is when you need to answer questions like "What operating systems do friends of Thomas use?". Você pode executar esse transversal do Gremlin para obter informações do gráfico:You can run this Gremlin traversal to get that information from the graph:

:> g.V('thomas.1').out('knows').out('uses').out('runsos').group().by('name').by(count())

Agora, vejamos o que o BD Cosmos do Azure oferece para desenvolvedores de Gremlin.Now let's look at what Azure Cosmos DB provides for Gremlin developers.

Próximas etapasNext steps

Para saber mais sobre o suporte para grafo no Azure Cosmos DB, consulte:To learn more about graph support in Azure Cosmos DB, see: