Uscita del DBMS relazionale-grafico EdgeDB 5.0

È disponibile il rilascio del DBMS EdgeDB 5.0, che implementa un modello di dati relazionale-a-grafico e un linguaggio di query EdgeQL, ottimizzato per gestire dati gerarchici complessi. Il progetto si sviluppa come un'estensione di PostgreSQL, il cui codice è scritto in Python e Rust (parser e parti critiche per le prestazioni), e viene distribuito sotto la licenza Apache 2.0. Le librerie client sono disponibili per i linguaggi Python, Go, Rust, .NET, Elixir e TypeScript/Javascript. Viene fornito un toolkit da riga di comando per gestire il DBMS e per eseguire query in modo interattivo (REPL).

In EdgeDB, anziché un modello di dati basato su tabelle, si utilizza un sistema dichiarativo basato su tipi oggetto. Invece delle chiavi esterne (foreign key) per definire le relazioni tra i tipi, si utilizza il legame tramite riferimenti (un oggetto può essere utilizzato come proprietà di un altro oggetto).

type Person { required name: str; } type Movie { required title: str; multi actors: Person; }

Sono supportate funzionalità come la tipizzazione rigorosa delle proprietà, vincoli sui valori delle proprietà, proprietà calcolate e procedure memorizzate. Tra le caratteristiche dello schema oggettuale di storage di EdgeDB, simile a un ORM, si segnala la possibilità di mescolare schemi, legando proprietà di diversi oggetti e integrando il supporto per JSON. Gli indici possono essere usati per velocizzare l'elaborazione delle query.

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 creazione di query, è supportato il linguaggio GraphQL e il linguaggio EdgeDB, che rappresenta un'adattamento di SQL per dati gerarchici. Invece di elenchi, i risultati delle query sono presentati in forma strutturata, e invece di sottoquery 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’ } ) }

Nella nuova versione:

  • È stata aggiunta la supporto per il branching, che consente di utilizzare il concetto di rami, applicato nei sistemi di controllo delle versioni, per lavorare con dati e schemi. Nella nuova versione è stato introdotto il termine "branch" al posto di "database", e i comandi "create database" e "drop database" sono stati dichiarati obsoleti, consigliando di utilizzare i nuovi comandi "create empty branch" e "drop branch". Oltre alle branche vuote, tramite i comandi "create schema branch" e "create data branch", è possibile creare diramazioni da branche e DB esistenti, copiando da essi sia lo schema di storage che i dati.

    Praticamente, il supporto per i rami consente di sincronizzare i dati con il codice utilizzato per elaborarli, mantenendo al contempo la compatibilità con il vecchio codice. Ad esempio, dopo aver aggiornato il codice, è possibile collegare un nuovo ramo dati a esso, tenendo conto delle modifiche apportate allo schema di storage. Questa funzionalità è utile per semplificare lo sviluppo e il testing di nuove versioni di software, permettendo di passare a un ramo già testato una volta terminato.

  • Nel pacchetto pgvector, utilizzato per la memorizzazione e interrogazione efficiente di vettori, è stato aggiunto un nuovo tipo di indici HNSW (Hierarchical Navigable Small Worlds), che, similmente all'indice IVFFlat, è disponibile in tre varianti: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip e ext::pgvector::hnsw_cosine. Inoltre, le funzionalità di tuning degli indici sono state ampliate attraverso l'oggetto ext::pgvector::Config.
  • Sono state aggiunte ulteriori opzioni di autenticazione. Nell'estensione auth è stata implementata la supporto per schemi di autenticazione senza password WebAuthn (Passkeys) e "magic links" (basati su email). È stato aggiunto il supporto per l'uso delle piattaforme Slack e Discord come fornitori OAuth.
  • Sono state apportate ottimizzazioni delle prestazioni. Nella realizzazione del cache con i risultati di compilazione delle query è stata garantita la persistenza dello stato tra i riavvii e aggiunta la ricompilazione automatica dopo la migrazione. È stata aumentata la velocità di lavoro con grandi schemi di storage.
  • Nel linguaggio di query EdgeQL, è consentito non specificare la parola chiave "union" nelle query base in cui sono utilizzate espressioni insert, update o delete.
  • È stato aggiunto il comando vacuum() per la pulizia, ottimizzazione e impacchettamento dei contenuti del DB.
  • È consentita la conversione dei dati tra il tipo bytes e i tipi int16, int32, int64 e uuid, utilizzando le funzioni to_bytes(), to_uuid() e to_int*().
  • È stata aggiunta la possibilità di chiudere tutte le connessioni al DB dopo l'esecuzione dell'operazione "drop database".

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster