Lançamento do SGBD relacional e gráfico EdgeDB 4.0

Foi lançado o EdgeDB 4.0, um SGBD que implementa um modelo de dados relacional e gráfico, além da linguagem de consulta EdgeQL, otimizados para lidar com dados hierárquicos complexos. O código é escrito nas linguagens Python e Rust (para o analisador e partes críticas de desempenho) e é distribuído sob a licença Apache 2.0. O projeto está em desenvolvimento como uma camada sobre o PostgreSQL. Bibliotecas cliente estão disponíveis para Python, Go, Rust, .NET, Elixir e TypeScript/Javascript. Uma ferramenta de linha de comando é fornecida para gerenciar o SGBD e executar consultas de forma interativa (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; }

Para acelerar o processamento de consultas, podem ser utilizados índices. Também são suportadas funcionalidades como tipagem estrita de propriedades, restrições de valores de propriedades, propriedades calculadas e procedimentos armazenados. Entre as características do esquema de armazenamento orientado a objetos do EdgeDB, que se assemelha ao ORM, destaca-se a capacidade de misturar esquemas, vincular propriedades de diferentes objetos e suporte integrado a JSON.

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.

O suporte para a formação de consultas inclui tanto a linguagem de consulta GraphQL quanto a linguagem própria do EdgeDB, que é uma adaptação do SQL para dados hierárquicos. Em vez de listas, os resultados das consultas são apresentadas de forma estruturada, e, ao invés 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:

  • Foi adicionada a suporte para busca de texto completo, implementada através de um módulo plug-in fts. Para transformar qualquer objeto em um documento pesquisável, deve-se utilizar o índice fts::index, e para buscar uma frase específica entre os documentos indexados, foi proposta a função fts::search(). Os resultados são retornados na forma de tuplas, contendo o objeto encontrado e seu peso de busca. Por exemplo: type Item { required available: bool { default := false; }; required name: str; required description: str; index fts::index on ( fts::with_options( .name, language := fts::Language.eng ) ); } with res := ( select fts::search(Item, ‘candy corn’, language := ‘eng’) ) select res.object {name, score := res.score} order by res.score desc;
  • Adicionado um novo tipo de dado "multirange", que define um ou vários intervalos de valores para representar intervalos intermitentes. A normalização de áreas sobrepostas nos intervalos definidos é realizada automaticamente. O tipo "multirange" pode ser utilizado com todas as funções e operadores disponíveis anteriormente para manipulação de intervalos. select multirange([range(8, 10)]) + range(1, 5) — range(3, 4);
  • Foi adicionada e ativada por padrão a suporte à autenticação para restringir o acesso ao GraphQL e EdgeQL sobre HTTP.
  • Para iniciar o serviço de autenticação, que funciona separadamente da instância do BD, foi adicionado o módulo "auth", que suporta OAuth ou login por e-mail e senha.
  • Adicionado o módulo pgcrypto, que fornece funções hmac, gen_salt e crypt para hash e criptografia. select ext::pgcrypto::digest(‘encrypt this’, ‘sha1’);
  • Adicionado o módulo pg_trgm com funções para determinar a similaridade de strings.
  • Foram feitas otimizações que aumentaram o desempenho. O consumo de memória foi servidor reduzido em 40%. O código do parser de consultas EdgeQL foi reescrito em Rust.
  • Foi adicionada ao EdgeQL o suporte a uma sintaxe de expressões condicionais mais familiar (if … then .. else …). Foi possibilitado o uso de DML condicionais para criar, atualizar e excluir diferentes objetos com base em condições definidas. Foram adicionadas as funções to_bytes(), to_str(), enc::base64_encode e enc::base64_decode. No gatilho, a expressão "when" é permitida. select if count(Object) > 0 then ‘got data’ else ‘no data’; select (select User filter .name = ‘Alice’) ?? (insert User { name := ‘Alice’ }); select enc::base64_encode(b’hello’);
  • Foi adicionado um novo método para passar valores globais em consultas GraphQL — em vez de usar um campo separado, agora é possível passar variáveis com base no objeto __globals__.

    Fonte: opennet.ru
Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster