É apresentado o lançamento do SGBD EdgeDB 2.0, que implementa o modelo de dados gráficos relacionais e a linguagem de consulta EdgeQL, otimizada para trabalhar com dados hierárquicos complexos. O código é escrito em Python e Rust (parser e partes críticas de desempenho) e é distribuído sob a licença Apache 2.0. O projeto está sendo desenvolvido como um complemento do PostgreSQL. Bibliotecas clientes são preparadas para Python, Go, Rust e TypeScript/Javascript. Fornece ferramentas de linha de comando para gerenciamento de DBMS e execução de consulta interativa (REPL).
Em vez de um modelo de dados baseado em tabela, o EdgeDB usa um sistema declarativo baseado em tipos de objetos. Em vez de chaves estrangeiras, a ligação por referência é usada para definir o relacionamento entre os tipos (um objeto pode ser usado como propriedade de outro objeto).
type Person {nome da propriedade necessária -> str; } type Movie { título de propriedade obrigatório -> str; atores multilink -> Pessoa; }
Os índices podem ser usados para acelerar o processamento de consultas. Recursos como digitação forte de propriedades, restrições de valores de propriedades, propriedades computadas e procedimentos armazenados também são suportados. Os recursos do esquema de armazenamento de objetos EdgeDB, que lembra um pouco um ORM, incluem a capacidade de misturar esquemas, vincular propriedades de diferentes objetos e suporte JSON integrado.
Ferramentas integradas são fornecidas para armazenar a migração de esquema - após alterar o esquema especificado em um arquivo esdl separado, basta executar o comando “edgedb migração create” e o SGBD analisará as diferenças no esquema e gerará interativamente um script para migração para o novo esquema. O histórico de alterações de esquema é rastreado automaticamente.
Para gerar consultas, são suportadas tanto a linguagem de consulta GraphQL quanto a linguagem proprietária EdgeDB, que é uma adaptação do SQL para dados hierárquicos. Em vez de listas, os resultados da consulta são formatados de forma estruturada e, em vez de subconsultas e JOINs, você pode especificar uma consulta EdgeQL como uma expressão dentro de outra consulta. Transações e ciclos são suportados.
select Movie {title, atores: {nome } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", atores := ( select Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } para número na união {0, 1, 2, 3} ( selecione { número, número + 0.5 } );
Na nova versão:
- Uma interface web integrada foi adicionada para administração de banco de dados, permitindo visualizar e editar dados, executar consultas EdgeQL e analisar o esquema de armazenamento usado. A interface é iniciada pelo comando “edgedb ui”, após o qual fica disponível ao acessar o localhost.
- A expressão “GROUP” foi implementada, permitindo particionar e agregar dados e agrupar dados usando expressões EdgeQL arbitrárias, semelhante ao agrupamento em uma operação SELECT.
- Capacidade de controlar o acesso no nível do objeto. As regras de acesso são definidas no nível do esquema de armazenamento e permitem limitar a capacidade de usar um determinado conjunto de objetos em operações de busca, inserção, exclusão e atualização. Por exemplo, você pode adicionar uma regra que permita que apenas o autor atualize uma publicação.
- Adicionada a capacidade de usar variáveis globais no esquema de armazenamento. Uma nova variável global current_user foi proposta para vincular ao usuário.
- Adicionado suporte para tipos que definem intervalos de valores.
- Uma biblioteca cliente oficial para a linguagem Rust foi preparada.
- O protocolo binário EdgeDB foi estabilizado, possibilitando processar diversas sessões diferentes simultaneamente dentro de uma mesma conexão de rede, encaminhando via HTTP, utilizando variáveis globais e estados locais.
- Adicionado suporte para ativação de soquete, que permite não manter o manipulador do servidor na memória e executá-lo apenas ao tentar estabelecer uma conexão (útil para economizar recursos em sistemas de desenvolvedores).
Fonte: opennet.ru