EdgeDB:n ensimmäinen vakaa versio on nyt saatavilla. Se on PostgreSQL-lisäosa, joka toteuttaa relaatiograafitietomallin ja EdgeQL-kyselykielen, optimoituna monimutkaisen hierarkkisen datan käsittelyyn. Koodi on kirjoitettu Pythonilla ja Rustilla, ja se jaetaan Apache 2.0 -lisenssillä. Asiakaskirjastoja on saatavilla Pythonille, Golle, Rustille ja TypeScriptille/Javascriptille. Tarjolla on komentorivityökalut tietokannan hallinnan ja interaktiivisen kyselyn suorittamisen (REPL) suorittamiseen.
Taulukkopohjaisen datamallin sijaan EdgeDB käyttää deklaratiivista objektityyppeihin perustuvaa järjestelmää. Viiteavainten sijaan tyyppien välisten suhteiden määrittelyyn käytetään linkitystä (yhtä objektia voidaan käyttää toisen objektin ominaisuutena). type Person { required property name -> str; } type Movie { required property title -> str; multi link actors -> Person; }
Indeksejä voidaan käyttää kyselyiden käsittelyn nopeuttamiseen. Myös ominaisuuksia, kuten vahva ominaisuustyypitys, ominaisuusarvorajoitukset, lasketut ominaisuudet ja tallennetut proseduurit, tuetaan. EdgeDB:n objektitallennusskeema, joka muistuttaa hieman ORM:ää, sisältää mahdollisuuden yhdistää skeemoja, linkittää ominaisuuksia eri objekteista ja integroidun JSON-tuen.
Sisäänrakennetut työkalut toimitetaan skeeman siirron tallentamiseen - kun olet muuttanut erillisessä esdl-tiedostossa määritettyä skeemaa, suorita "edgedb migration create" -komento ja DBMS analysoi skeeman erot ja luo interaktiivisesti komentosarjan siirtymistä varten uusi kaava. Kaavan muutoshistoriaa seurataan automaattisesti.
Kyselytuki sisältää sekä GraphQL:n että EdgeDB:n oman kyselykielen, joka on SQL:n mukautus hierarkkiselle datalle. Listojen sijaan kyselytulokset ovat strukturoituja, ja alikyselyiden ja JOIN-kyselyiden sijaan voit määrittää yhden EdgeQL-kyselyn lausekkeena toisen kyselyn sisällä. Transaktiot ja silmukat ovat tuettuja. 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 } );
Lähde: opennet.ru
