Lanzamiento del gráfico relacional DBMS EdgeDB 2.0

Se presenta el lanzamiento del DBMS EdgeDB 2.0, que implementa el modelo de datos de gráficos relacionales y el lenguaje de consulta EdgeQL, optimizado para trabajar con datos jerárquicos complejos. El código está escrito en Python y Rust (analizador y partes críticas para el rendimiento) y se distribuye bajo la licencia Apache 2.0. El proyecto se está desarrollando como un complemento para PostgreSQL. Las bibliotecas cliente están preparadas para Python, Go, Rust y TypeScript/Javascript. Proporciona herramientas de línea de comandos para la gestión de DBMS y la ejecución de consultas interactivas (REPL).

En lugar de un modelo de datos basado en tablas, EdgeDB utiliza un sistema declarativo basado en tipos de objetos. En lugar de claves externas, se utiliza el enlace por referencia para definir la relación entre tipos (un objeto se puede utilizar como propiedad de otro objeto).

escriba Persona {nombre de propiedad requerido -> str; } tipo Película { título de propiedad requerido -> str; actores de múltiples enlaces -> Persona; }

Los índices se pueden utilizar para acelerar el procesamiento de consultas. También se admiten funciones como tipos de propiedad estrictos, restricciones de valor de propiedad, propiedades calculadas y procedimientos almacenados. Las características del esquema de almacenamiento de objetos EdgeDB, que recuerda un poco a un ORM, incluyen la capacidad de mezclar esquemas, vincular propiedades de diferentes objetos y soporte JSON integrado.

Se proporcionan herramientas integradas para almacenar la migración del esquema: después de cambiar el esquema especificado en un archivo esdl separado, simplemente ejecute el comando "edgedb migración crear" y el DBMS analizará las diferencias en el esquema y generará interactivamente un script para migrar al esquema. nuevo esquema. Se realiza un seguimiento automático del historial de cambios de esquema.

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

seleccione Película { título, actores: { nombre } } filtro .título = "The Matrix" inserte Película { título := "The Matrix Resurrections", actores := (seleccione Persona filtro .nombre en { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } para el número en la unión {0, 1, 2, 3} (seleccione {número, número + 0.5});

Versículos nuevos:

  • Se ha agregado una interfaz web incorporada para la administración de la base de datos, que le permite ver y editar datos, ejecutar consultas EdgeQL y analizar el esquema de almacenamiento utilizado. La interfaz se inicia mediante el comando "edgedb ui", después del cual queda disponible al acceder al localhost.
    Lanzamiento del gráfico relacional DBMS EdgeDB 2.0
  • Se ha implementado la expresión “GROUP”, lo que le permite particionar y agregar datos y agruparlos utilizando expresiones EdgeQL arbitrarias, similar a agrupar en una operación SELECT.
  • Capacidad de controlar el acceso a nivel de objeto. Las reglas de acceso se definen en el nivel del esquema de almacenamiento y le permiten limitar la capacidad de utilizar un determinado conjunto de objetos en operaciones de recuperación, inserción, eliminación y actualización. Por ejemplo, puede agregar una regla que permita que solo el autor actualice una publicación.
  • Se agregó la capacidad de usar variables globales en el esquema de almacenamiento. Se ha propuesto una nueva variable global current_user para vincularse al usuario.
  • Se agregó soporte para tipos que definen rangos de valores.
  • Se ha preparado una biblioteca cliente oficial para el lenguaje Rust.
  • El protocolo binario EdgeDB se ha estabilizado, permitiendo procesar varias sesiones diferentes simultáneamente dentro de la misma conexión de red, reenviando a través de HTTP, utilizando variables globales y estados locales.
  • Se agregó soporte para la activación de sockets, lo que le permite no mantener el controlador del servidor en la memoria y ejecutarlo solo cuando intenta establecer una conexión (útil para ahorrar recursos en los sistemas de desarrollador).

Fuente: opennet.ru

Añadir un comentario