O que é o Azure Cosmos DB para o Apache Gremlin?

APLICA-SE A: Gremlin

O Azure Cosmos DB é um NoSQL totalmente gerido e uma base de dados relacional para desenvolvimento de aplicações modernas.

O Azure Cosmos DB para Apache Gremlin é um serviço de base de dados de grafos que pode ser utilizado para armazenar gráficos maciços com milhares de milhões de vértices e arestas. Pode consultar os gráficos com latência de milissegundos e evoluir facilmente a estrutura do gráfico. A API para Gremlin é criada com base no Apache TinkerPop, uma arquitetura de computação de grafos que utiliza a linguagem de consulta Gremlin.

Importante

O motor de grafo do Azure Cosmos DB segue de perto a especificação do Apache TinkerPop. No entanto, existem algumas diferenças nos detalhes de implementação que são específicos para o Azure Cosmos DB. Algumas funcionalidades suportadas pelo Apache TinkerPop não estão disponíveis no Azure Cosmos DB, para saber mais sobre as funcionalidades não suportadas, veja o artigo compatibilidade com o Apache TinkerPop .

A API para Gremlin combina a potência dos algoritmos de base de dados de grafos com uma infraestrutura gerida altamente dimensionável. Esta abordagem fornece uma solução única e flexível para problemas de dados comuns associados a restrições inflexíveis ou relacionais.

Dica

Quer experimentar a API do Gremlin sem compromisso? Crie uma conta do Azure Cosmos DB com o Try Azure Cosmos DB gratuitamente.

Benefícios da API para Gremlin

A API para Gremlin adicionou benefícios de ser criada no Azure Cosmos DB:

  • Débito e armazenamento dimensionáveis elasticamente: os gráficos no mundo real têm de ser dimensionados para além da capacidade de um único servidor. O Azure Cosmos DB suporta bases de dados de grafos horizontalmente dimensionáveis que podem ter um tamanho ilimitado em termos de armazenamento e débito aprovisionado. À medida que a escala da base de dados de grafos aumenta, os dados são distribuídos automaticamente através da criação de partições de grafos.

  • Replicação de várias regiões: o Azure Cosmos DB pode replicar automaticamente os seus dados de grafos para qualquer região do Azure em todo o mundo. A replicação global simplifica o desenvolvimento de aplicações que requerem acesso global aos dados. Além de minimizar a latência de leitura e escrita em qualquer parte do mundo, o Azure Cosmos DB fornece um mecanismo de ativação pós-falha regional gerido pelo serviço. Este mecanismo pode garantir a continuidade da sua aplicação no caso raro de uma interrupção do serviço numa região.

  • Consultas rápidas e percursos com o padrão de consulta de grafo mais amplamente adotado: armazene vértices e arestas heterogéneos e consulte-os através de uma sintaxe familiar do Gremlin. O Gremlin é uma linguagem de consulta imperativa e funcional que fornece uma interface avançada para implementar algoritmos de grafos comuns. A API para Gremlin permite consultas e percursos avançados em tempo real sem a necessidade de especificar sugestões de esquema, índices secundários ou vistas. Para obter mais informações, veja consultar gráficos com o Gremlin.

  • Base de dados de grafos totalmente gerida: o Azure Cosmos DB elimina a necessidade de gerir a base de dados e os recursos da máquina. A maioria das plataformas de bases de dados de grafos existentes está vinculada às limitações da respetiva infraestrutura e, muitas vezes, requer um elevado grau de manutenção para garantir o seu funcionamento. Como um serviço totalmente gerido, o Cosmos DB remove a necessidade de gerir máquinas virtuais, atualizar software de runtime, gerir fragmentação ou replicação ou lidar com atualizações complexas da camada de dados. São criadas cópias de segurança automáticas de todos os gráficos e estes são protegidos contra falhas regionais. Esta gestão permite que os programadores se concentrem na entrega do valor da aplicação em vez de operarem e gerirem as respetivas bases de dados de grafos.

  • Indexação automática: por predefinição, a API para Gremlin indexa automaticamente todas as propriedades nos nós (também denominados vértices) e arestas no gráfico e não espera nem requer qualquer esquema ou criação de índices secundários. Para obter mais informações, veja indexação no Azure Cosmos DB.

  • Compatibilidade com o Apache TinkerPop: a API para Gremlin suporta a norma Apache TinkerPop open source. A norma Apache TinkerPop tem um amplo ecossistema de aplicações e bibliotecas que podem ser facilmente integrados com a API.

  • Níveis de consistência ajustáveis: o Azure Cosmos DB fornece cinco níveis de consistência bem definidos para alcançar o compromisso certo entre a consistência e o desempenho da sua aplicação. 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. 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. Para obter mais informações, veja Níveis de consistência de dados ajustáveis no Azure Cosmos DB.

Cenários comuns para a API para o Gremlin

