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

Azure Cosmos DB é oserviç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. É um banco de dados multimodelo e oferece suporte a modelos de documentos, de valor de chave, de gráfico e de família de colunas.It is a multi-model database and supports document, key-value, graph, and column-family data models. A API Azure Cosmos DB Gremlin é usada para armazenar e operar com dados de grafo em um serviço de banco de dados totalmente gerenciado projetado para qualquer escala.The Azure Cosmos DB Gremlin API is used to store and operate with graph data on a fully managed database service designed for any scale.

Arquitetura de gráficos do Azure Cosmos DB

Este artigo fornece uma descrição geral da API do Gremlin do Azure Cosmos DB e explica como pode utilizá-la para armazenar gráficos enormes com milhares de milhões de vértices e margens.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 milissegundos e desenvolver a estrutura do gráfico facilmente.You can query the graphs with millisecond latency and evolve the graph structure easily. A API Gremlin do Azure Cosmos DB é baseada no padrão de 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 Gremlin da Azure Cosmos DB combina o poder dos algoritmos de banco de dados do grafo com infraestrutura gerenciada e altamente escalonável para fornecer uma solução exclusiva e flexível para os problemas de dados mais comuns 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.

Funcionalidades da base de dados de gráficos do Azure Cosmos DBFeatures of Azure Cosmos DB graph database

O Azure Cosmos DB é uma base de dados de gráficos completamente gerida que oferece distribuição global, dimensionamento elástico do débito e armazenamento, consulta e indexação automática, níveis de consistência ajustáveis e suporte para o 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.

Veja a seguir os recursos diferenciados que Azure Cosmos DB a API do Gremlin oferece:The following are the differentiated features that Azure Cosmos DB Gremlin API offers:

  • Produtividade e armazenamento escalonáveis de forma elásticaElastically scalable throughput and storage

    Os gráficos no mundo real precisam de ser dimensionados para 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 dá suporte a bancos de dados de grafo escalonáveis horizontalmente que podem ter um tamanho praticamente ilimitado em termos de armazenamento e taxa de transferência provisionada.Azure Cosmos DB supports horizontally scalable graph databases that can have a virtually unlimited size in terms of storage and provisioned throughput. À medida que a escala do banco de dados do grafo cresce, os dados serão automaticamente distribuídos usando o particionamento do grafo.As the graph database scale grows, the data will be automatically distributed using graph partitioning.

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

    Azure Cosmos DB pode replicar automaticamente os dados do grafo para qualquer região do Azure em todo o mundo.Azure Cosmos DB can automatically replicate your graph data to any Azure region worldwide. A replicação global simplifica o desenvolvimento de aplicativos que exigem acesso global aos dados.Global replication simplifies the development of applications that require global access to data. Além de minimizar a latência de leitura e gravação em qualquer lugar do mundo, Azure Cosmos DB fornece um mecanismo de failover regional automático 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 and write latency anywhere around the world, Azure Cosmos DB provides automatic regional failover mechanism that can ensure the continuity of your application in the rare case of a service interruption in a region.

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

    Armazene bordas e vértices heterogêneos e consulte-os por meio de uma sintaxe Gremlin familiar.Store heterogeneous vertices and edges and query them through a familiar Gremlin syntax. Gremlin é uma linguagem de consulta imperativa e funcional que fornece uma interface rica 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 permite consultas e atravessamentos 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 Query graphs by using Gremlin (Consultar gráficos com o Gremlin).Learn more in Query graphs by using Gremlin.

  • Banco de dados de grafo totalmente gerenciadoFully managed graph database

    O Azure Cosmos DB elimina a necessidade de gerir recursos de máquinas e bases de dados.Azure Cosmos DB eliminates the need to manage database and machine resources. A maioria das plataformas de banco de dados de grafo existentes estão ligadas às limitações de sua infraestrutura e, muitas vezes, 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 totalmente gerenciado, o Cosmos DB elimina a necessidade de gerenciar máquinas virtuais, atualizar o software de tempo de execução, gerenciar a fragmentação ou a replicação ou lidar com atualizações complexas da camada de dados.As a fully managed service, Cosmos DB removes the need to manage virtual machines, update runtime software, manage sharding or replication, or deal with complex data-tier upgrades. São criadas cópias de segurança automáticas de todos os gráficos e estes são protegidos contra falhas regionais.Every graph is automatically backed up and protected against regional failures. Essas garantias permitem que os desenvolvedores se concentrem no fornecimento do valor do aplicativo em vez de operar e gerenciar seus bancos de dados de grafo.These guarantees allow developers to focus on delivering application value instead of operating and managing their graph databases.

  • Indexação automáticaAutomatic indexing

    Por predefinição, o Azure Cosmos DB indexa automaticamente todas as propriedades dos nós e margens do gráfico e não precisa de nenhum 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

    Azure Cosmos DB dá suporte ao padrão Apache TinkerPop de código aberto.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 integrados à API 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

    O Azure Cosmos DB fornece cinco níveis de consistência bem definidos para alcançar a compensação certa entre consistência e desempenho para seu aplicativo.Azure Cosmos DB provides five well-defined consistency levels to achieve the right tradeoff between consistency and performance for your application. Para consultas e operações de leitura, o Azure Cosmos DB oferece cinco níveis de consistência distintos: forte, consistência vinculada, sessão, prefixo de consistência e eventual.For queries and read operations, Azure Cosmos DB offers five distinct consistency levels: strong, bounded-staleness, session, consistent prefix, and eventual. Estes níveis de consistência granulares e bem definidos permitem-lhe atingir um equilíbrio eficaz entre a consistência, a disponibilidade e a latência.These granular, well-defined consistency levels allow you to make sound tradeoffs among consistency, availability, and latency. Saiba mais em Tunable data consistency levels in Azure Cosmos DB (Níveis de consistência de dados ajustáveis no Azure Cosmos DB).Learn more in Tunable data consistency levels in Azure Cosmos DB.

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

