Está disponível a versão do SGBD EdgeDB 5.0, que implementa um modelo de dados relacional e gráfico e uma linguagem de consulta EdgeQL, otimizados para lidar com dados hierárquicos complexos. O projeto se desenvolve como uma extensão do PostgreSQL, cujo código é escrito em Python e Rust (analisador e partes críticas para desempenho), e é distribuído sob a licença Apache 2.0. Bibliotecas cliente estão preparadas para as linguagens Python, Go, Rust, .NET, Elixir e TypeScript/Javascript. Ferramentas de linha de comando estão disponíveis para gerenciar o SGBD e executar consultas interativamente (REPL).
Em vez de um modelo de dados baseado em tabelas, o EdgeDB utiliza um sistema declarativo baseado em tipos de objetos. Em vez de chaves externas (foreign key) para definir relacionamentos entre tipos, são utilizadas referências de ligação (um objeto pode ser usado como propriedade de outro objeto).
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
Recursos como tipagem forte de propriedades, restrições de valores de propriedades, propriedades calculadas e procedimentos armazenados são suportados. Entre as características do esquema de armazenamento de objetos do EdgeDB, que se assemelha a ORM, destaca-se a possibilidade de mesclar esquemas, vincular propriedades de diferentes objetos e suporte integrado a JSON. Para acelerar o processamento de consultas, índices podem ser aplicados.
Ferramentas integradas para migração de esquema são fornecidas — após a alteração do esquema definido em um arquivo esdl separado, basta executar o comando “edgedb migration create” e o SGBD analisará as diferenças no esquema e gerará um script interativamente para a transição para o novo esquema. O histórico de alterações de esquema é rastreado automaticamente.
Para formar consultas, a linguagem de consulta GraphQL e a própria linguagem EdgeDB são suportadas, representando uma adaptação do SQL para dados hierárquicos. Em vez de listas, os resultados da consulta são apresentados de forma estruturada, e em vez de subconsultas e operações JOIN, é possível especificar uma consulta EdgeQL como uma expressão dentro de outra consulta. Transações e loops são suportados.
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’ } ) }
Na nova versão:
- Adicionada a suportar ramificação («branching»), permitindo o uso do conceito de ramificações ao trabalhar com dados e esquemas, aplicável em sistemas de controle de versão. Em vez do termo «banco de dados», na nova versão foi proposto o conceito de «ramo» (branch), e os comandos «create database» e «drop database» foram considerados obsoletos, recomendando-se o uso dos novos comandos «create empty branch» e «drop branch». Além de ramos vazios, é possível criar ramificações a partir de ramos e bancos de dados existentes usando os comandos «create schema branch» e «create data branch», copiando seu esquema de armazenamento e dados.
Do ponto de vista prático, o suporte a ramos permite sincronizar dados com o código usado para processá-los, mantendo a compatibilidade com códigos antigos. Por exemplo, após uma atualização de código, é possível vincular a ele um novo ramo de dados que considere as alterações no esquema de armazenamento. Essa funcionalidade é útil para simplificar o desenvolvimento e o teste de novas versões de software, após as quais basta alternar para um ramo já testado.
- No módulo pgvector, utilizado para o armazenamento e consulta eficaz de vetores, foi adicionado um novo tipo de índices HNSW (Hierarchical Navigable Small Worlds), que, assim como o índice IVFFlat, está disponível em três variantes: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip e ext::pgvector::hnsw_cosine. Além disso, no pgvector, foram ampliadas as opções para ajuste fino dos índices através do objeto ext::pgvector::Config.
- Adicionadas novas opções de autenticação. No módulo auth, foi implementado o suporte a esquemas de autenticação sem senha WebAuthn (Passkeys) e «magic links» (baseados em email). Também foi adicionado suporte ao uso das plataformas Slack e Discord como provedores OAuth.
- Otimizações de desempenho foram feitas. Na implementação do cache com resultados da compilação de consultas, garantiu-se a preservação do estado entre reinicializações e foi adicionada a recompilação automática após migrações. A velocidade de operação com grandes esquemas de armazenamento foi aumentada.
- Na linguagem de consultas EdgeQL, na expressão "for", não é necessário especificar a palavra-chave "union" nas consultas básicas que utilizam expressões insert, update ou delete.
- Adicionada a comando vacuum() para limpar, otimizar e empacotar o conteúdo do banco de dados.
- É permitido converter dados entre o tipo bytes e os tipos int16, int32, int64 e uuid, utilizando as funções to_bytes(), to_uuid() e to_int*().
- Adicionada a possibilidade de fechar todas as conexões ao banco de dados após a execução da operação "drop database".
Fonte: opennet.ru