Eis alguns cenários em que o suporte de gráficos do Azure Cosmos DB pode ser útil:

  • Redes sociais/Cliente 365: ao combinar dados sobre os seus clientes e as suas interações com outras pessoas, pode desenvolver experiências personalizadas, prever o comportamento do cliente ou ligar pessoas a outras pessoas com interesses semelhantes. O Azure Cosmos DB pode ser utilizado para gerir redes sociais e registar os dados e preferências dos clientes.

  • Motores de recomendação: este cenário é normalmente utilizado no setor de retalho. 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. A baixa latência, a escala elástica e o suporte de gráficos nativos do Azure Cosmos DB são ideais para estes cenários.

  • Geoespacial: muitas aplicações em telecomunicações, logística e planeamento de viagens precisam de encontrar uma localização de interesse numa área ou localizar a rota mais curta/ideal entre duas localizações. O Azure Cosmos DB é uma solução natural para estes problemas.

  • Internet das Coisas: com a rede e as ligações entre dispositivos IoT modelados como um gráfico, pode criar uma melhor compreensão do estado dos seus dispositivos e recursos. Também pode saber como as alterações numa parte da rede podem potencialmente afetar outra parte.

Introdução às bases de dados de gráficos

Os dados, tal como são apresentados no mundo real, estão ligados naturalmente. A modelação de dados tradicional centra-se na definição de entidades separadamente e na computação das respetivas relações no runtime. Embora este modelo tenha as suas vantagens, os dados altamente ligados podem ser difíceis de gerir sob as suas restrições.

Uma abordagem de base de dados de grafos baseia-se em relações persistentes na camada de armazenamento, o que leva a operações de obtenção de gráficos altamente eficientes. A API para Gremlin suporta o modelo de gráfico de propriedades.

Objetos de gráfico de propriedades

Um gráfico de propriedades é uma estrutura composta por vértices e arestas. Ambos os objetos podem ter um número arbitrário de pares chave-valor como propriedades.

  • Vértices/nós: os vértices denotam entidades discretas, como uma pessoa, um local ou um evento.

  • Arestas/relações: as arestas denotam relações entre vértices. Por exemplo, uma pessoa pode conhecer outra pessoa, estar envolvida num evento ou ter estado recentemente num local.

  • Propriedades: propriedades expressam informações (ou metadados) sobre os vértices e as arestas. Pode haver qualquer número de propriedades em vértices ou arestas e podem ser utilizadas para descrever e filtrar os objetos numa consulta. As propriedades de exemplo incluem um vértice com nome e idade, ou uma margem, que pode ter um carimbo de data/hora e/ou um peso.

  • Etiqueta – uma etiqueta é um nome ou o identificador de um vértice ou limite. As etiquetas podem agrupar múltiplos vértices ou arestas de modo a que todos os vértices/arestas num grupo tenham uma determinada etiqueta. Por exemplo, um gráfico pode ter múltiplos vértices com uma etiqueta de "pessoa".

Muitas vezes, as bases de dados de gráficos são incluídas na categoria NoSQL ou base de dados não relacional, uma vez que não existe nenhuma dependência num esquema ou num modelo de dados restrito. Esta falta de esquema permite modelar e armazenar estruturas ligadas de forma natural e eficiente.

Exemplo de uma base de dados de grafo

Vamos utilizar um gráfico de exemplo para compreender como as consultas podem ser expressadas no 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.

Gráfico de propriedades de exemplo que mostra pessoas, dispositivos e interesses.

Este gráfico tem os seguintes tipos de vértices . Estes tipos também são denominados etiquetas no Gremlin:

  • Pessoas: o gráfico tem três pessoas; Robin, Thomas e Ben.

  • Interesses: os seus interesses, neste exemplo, incluem o jogo de Futebol.

  • Dispositivos: os dispositivos que as pessoas utilizam.

  • Sistemas Operativos: os sistemas operativos em que os dispositivos são executados.

  • Local: o local onde os dispositivos são acedidos.

Representamos as relações entre estas entidades através dos seguintes tipos de limite :

  • Sabe: Representar familiaridade. Por exemplo, "Thomas conhece Robin".

  • Interessado: represente os interesses das pessoas no nosso gráfico. Por exemplo, "O Ben está interessado no Futebol".

  • RunsOS: representa o SO que um dispositivo executa. Por exemplo, "O portátil executa o SO Windows".

  • Utiliza: representar o dispositivo que uma pessoa utiliza. Por exemplo, "Robin utiliza um telemóvel Motorola com o número de série 77".

  • Localizado: represente a localização a partir da qual os dispositivos são acedidos.

A Consola do Gremlin é um terminal interativo oferecido pelo Apache TinkerPop e este terminal é utilizado para interagir com os dados do gráfico. Para obter mais informações, veja o início rápido da consola do Gremlin. Também pode efetuar estas operações com os controladores do Gremlin na plataforma que preferir (Java, Node.js, Python ou .NET). Os exemplos seguintes mostram como executar consultas com estes dados de gráfico com a Consola do Gremlin.

Primeiro, vamos ver como criar, ler, atualizar e eliminar (CRUD). A seguinte instrução gremlin insere o vérticeThomas no gráfico com algumas propriedades:

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

Dica

Se estiver a seguir estes exemplos, pode utilizar qualquer uma destas propriedades (age, firstName, lastName) como chave de partição quando criar o gráfico. A id propriedade não é suportada como uma chave de partição num gráfico.

Em seguida, a seguinte declaração do Gremlin insere uma vantagem conhecida entre Thomas e Robin.

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

A consulta seguinte devolve os vértices da pessoa por ordem descendente dos nomes próprios:

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?). Pode executar este percurso do Gremlin para obter essas informações a partir do gráfico:

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

Passos seguintes