Aqui estão alguns cenários em que o suporte a grafo do Azure Cosmos DB pode ser útil:Here are some scenarios where graph support of Azure Cosmos DB can be useful:

  • Redes sociais/cliente 365Social networks/Customer 365

    Ao combinar dados sobre os seus clientes e as respetivas interações com outras pessoas, pode desenvolver experiências personalizadas, prever o comportamento dos clientes ou ligar 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 Azure Cosmos DB pode ser utilizado para gerir redes sociais e registar os dados e preferências dos clientes.Azure Cosmos DB can be used to manage social networks and track customer preferences and data.

  • Mecanismos de recomendaçãoRecommendation engines

    Este cenário é normalmente utilizado na indústria do retalho.This scenario is commonly used in the retail industry. Ao combinar informações sobre produtos, utilizadores e as respetivas interações, como compras, pesquisas ou classificações de produtos, 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. A baixa latência, a escala elástica e o suporte a grafo nativo do Azure Cosmos DB é ideal para esses cenários.The low latency, elastic scale, and native graph support of Azure Cosmos DB is ideal for these scenarios.

  • GeoespaciaisGeospatial

    Muitas aplicações de telecomunicações, logística e planeamento de viagens precisam de localizar um ponto de interesse numa área ou o caminho mais curto/ideal entre duas localizações.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 Azure Cosmos DB é uma solução natural para estes problemas.Azure Cosmos DB is a natural fit for these problems.

  • Internet das CoisasInternet of Things

    Com a rede e ligações entre dispositivos da IoT modeladas como um gráfico, pode compreender melhor o estado dos seus dispositivos e recursos.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. Também pode saber como as alterações numa parte da rede podem potencialmente afetar 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, tal como são apresentados no mundo real, estão ligados naturalmente.Data as it appears in the real world is naturally connected. A modelagem de dados tradicional se concentra na definição de entidades separadamente e na computação de suas relações em tempo de execução.Traditional data modeling focuses on defining entities separately and computing their relationships at runtime. Embora esse modelo tenha suas vantagens, os dados altamente conectados podem ser desafiadores a serem gerenciados sob suas restrições.While this model has its advantages, highly connected data can be challenging to manage under its constraints.

