De release van de database EdgeDB 5.0 is beschikbaar, die een relationeel-grafisch datamodel en de querytaal EdgeQL implementeert, geoptimaliseerd voor complexe hiërarchische gegevens. Het project ontwikkelt zich als een uitbreiding bovenop PostgreSQL, waarvan de code is geschreven in Python en Rust (parser en prestatiekritische delen), en wordt verspreid onder de Apache 2.0-licentie. Klantenbibliotheken zijn voorbereid voor de talen Python, Go, Rust, .NET, Elixir en TypeScript/Javascript. Er is een command-line toolkit beschikbaar voor het beheer van de database en het interactief uitvoeren van queries (REPL).
In plaats van een tabel-gebaseerd datamodel, gebruikt EdgeDB een declaratief systeem gebaseerd op objecttypen. In plaats van buitenlandse sleutels (foreign key) om de relatie tussen typen te definiëren, wordt binding door middel van referenties toegepast (een object kan als eigenschap van een ander object worden gebruikt).
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
Functionaliteiten zoals strikte typering van eigenschappenn, waarde-beperkingen voor eigenschappen, berekende eigenschappen en opgeslagen procedures worden ondersteund. Kenmerken van het objectopslagmodel van EdgeDB, dat enigszins lijkt op ORM, zijn onder andere de mogelijkheid om schema's te mengen, het binden van eigenschappen uit verschillende objecten en geïntegreerde ondersteuning voor JSON. Indexen kunnen worden gebruikt om de verwerking van queries te versnellen.
Er zijn ingebouwde tools beschikbaar voor het migreren van het opslagchema — na een wijziging in het schema, zoals opgegeven in een afzonderlijk esdl-bestand, is het voldoende om het commando 'edgedb migration create' uit te voeren, waarna de database de verschillen in het schema analyseert en interactief een script genereert voor de overgang naar het nieuwe schema. De geschiedenis van schemawijzigingen wordt automatisch bijgehouden.
Voor het opstellen van queries wordt de querytaal GraphQL en de eigen EdgeDB-taal ondersteund, die een aanpassing van SQL biedt voor hiërarchische gegevens. In plaats van lijsten worden de resultaten van de query in gestructureerde vorm gepresenteerd, en in plaats van subqueries en JOIN-operaties is er de mogelijkheid om een enkele EdgeQL-query als expressie binnen een andere query op te geven. Transacties en lussen worden ondersteund.
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’ } ) }
In de nieuwe versie:
- Ondersteuning voor branching is toegevoegd, waardoor de concepten van branches, die worden gebruikt in versiebeheersystemen, kunnen worden toegepast bij het werken met gegevens en schema's. In plaats van de term 'database' wordt in deze nieuwe release het begrip 'branch' voorgesteld, terwijl de commando's 'create database' en 'drop database' als verouderd worden beschouwd en het wordt aanbevolen om de nieuwe commando's 'create empty branch' en 'drop branch' te gebruiken. Naast lege branches kunnen met de commando's 'create schema branch' en 'create data branch' takken van bestaande branches en databases worden gemaakt door de opslagstructuur en gegevens daarvan te kopiëren.
Praktisch gezien maakt de ondersteuning voor branches het mogelijk om gegevens te synchroniseren met de code die voor hun verwerking wordt gebruikt, terwijl de compatibiliteit met oude code behouden blijft. Na een code-update kan bijvoorbeeld een nieuwe databranch worden verbonden die rekening houdt met de in de code aangebrachte wijzigingen in de opslagstructuur. Deze functionaliteit is handig voor het vereenvoudigen van de ontwikkeling en het testen van nieuwe softwareversies, waarbij het na voltooiing voldoende is om over te schakelen naar de al geteste branch.
- In de pgvector-uitbreiding, die wordt gebruikt voor efficiënte opslag en query van vectoren, is een nieuw type index HNSW (Hierarchical Navigable Small Worlds) toegevoegd, dat, net als de IVFFlat-index, in drie varianten beschikbaar is: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip en ext::pgvector::hnsw_cosine. Bovendien zijn de mogelijkheden voor het fijn afstemmen van indexen uitgebreid via het object ext::pgvector::Config.
- Er zijn extra authenticatiemogelijkheden toegevoegd. In de auth-uitbreiding is ondersteuning geïmplementeerd voor wachtwoordloze authenticatieschema's WebAuthn (Passkeys) en 'magic links' (op basis van e-mail). Ondersteuning voor het gebruik van de platforms Slack en Discord als OAuth-providers is ook toegevoegd.
- Er zijn prestatieoptimalisaties doorgevoerd. In de implementatie van de cache met de compilaties van queryresultaten is de status tussen herstarts behouden, en is automatische recompilatie na migratie toegevoegd. De snelheid van werken met grote opslagstructuren is verbeterd.
- In de querytaal EdgeQL is het toegestaan om het sleutelwoord 'union' niet op te geven in basisquery's waarbij de expressies insert, update of delete worden gebruikt.
- De commando vacuum() is toegevoegd voor het opschonen, optimaliseren en verpakken van de inhoud van de database.
- Het is toegestaan om gegevens tussen het type bytes en de types int16, int32, int64 en uuid om te zetten met behulp van de functies to_bytes(), to_uuid() en to_int*().
- De mogelijkheid is toegevoegd om alle verbindingen naar de database te sluiten na het uitvoeren van de bewerking 'drop database'.
Bron: opennet.ru
