Esimene stabiilne versioon andmebaasist EdgeDB on nĂŒĂŒd saadaval. See on PostgreSQL peal ehitatud, rakendades relatsiooniliste ja graafikute andmemudelite ning EdgeQL pĂ€ringute keelt, mis on optimeeritud keerukate hierarhiliste andmete töötlemiseks. Kood on kirjutatud keeltes Python ja Rust ning jagatakse Apache 2.0 litsentsi alusel. Klientide teegid on ette valmistatud keelte jaoks Python, Go, Rust ja TypeScript/Javascript. Pakutakse kĂ€surea tööriistu andmebaasi haldamiseks ja interaktiivsete pĂ€ringute tĂ€itmiseks (REPL).
EdgeDB kasutab andmemudeli asemel, mis pĂ”hineb tabelitel, deklareeritud sĂŒsteemi objekti tĂŒĂŒpide pĂ”hjal. Seoste mÀÀratlemiseks tĂŒĂŒpide vahel kasutatakse viidete sidumist vĂ€liste vĂ”tmete (foreign key) asemel (ĂŒks objekt vĂ”ib olla teise objekti omadus). 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Ă€ringute keelt kui ka oma EdgeDB keelt, mis on SQL kohandamine hierarhiliste andmete jaoks. Tulemused esitletakse struktureeritud kujul, mitte loendites, ning alampĂ€ringute ja JOIN-operatsioonide asemel on vĂ”imalik mÀÀrata ĂŒks EdgeQL pĂ€ring kui vĂ€ljend teise pĂ€ringu sees. 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 } );
Allikas: opennet.ru
