Foi lançado o versionamento público do banco de dados Nebula Graph 3.2, projetado para o armazenamento eficiente de grandes conjuntos de dados interconectados, formando um grafo que pode conter bilhões de nós e trilhões de conexões. O projeto é escrito em C++ e é distribuído sob a licença Apache 2.0. As bibliotecas do cliente para interação com o banco de dados foram preparadas para as linguagens Go, Python e Java.
O banco de dados utiliza uma arquitetura distribuída sem compartilhamento de recursos (shared-nothing), que envolve a execução de processos independentes e autossuficientes de processamento de solicitações graphd e processos de armazenamento storaged. A orquestração da movimentação de dados e a fornecimento de metainformação sobre o grafo é realizada pelo serviço de metadados. Para garantir a consistência dos dados, utiliza-se um protocolo baseado no algoritmo RAFT.
Principais características do Nebula Graph:
- A segurança é garantida através da concessão de acesso apenas a usuários autenticados, cujos privilégios são definidos por meio de um sistema de controle de acesso baseado em funções (RBAC).
- A possibilidade de conectar diferentes tipos de mecanismos de armazenamento. Suporte à extensão da linguagem de consulta com novos algoritmos.
- Garantir latências mínimas para leitura ou gravação de dados e manter alta capacidade de transferência. Durante os testes em um cluster de um nó graphd e três nós storaged, em um banco de dados de 632 GB, incluindo um grafo de 1,2 bilhão de vértices e 8,4 bilhões de arestas, as latências estavam na ordem de alguns milissegundos, com capacidade de até 140 mil solicitações por segundo.
- Escalabilidade linear.
- Uma linguagem de consulta semelhante ao SQL, suficientemente poderosa e fácil de entender. Suporta operações como GO (traversal bidirecional de nós do grafo), GROUP BY, ORDER BY, LIMIT, UNION, UNION DISTINCT, INTERSECT, MINUS, PIPE (uso do resultado da consulta anterior). Suporta índices e variáveis definidas pelo usuário.
- Garantir alta disponibilidade e resiliência a falhas.
- Suporte à criação de snapshots com um corte do estado do banco de dados para simplificar a criação de backups.
- Pronto para uso industrial (já utilizado na infraestrutura das empresas JD, Meituan e Xiaohongshu).
- A possibilidade de alterar o esquema de armazenamento e atualização de dados sem parar ou impactar as operações em andamento.
- Suporte a TTL para limitar o tempo de vida dos dados.
- Comandos para gerenciar configurações e hosts de armazenamento.
- Ferramentas para gerenciar jobs e agendar a execução de tarefas (atualmente, os jobs suportados são COMPACT e FLUSH).
- Operações de busca do caminho completo e do caminho mais curto entre vértices específicos.
- Interface OLAP para integração com plataformas de análise de terceiros.
- Utilitários para importar dados de arquivos CSV ou do Spark.
- Exportação de métricas para monitoramento usando Prometheus e Grafana.
- Interface web Nebula Graph Studio para visualização de operações com o grafo, navegação pelo grafo, design de esquema de armazenamento e carregamento de dados.
No novo lançamento:
- Adicionada suporte para a função extract() para extrair uma substring correspondente à expressão especificada.
- Ajustes otimizados no arquivo de configuração.
- Adicionadas regras de otimização para eliminar o operador desnecessário AppendVertices e desabilitar a aplicação de filtros de arestas e vértices.
- Reduzido o volume de dados copiados para a operação JOIN, bem como para os operadores Traverse e AppendVertices.
- Otimizada a performance do SHORTEST PATH e SUBGRAPH.
- Melhorada a distribuição de memória (utilizado o Arena Allocator).
Fonte: opennet.ru
