Se ha publicado la versión 3.2 de la base de datos gráfica abierta Nebula Graph, diseñada para el almacenamiento eficiente de grandes conjuntos de datos interconectados que forman un gráfico que puede contar con miles de millones de nodos y billones de conexiones. El proyecto está escrito en C++ y se distribuye bajo la licencia Apache 2.0. Se han preparado bibliotecas de cliente para acceder a la base de datos en los lenguajes Go, Python y Java.
La base de datos utiliza una arquitectura distribuida sin compartición de recursos (shared-nothing), lo que implica la ejecución de procesos de manejo de consultas graphd y procesos de almacenamiento storaged que son independientes y autosuficientes. La orquestación del movimiento de datos y la provisión de metainformación sobre el gráfico son gestionadas por un servicio meta. Para asegurar la consistencia de los datos, se utiliza un protocolo basado en el algoritmo RAFT.
Las principales características de Nebula Graph:
- Garantía de seguridad al proporcionar acceso únicamente a usuarios autenticados, cuyas autorizaciones son definidas a través de un sistema de gestión de acceso basado en roles (RBAC).
- Posibilidad de conectar diferentes tipos de motores de almacenamiento. Soporte para la extensión del lenguaje de consulta con nuevos algoritmos.
- Garantizar mínimas latencias en la lectura o escritura de datos y mantener un alto rendimiento. En las pruebas realizadas en un clúster de un nodo graphd y tres nodos storaged, con una base de datos de 632 GB que incluía un gráfico de 1.2 mil millones de vértices y 8.4 mil millones de aristas, las latencias estaban en el rango de unos pocos milisegundos, y el rendimiento alcanzó hasta 140,000 consultas por segundo.
- Escalabilidad lineal.
- Un lenguaje de consultas similar a SQL, suficientemente potente y fácil de entender. Se admiten operaciones como GO (recorrido bidireccional de nodos del gráfico), GROUP BY, ORDER BY, LIMIT, UNION, UNION DISTINCT, INTERSECT, MINUS, PIPE (uso del resultado de la consulta anterior). Se admiten índices y variables definidas por el usuario.
- Garantizar alta disponibilidad y resistencia a fallos.
- Soporte para la creación de instantáneas del estado de la base de datos para facilitar la creación de copias de seguridad.
- Listo para aplicaciones industriales (ya utilizado en la infraestructura de empresas como JD, Meituan y Xiaohongshu).
- La posibilidad de cambiar el esquema de almacenamiento y actualización de datos sin detener ni afectar las operaciones en curso.
- Soporte para TTL para limitar la vida útil de los datos.
- Comandos para gestionar configuraciones y hosts de almacenamiento.
- Herramientas para gestionar trabajos y programar la ejecución de tareas (se admiten actualmente COMPACT y FLUSH).
- Operaciones de búsqueda de la ruta completa y la más corta entre nodos especificados.
- Interfaz OLAP para integración con plataformas de análisis de terceros.
- Utilidades para importar datos de archivos CSV o de Spark.
- Exportación de métricas para monitorización utilizando Prometheus y Grafana.
- Interfaz web Nebula Graph Studio para visualizar operaciones en el gráfico, navegar por el gráfico, diseñar esquemas de almacenamiento y cargar datos.
En esta nueva versión:
- Se ha añadido soporte para la función extract() para extraer una subcadena que coincida con una expresión dada.
- Se han optimizado las configuraciones en el archivo de configuración.
- Se han añadido reglas de optimización para eliminar el operador inútil AppendVertices y desactivar la aplicación de filtros en aristas y vértices.
- Se ha reducido el volumen de datos copiados para la operación JOIN, así como para los operadores Traverse y AppendVertices.
- Se ha optimizado el rendimiento de SHORTEST PATH y SUBGRAPH.
- Mejora en la asignación de memoria (se ha implementado Arena Allocator).
Fuente: opennet.ru
