Megérkezett az EdgeDB 5.0 kiadása, amely a relációs-grafikus adatmodell és az EdgeQL lekérdezési nyelv implementálására készült, optimalizálva a bonyolult hierarchikus adatok kezelésére. A projekt a PostgreSQL-re épül, kódja Python és Rust nyelveken íródott (a parser és a teljesítménykritikus részek), és az Apache 2.0 licenc alatt terjesztik. Ügyfélkönyvtárak érhetők el Python, Go, Rust, .NET, Elixir és TypeScript/Javascript nyelvekhez. Parancssori eszközkészlet áll rendelkezésre az adatbázis kezelésére és interaktív lekérdezések végrehajtására (REPL).
Az EdgeDB adatmodellt nem táblák alapján, hanem deklaratív rendszer alapján építik fel, amely objektumtípusokkal dolgozik. A típusok közötti kapcsolatok meghatározására nem használnak külső kulcsokat (foreign key), hanem hivatkozásokkal történik a kapcsolódás (egy objektum használható másik objektum jellemzőjeként).
type Person { required name: str; } type Movie { required title: str; multi actors: Person; }
Támogatott funkciók közé tartozik az adatok szigorú típusossága, az értékek korlátozása, a számított mezők és a tárolt eljárások. Az EdgeDB objektumábrázolási rendszere, amely bizonyos értelemben hasonlít az ORM-hez, lehetővé teszi a sémák keverését, az adatok közötti kapcsolatok létrehozását és az integrált JSON támogatást. A lekérdezések feldolgozásának sebessége érdekében indexek alkalmazása lehetséges.
Beépített eszközök állnak rendelkezésre a tárolási séma migrálására — a sémában végrehajtott változtatások után, amelyeket egy külön esdl-fájlban adtak meg, elegendő végrehajtani az „edgedb migration create” parancsot, és az adatbázis elemzi a sémában lévő eltéréseket, interaktív módban generálja az új sémára való áttéréshez szükséges szkriptet. Automatikusan nyomon követi a sémaváltoztatások történetét.
A lekérdezések felépítéséhez támogatott a GraphQL lekérdezési nyelv és az EdgeDB saját lekérdezési nyelve, amely az SQL hierarchikus adatokra történő adaptációja. A lekérdezések eredményei strukturált formában jelennek meg a listák helyett, és a belső lekérdezések és JOIN műveletek helyett az EdgeQL egy lekérdezésként való megadására van lehetőség egy másik lekérdezés kifejezésén belül. Támogatottak a tranzakciók és a ciklusok.
válasszon Film { cím, színészek: { név } } szűrő .cím = „A Mátrix” beszúrás Film { cím := „A Mátrix Feltámadások”, színészek := ( válasszon Ember szűrő .név a { ‘Keanu Reeves’, ‘Carrie-Anne Moss’, ‘Laurence Fishburne’ } ) }
Az új verzióban:
- Hozzáadva a „branching” támogatása, amely lehetővé teszi az adatokkal és sémákkal való munka során a verziókezelő rendszerekben használt ágak koncepciójának alkalmazását. Az új kiadásban a „database” kifejezés helyett az „ág” (branch) fogalmát vezették be, a „create database” és „drop database” parancsokat elavultnak nyilvánították, és helyettük új parancsok bevezetését javasolják: „create empty branch” és „drop branch”. A meglévő ágak és adatbázisok séma- és adatmásolásával üres ágak, valamint „create schema branch” és „create data branch” parancsokkal ágazások hozhatók létre.
Gyakorlati szempontból a branch támogatás lehetővé teszi az adatok szinkronizálását a feldolgozásukhoz használt kóddal, miközben fenntartja a régi kóddal való kompatibilitást. Például a kód frissítése után új adatágat lehet hozzárendelni, amely figyelembe veszi a tárolási séma módosításait. Ezt a funkciót kényelmesen lehet használni az új szoftververziók fejlesztésének és tesztelésének egyszerűsítésére, utánna pedig elegendő váltani a már tesztelt ágra.
- A pgvector kiterjesztés, amelyet a vektorok hatékony tárolására és lekérdezésére használnak, új HNSW (Hierarchical Navigable Small Worlds) index típust kapott, amely hasonlóan az IVFFlat indexhez, három változatban érhető el: ext::pgvector::hnsw_euclidean, ext::pgvector::hnsw_ip és ext::pgvector::hnsw_cosine. Ezen kívül a pgvector bővítette az indexek finomhangolási lehetőségeit az ext::pgvector::Config objektum révén.
- További hitelesítési lehetőségek is hozzá lettek adva. Az auth kiterjesztésben támogatottá vált a jelszó nélküli WebAuthn hitelesítési sémák (Passkeys) és a „varázslinkek” (email alapú). Lehetővé vált a Slack és a Discord platformok OAuth szolgáltatóként való használata.
- Teljesítményoptimalizálások lettek végrehajtva. A lekérdezések fordítási találatainak tárolásához használt cache implementáció biztosítja az állapot megőrzését a restartok között, és automatikus újrafordítást biztosít a migráció után. Növelték a sebességet a nagy tárolási sémákban.
- Az EdgeQL lekérdező nyelv „for” kifejezésében engedélyezett, hogy a „union” kulcsszót ne kelljen megadni az alap lekérdezésekben, amelyek insert, update vagy delete kifejezéseket használnak.
- Új vacuum() parancs került hozzáadásra az adatbázis tartalmának tisztítására, optimalizálására és csomagolására.
- Átkonvertálás engedélyezve van az adatok között bytes és int16, int32, int64 és uuid típusok között a to_bytes(), to_uuid() és to_int*() funkciók használatával.
- Lehetővé vált az összes adatbázis-kapcsolat lezárása a „drop database” művelet végrehajtása után.
Forrás: opennet.ru
