Está disponible la primera versión estable de la base de datos EdgeDB, que es una capa sobre PostgreSQL con una implementación del modelo de datos relacional y gráfico y el lenguaje de consulta EdgeQL, optimizados para trabajar con datos jerárquicos complejos. El código está escrito en los lenguajes Python y Rust y se distribuye bajo la licencia Apache 2.0. Las bibliotecas de cliente están preparadas para los lenguajes Python, Go, Rust y TypeScript/Javascript. Se proporciona un conjunto de herramientas de línea de comandos para gestionar la base de datos y ejecutar consultas de forma interactiva (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 (foreign key) para definir relaciones entre tipos, se aplican enlaces (un objeto puede ser una propiedad de otro objeto). type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Para acelerar el procesamiento de consultas, se pueden utilizar índices. También se admiten características como la tipificación estricta de propiedades, restricciones en los valores de las propiedades, propiedades calculadas y procedimientos almacenados. Entre las características de la esquema de almacenamiento de EdgeDB, que recuerda a un ORM, se destaca la posibilidad de mezclar esquemas, vincular propiedades de diferentes objetos y la integración del soporte para JSON.
Se proporcionan herramientas integradas para la migración del esquema de almacenamiento: después de cambiar el esquema definido en un archivo esdl separado, solo se necesita ejecutar el comando «edgedb migration create» y la base de datos analizará las diferencias en el esquema y generará interactivamente un script para la transición al nuevo esquema. Además, se rastrea automáticamente el historial de cambios en el esquema.
Para la formulación de consultas, se soportan tanto el lenguaje de consulta GraphQL como el propio lenguaje de EdgeDB, que es una adaptación de SQL para datos jerárquicos. En lugar de listas, los resultados de las consultas se presentan de manera estructurada, y en lugar de subconsultas y operaciones JOIN, se ofrece la posibilidad de indicar una consulta EdgeQL como expresión dentro de otra consulta. Se admiten transacciones y bucles. select Movie { title, actors: { name } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", actors := ( select Person filter .name in { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );
Fuente: opennet.ru
