È disponibile la prima versione stabile del sistema di gestione database EdgeDB, che rappresenta un'estensione di PostgreSQL con l'implementazione di un modello di dati relazionale-grafico e di un linguaggio di query EdgeQL, ottimizzati per lavorare con dati gerarchici complessi. Il codice è scritto in Python e Rust ed è distribuito con licenza Apache 2.0. Le librerie client sono disponibili per i linguaggi Python, Go, Rust e TypeScript/Javascript. Viene fornito un insieme di strumenti da riga di comando per la gestione del database e per l'esecuzione interattiva di query (REPL).
In EdgeDB, invece di un modello di dati basato su tabelle, viene adottato un sistema dichiarativo basato su tipi di oggetto. Invece di chiavi esterne (foreign key) per definire relazioni tra tipi, si utilizza il collegamento tramite riferimenti (un oggetto può essere utilizzato come proprietà di un altro oggetto). type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Per accelerare l'elaborazione delle richieste possono essere utilizzati indici. Sono supportate anche funzionalità come la tipizzazione rigorosa delle proprietà, le restrizioni sui valori delle proprietà, le proprietà calcolate e le procedure memorizzate. Tra le peculiarità dello schema di archiviazione ad oggetti di EdgeDB, che assomiglia a un ORM, si nota la possibilità di mescolare schemi, collegare proprietà di diversi oggetti e il supporto integrato per JSON.
Vengono forniti strumenti integrati per la migrazione dello schema di archiviazione: dopo aver modificato lo schema definito in un file esdl separato, è sufficiente eseguire il comando «edgedb migration create» e il DBMS analizzerà le differenze nel schema, generando interattivamente uno script per la transizione al nuovo schema. La cronologia delle modifiche allo schema viene tracciata automaticamente.
Per la formazione delle query sono supportati sia il linguaggio di query GraphQL sia il linguaggio proprietario di EdgeDB, che rappresenta un'adattamento di SQL per dati gerarchici. Invece di liste, i risultati delle query vengono presentati in una forma strutturata, e invece di subquery e operazioni JOIN, è possibile specificare una query EdgeQL come espressione all'interno di un'altra query. Sono supportate transazioni e cicli. 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’ } ) } for number in {0, 1, 2, 3} union ( select { number, number + 0.5 } );
Fonte: opennet.ru
