Pubblicazione del DBMS relazionale-a-grafico EdgeDB 2.0

È stato presentato il rilascio del DBMS EdgeDB 2.0, che implementa il modello di dati relazionale-a-grafico e il linguaggio di query EdgeQL, ottimizzati per lavorare con dati gerarchici complessi. Il codice è scritto in Python e Rust (parsing e parti critiche per le prestazioni) ed è distribuito sotto licenza Apache 2.0. Il progetto si sviluppa come un'estensione di PostgreSQL. Le librerie client sono disponibili per Python, Go, Rust e TypeScript/Javascript. Sono forniti strumenti da riga di comando per gestire il DBMS e per l'esecuzione interattiva delle query (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 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 creazione di query è supportato sia il linguaggio di query GraphQL sia il linguaggio proprietario EdgeDB, che rappresenta un adattamento di SQL per i dati gerarchici. Invece di restituire liste, i risultati delle query vengono presentati in forma strutturata e, anziché sottotrame 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 } );

Nella nuova versione:

  • È stata aggiunta un'interfaccia web incorporata 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 con il comando «edgedb ui», dopo il quale è accessibile tramite localhost.
    Pubblicazione del DBMS relazionale-a-grafico EdgeDB 2.0
  • Implementata l'espressione «GROUP», che consente di sezionare e aggregare i dati e di eseguire la raggruppamento dei dati secondo espressioni EdgeQL, analogamente alla raggruppamento nell'operazione SELECT.
  • Possibilità di gestione degli accessi a livello di oggetti. Le regole di accesso sono definite a livello di schema di archiviazione e consentono di limitare l'uso di un determinato insieme di oggetti nelle operazioni di selezione, inserimento, eliminazione e aggiornamento. Ad esempio, è possibile aggiungere una regola che consente l'aggiornamento di una pubblicazione solo all'autore.
  • Aggiunta la possibilità di utilizzare variabili globali nello schema di archiviazione. Per il binding all'utente, è stata proposta una nuova variabile globale current_user.
  • Aggiunto il supporto per tipi che definiscono intervalli di valori (range).
  • Preparata la libreria client ufficiale per il linguaggio Rust.
  • Stabilizzato il protocollo binario EdgeDB, che ora consente di gestire contemporaneamente più diverse sessioni all'interno di una singola connessione di rete, il forwarding tramite HTTP, l'uso di variabili globali e stati locali.
  • È stata aggiunta la supporto per l'attivazione tramite socket, che permette di non mantenere il server in memoria e di avviarlo solo quando si tenta di stabilire una connessione (utile per risparmiare risorse nei sistemi degli sviluppatori).

Fonte: opennet.ru

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