EdgeDB, un DBMS de datos relacional de gráficos

Hace poco se dio a conocer el lanzamiento del DBMS «EdgeDB 2.0», que implementa el modelo de datos relacional de gráficos relacionales y el lenguaje de consultas EdgeQL, optimizado para trabajar con datos jerárquicos complejos.

EdgeDB es una base de datos de código abierto diseñada como sucesora espiritual de SQL y el paradigma relacional. Su objetivo es resolver algunos problemas de diseño difíciles que hacen que las bases de datos existentes sean innecesariamente onerosas de usar.

Desarrollado por el motor de consulta de Postgres bajo el capó, EdgeDB piensa en el esquema de la misma manera que usted: como objetos con propiedades conectadas por enlaces. Es como una base de datos relacional con un modelo de datos orientado a objetos o una base de datos gráfica con un esquema estricto. Lo llamamos una base de datos relacional de grafos.

Sobre EdgeDB

El proyecto se está desarrollando como un complemento para PostgreSQL. Las bibliotecas cliente están preparadas para los lenguajes Python, Go, Rust y TypeScript/Javascript.

En lugar de un modelo de datos basado en tablas, EdgeDB utiliza un sistema declarativo basado en tipos de objetos. En lugar de claves foráneas (foreign key) para determinar la relación entre los tipos se utiliza el enlace de referencia (un objeto se puede utilizar como propiedad de otro objeto).

Los índices se pueden utilizar para acelerar el procesamiento de consultas. También se admiten funciones como la tipificación de propiedades sólidas, las restricciones de valores de propiedades, las propiedades calculadas y los procedimientos almacenados. De las características del esquema de almacenamiento de objetos EdgeDB, que recuerda un poco a ORM, se destaca la capacidad de mezclar esquemas, vincular propiedades de diferentes objetos y compatibilidad con JSON integrado.

Se proporcionan herramientas integradas para migrar el esquema de almacenamiento: después de cambiar el esquema especificado en un archivo esdl separado, basta con ejecutar el comando «edgedb migración create» y el DBMS analizará las diferencias en el esquema y generará un script de forma interactiva. para migrar al nuevo esquema. El historial de modificación del esquema se rastrea automáticamente.

Para realizar consultas, se admite tanto el lenguaje de consulta GraphQL como su propio lenguaje EdgeDB, que es una adaptación de SQL para datos jerárquicos. En lugar de listas, los resultados de las consultas tienen un formato estructurado y, en lugar de subconsultas y operaciones JOIN, es posible especificar una consulta EdgeQL como una expresión dentro de otra consulta. Se admiten transacciones y ciclos.

Principales novedades de EdgeDB 2.0

En la nueva versión que se presentó, se ha agregado una interfaz web integrada para la administración de la base de datos, que permite ver y editar datos, ejecutar consultas de EdgeQL y analizar el esquema de almacenamiento utilizado. La interfaz se inicia con el comando «edgedb ui», después de lo cual está disponible al acceder a localhost.

La expresión «GROUP» se implementó para permitir la partición y agregación de datos y la agrupación de datos mediante expresiones EdgeQL arbitrarias, de forma similar a la agrupación en una operación SELECT.

Capacidad para controlar el acceso a nivel de objeto, las reglas de acceso se definen en el nivel del esquema de almacenamiento y permiten restringir el uso de un conjunto específico de objetos en las operaciones de selección, inserción, eliminación y actualización. Por ejemplo, puede agregar una regla que permita que solo el autor actualice una publicación.

Tambien se destaca que se agregó la capacidad de usar variables globales en el esquema de almacenamiento. Para enlazar con el usuario, se ha propuesto una nueva variable global.

De los demás cambios que se destacan:

  • Se ha preparado la biblioteca de cliente oficial para el lenguaje Rust.
  • Se ha estabilizado el protocolo binario EdgeDB, en el que se ha vuelto posible procesar varias sesiones diferentes simultáneamente dentro de la misma conexión de red, reenviando a través de HTTP, usando variables globales y estados locales.
  • Se agregó soporte para tipos que definen rangos de valores (rango).
  • Se agregó soporte para la activación por socket, lo que permite no mantener el controlador del servidor en la memoria e iniciarlo solo cuando intenta establecer una conexión (útil para ahorrar recursos en los sistemas de desarrollo).

Finalmente para quienes estén interesados en conocer más al respecto, deben saber que el código está escrito en Python y Rust y se distribuye bajo la licencia Apache 2.0.

Puedes consultar más al respecto, en el siguiente enlace.


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.