Rilascio del grafo relazionale DBMS EdgeDB 2.0

Viene presentato il rilascio del DBMS EdgeDB 2.0, che implementa il modello dati grafico relazionale e il linguaggio di query EdgeQL, ottimizzato per lavorare con dati gerarchici complessi. Il codice è scritto in Python e Rust (parser e parti critiche per le prestazioni) ed è distribuito con la licenza Apache 2.0. Il progetto è stato sviluppato come componente aggiuntivo per PostgreSQL. Le librerie client sono preparate per Python, Go, Rust e TypeScript/Javascript. Fornisce strumenti da riga di comando per la gestione DBMS e l'esecuzione di query interattive (REPL).

Invece di un modello dati basato su tabelle, EdgeDB utilizza un sistema dichiarativo basato sui tipi di oggetto. Invece delle chiavi esterne, viene utilizzato il collegamento per riferimento per definire la relazione tra i tipi (un oggetto può essere utilizzato come proprietà di un altro oggetto).

type Persona { nome della proprietà richiesta -> str; } tipo Film { titolo della proprietà richiesta -> str; attori multi-link -> Persona; }

Gli indici possono essere utilizzati per velocizzare l'elaborazione delle query. Sono supportate anche funzionalità come la tipizzazione avanzata delle proprietà, le restrizioni sui valori delle proprietà, le proprietà calcolate e le procedure memorizzate. Le caratteristiche dello schema di archiviazione degli oggetti EdgeDB, che ricorda in qualche modo un ORM, includono la possibilità di combinare schemi, collegare proprietà di oggetti diversi e supporto JSON integrato.

Vengono forniti strumenti integrati per archiviare la migrazione dello schema: dopo aver modificato lo schema specificato in un file esdl separato, è sufficiente eseguire il comando "edgedb migrazione create" e il DBMS analizzerà le differenze nello schema e genererà in modo interattivo uno script per la migrazione allo schema nuovo schema. La cronologia delle modifiche allo schema viene tracciata automaticamente.

Per generare query, sono supportati sia il linguaggio di query GraphQL che il linguaggio proprietario EdgeDB, che è un adattamento di SQL per i dati gerarchici. Invece di elenchi, i risultati delle query vengono formattati in modo strutturato e invece di sottoquery e JOIN, puoi specificare una query EdgeQL come espressione all'interno di un'altra query. Sono supportate transazioni e cicli.

select Film { titolo, attori: { nome } } filter .title = "The Matrix" insert Film { titolo := "The Matrix Resurrections", attori := ( select Persona filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } per il numero nell'unione {0, 1, 2, 3} ( seleziona { numero, numero + 0.5 } );

Nella nuova versione:

  • È stata aggiunta un'interfaccia Web integrata per l'amministrazione del database, che consente di visualizzare e modificare i dati, eseguire query EdgeQL e analizzare lo schema di archiviazione utilizzato. L'interfaccia viene avviata dal comando "edgedb ui", dopodiché diventa disponibile quando si accede a localhost.
    Rilascio del grafo relazionale DBMS EdgeDB 2.0
  • È stata implementata l'espressione "GROUP", che consente di partizionare e aggregare dati e raggruppare dati utilizzando espressioni EdgeQL arbitrarie, simili al raggruppamento in un'operazione SELECT.
  • Possibilità di controllare l'accesso a livello di oggetto. Le regole di accesso vengono definite a livello di schema di archiviazione e consentono di limitare la possibilità di utilizzare un determinato set di oggetti nelle operazioni di recupero, inserimento, eliminazione e aggiornamento. Ad esempio, puoi aggiungere una regola che consente solo all'autore di aggiornare una pubblicazione.
  • Aggiunta la possibilità di utilizzare variabili globali nello schema di archiviazione. È stata proposta una nuova variabile globale current_user da associare all'utente.
  • Aggiunto il supporto per i tipi che definiscono intervalli di valori.
  • È stata preparata una libreria client ufficiale per il linguaggio Rust.
  • Il protocollo binario EdgeDB è stato stabilizzato, rendendo possibile l'elaborazione simultanea di più sessioni diverse all'interno della stessa connessione di rete, inoltrando tramite HTTP, utilizzando variabili globali e stati locali.
  • Aggiunto supporto per l'attivazione del socket, che consente di non mantenere in memoria il gestore del server ed eseguirlo solo quando si tenta di stabilire una connessione (utile per risparmiare risorse sui sistemi degli sviluppatori).

Fonte: opennet.ru

Aggiungi un commento