Lançamento do gráfico relacional DBMS EdgeDB 2.0

É 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.
    Lançamento do gráfico relacional DBMS EdgeDB 2.0
  • 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

Adicionar um comentário