Lanzamento do gráfico relacional DBMS EdgeDB 2.0

Preséntase a versión do DBMS EdgeDB 2.0, que implementa o modelo de datos de gráficos relacionais e a linguaxe de consulta EdgeQL, optimizado para traballar con datos xerárquicos complexos. O código está escrito en Python e Rust (analizador e partes críticas para o rendemento) e distribúese baixo a licenza Apache 2.0. O proxecto estase a desenvolver como un complemento para PostgreSQL. As bibliotecas cliente están preparadas para Python, Go, Rust e TypeScript/Javascript. Ofrece ferramentas de liña de comandos para a xestión de DBMS e a execución de consultas interactivas (REPL).

En lugar dun modelo de datos baseado en táboas, EdgeDB usa un sistema declarativo baseado en tipos de obxecto. En lugar de chaves foráneas, utilízase a ligazón por referencia para definir a relación entre os tipos (un obxecto pódese usar como propiedade doutro).

tipo Persoa { nome da propiedade requirida -> str; } type Movie { título da propiedade necesaria -> str; actores múltiples enlaces -> Persoa; }

Os índices pódense utilizar para acelerar o procesamento de consultas. Tamén se admiten funcións como a escritura de propiedades fortes, as restricións de valor da propiedade, as propiedades calculadas e os procedementos almacenados. As características do esquema de almacenamento de obxectos EdgeDB, que lembra un pouco a un ORM, inclúen a capacidade de mesturar esquemas, vincular propiedades de diferentes obxectos e compatibilidade con JSON integrado.

Proporciónanse ferramentas integradas para almacenar a migración do esquema: despois de cambiar o esquema especificado nun ficheiro esdl separado, só tes que executar o comando "edgedb migration create" e o DBMS analizará as diferenzas no esquema e xerará de forma interactiva un script para migrar ao novo esquema. O historial de cambios no esquema realízase automaticamente.

Para xerar consultas, admítense tanto a linguaxe de consulta GraphQL como a linguaxe propietaria EdgeDB, que é unha adaptación de SQL para datos xerárquicos. En lugar de listas, os resultados das consultas teñen formato de forma estruturada e, en lugar de subconsultas e JOIN, pode especificar unha consulta EdgeQL como expresión dentro doutra consulta. Admítense transaccións e ciclos.

select Movie { title, actors: { name } } filter .title = "The Matrix" inserir Movie { title := "The Matrix Resurrections", actores := (seleccione Person filter .name en { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } para o número na unión {0, 1, 2, 3} (seleccione { número, número + 0.5 });

Na nova versión:

  • Engadiuse unha interface web integrada para a administración de bases de datos, que lle permite ver e editar datos, executar consultas EdgeQL e analizar o esquema de almacenamento utilizado. A interface lánzase co comando "edgedb ui", despois de que está dispoñible ao acceder a localhost.
    Lanzamento do gráfico relacional DBMS EdgeDB 2.0
  • Implementouse a expresión "GROUP", que lle permite particionar e agregar datos e agrupar datos mediante expresións EdgeQL arbitrarias, de forma similar á agrupación nunha operación SELECT.
  • Capacidade de controlar o acceso a nivel de obxecto. As regras de acceso defínense a nivel de esquema de almacenamento e permítenche limitar a capacidade de usar un determinado conxunto de obxectos nas operacións de busca, inserción, eliminación e actualización. Por exemplo, pode engadir unha regra que permita só ao autor actualizar unha publicación.
  • Engadida a posibilidade de usar variables globais no esquema de almacenamento. Para vincularse ao usuario, propúxose unha nova variable global current_user.
  • Engadido soporte para tipos que definen intervalos de valores.
  • Preparouse unha biblioteca cliente oficial para a lingua Rust.
  • Estabilizouse o protocolo binario EdgeDB, o que permite procesar varias sesións diferentes simultaneamente dentro da mesma conexión de rede, reenviando vía HTTP, utilizando variables globais e estados locais.
  • Engadiuse soporte para a activación do socket, que permite non manter o controlador do servidor na memoria e executalo só cando se tenta establecer unha conexión (útil para aforrar recursos nos sistemas de desenvolvedores).

Fonte: opennet.ru

Engadir un comentario