Uma abordagem de banco de dados de grafo depende das relações persistentes 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 Gremlin do Azure Cosmos DB dá suporte ao modelo de gráfico de propriedades.Azure Cosmos DB's Gremlin API supports the property graph model.

Objetos de gráfico de propriedadesProperty graph objects

Um grafo de propriedades é uma estrutura composta por vértices e bordas.A property graph is a structure that's composed of vertices and edges. Ambos os objetos podem ter 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 -vértices denotam entidades discretas, como uma pessoa, um local ou um evento.Vertices - Vertices denote discrete entities, such as a person, a place, or an event.

  • Margens - As margens denotam as relações entre vértices.Edges - Edges denote relationships between vertices. Por exemplo, uma pessoa pode conhecer outra pessoa, participar num evento e ter estado numa localização recentemente.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 margens.Properties - Properties express information about the vertices and edges. Pode haver qualquer número de propriedades em vértices ou 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 que tem nome e idade, ou uma borda, que pode ter um carimbo de data/hora e/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 grafo geralmente são incluídos na categoria NoSQL ou não relacional do banco de dados, já que não há nenhuma dependência de um esquema ou de um modelo de dado restrito.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 modeling and storing connected structures naturally and efficiently.

Exemplo do GremlinGremlin by example

Vamos utilizar um gráfico de exemplo para compreender como as consultas podem ser expressadas no Gremlin.Let's use a sample graph to understand how queries can be expressed in Gremlin. A imagem seguinte apresenta uma aplicação empresarial que gere dados sobre os utilizadores, interesses e dispositivos sob a forma de um gráfico.The following figure shows a business application that manages data about users, interests, and devices in the form of a graph.

Base de dados de exemplo a mostrar pessoas, dispositivos e interesses

Esse grafo tem os seguintes tipos de vértice (chamados de "rótulo" em 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: Seus interesses, 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 nos quais os dispositivos são executadosOperating Systems: The operating systems that the devices run on

Representamos as relações entre essas entidades por meio dos seguintes tipos/rótulos de borda :We represent the relationships between these entities via the following edge types/labels:

  • Sabe: Por exemplo, "Thomas sabe 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 o dispositivo usado por uma pessoa.Uses: To represent which device a person uses. Por exemplo, a Robin utiliza um telemóvel Motorola com o número de série 77For example, Robin uses a Motorola phone with serial number 77

Vamos executar algumas operações em relação a este gráfico com a Consola do Gremlin.Let's run some operations against this graph using the Gremlin Console. Também pode efetuar estas operações com os controladores do Gremlin na plataforma que preferir (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 vermos o que é suportado no Azure Cosmos DB, vamos ver alguns exemplos para se familiarizar 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.

Em primeiro lugar, vamos ver o CRUD.First let's look at CRUD. A seguinte instrução do Gremlin insere o vértice "Thomas" no gráfico: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 um limite "knows" (conhece) entre o Thomas e a 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 seguinte devolve os vértices "person" (pessoa) por ordem descendente dos nomes próprios:The following query returns the "person" vertices in descending order of their first names:

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

Os gráficos são bastante úteis quando tem de responder a perguntas como "What operating systems do friends of Thomas use?" (Que sistemas operativos utilizam os amigos do Thomas?).Where graphs shine is when you need to answer questions like "What operating systems do friends of Thomas use?". Você pode executar essa passagem Gremlin para obter essas informações do grafo: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())

Passos SeguintesNext steps

Para saber mais sobre o suporte de gráficos no Azure Cosmos DB, veja:To learn more about graph support in Azure Cosmos DB, see: