Esitatud on EdgeDB 2.0 andmebaasi vÀljalase, mis rakendab relatsiooni-graafide mudelit ja EdgeQL pÀringute keelt, mis on optimeeritud keeruliste hierarhiliste andmete töötlemiseks. Kood on kirjutatud Pythonis ja Rustis (parser ja jÔudlusele kriitilised osad) ning jagatakse Apache 2.0 litsentsi raames. Projekt areneb PostgreSQL-i pealisehitise vormis. Klientide teegid on valmistatud Python, Go, Rust ja TypeScript/Javascript keelte jaoks. Pakutakse kÀsurea tööriistu andmebaasi haldamiseks ja interaktiivsete pÀringute tÀitmiseks (REPL).
EdgeDB-s kasutatakse deklaratiivset sĂŒsteemi, mis pĂ”hineb objektitĂŒĂŒpidel, mitte tabelipĂ”hist andmemudelit. Suhete mÀÀramiseks tĂŒĂŒpide vahel kasutatakse viidete sidumist (ĂŒks objekt vĂ”ib olla teise objekti omadus) selle asemel, et kasutada vĂ€liseid vĂ”tmeid.
type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
PĂ€ringute töötlemise kiirendamiseks vĂ”ivad rakenduda indeksid. Toetatakse ka selliseid vĂ”imalusi nagu omaduste range tĂŒpiseerimine, omaduste vÀÀrtuste piirangud, arvutatud omadused ja salvestatud protseduurid. EdgeDB objekti salvestamise skeemi eripĂ€rad, mis sarnanevad ORM-iga, hĂ”lmavad skeemide segamist, erinevatest objektidest omaduste sidumist ja integreeritud JSONi tuge.
Pakutakse sisseehitatud tööriistu salvestamise skeemi migreerimiseks â pĂ€rast skeemi muutmist, mis on mÀÀratud eraldi esdl-failis, piisab kĂ€su âedgedb migration createâ tĂ€itmisest ning DBMS analĂŒĂŒsib skeemi erinevusi ja genereerib interaktiivses reĆŸiimis skripti uue skeemi juurde ĂŒleminekuks. Skeemi muudatuste ajalugu jĂ€lgitakse automaatselt.
PĂ€ringute koostamiseks toetatakse nii GraphQL pĂ€ringukeelt kui ka oma EdgeDB keelt, mis on SQL-i kohandamine hierarhiliste andmete jaoks. Tulemused esitatakse struktureeritud kujul listide asemel ning alampĂ€ringute ja JOIN-operatsioonide asemel on vĂ”imalik esitada ĂŒhte EdgeQL pĂ€ringut teise pĂ€ringu sees vĂ€ljendina. Toetatakse tehinguid ja tsĂŒkleid.
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 } );
Uues versioonis:
- Lisatud on sisseehitatud veebiliides andmebaasi haldamiseks, mis vĂ”imaldab vaadata ja muuta andmeid, teostada EdgeQL pĂ€ringuid ja analĂŒĂŒsida kehtivat salvestuskeelt. Liidese kĂ€ivitamiseks kasutatakse kĂ€sku «edgedb ui», pĂ€rast mida on see juurdepÀÀsetav localhostile pöördudes.

- Rakendatud on vĂ€ljend «GROUP», mis vĂ”imaldab andmete sektsioonide ja agregatsioonide loomist ning andmete rĂŒhmitamist EdgeQLi ĂŒkskĂ”ik milliste vĂ€ljendite pĂ”hjal sarnaselt SELECT toiminguga.
- Objeckti tasemel juurdepÀÀsu haldamise vÔimalus. JuurdepÀÀsureeglid mÀÀratakse salvestusskeemi tasemel ja need vÔimaldavad piirata teatud objekti komplekti kasutamise vÔimalust valiku, sisestamise, kustutamise ja uuendamise toimingutes. NÀiteks vÔib lisada reegli, mis lubab uuendada avaldamist ainult autori poolt.
- Lisatud on globaalsete muutujate kasutamise vÔimalus salvestusskeemis. Kasutajaga sidumiseks on ette nÀhtud uus globaalne muutuja current_user.
- Lisatud on tugi vÀÀrtusvahemike mÀÀratlemiseks (range) tĂŒĂŒpide jaoks.
- Valmistatud on ametlik klientteek Rusti keele jaoks.
- Stabiliseeritud binaarprotokoll EdgeDB, mis vĂ”imaldab samal ajal töötada mitme erineva sessiooniga ĂŒhes vĂ”rgus ĂŒhenduses, HTTP kaudu edastamise, globaalsed muutujad ja lokaalsete olekute kasutamise.
- Lisatud soketi aktiveerimise tugi, mis vĂ”imaldab mitte hoida serveri töötlejat mĂ€lus ja kĂ€ivitada seda alles siis, kui pĂŒĂŒtakse luua ĂŒhendus (kasulik ressursside kokkuhoidmiseks arendussĂŒsteemidel).
Allikas: opennet.ru

