Rilis stabil pertama EdgeDB kini tersedia. Ini adalah add-on PostgreSQL yang mengimplementasikan model data grafik relasional dan bahasa kueri EdgeQL, yang dioptimalkan untuk bekerja dengan data hierarkis yang kompleks. Kodenya ditulis dalam Python dan Rust dan didistribusikan di bawah lisensi Apache 2.0. Pustaka klien tersedia untuk Python, Go, Rust, dan TypeScript/Javascript. Alat baris perintah untuk mengelola DBMS dan eksekusi kueri interaktif (REPL) juga disediakan.
Alih-alih model data berbasis tabel, EdgeDB menggunakan sistem deklaratif berdasarkan tipe objek. Alih-alih kunci asing, penautan digunakan untuk mendefinisikan hubungan antar tipe (satu objek dapat digunakan sebagai properti objek lain). ketik Person { wajib properti nama -> str; } ketik Movie { wajib properti judul -> str; aktor multi-tautan -> Person; }
Indeks dapat digunakan untuk mempercepat pemrosesan kueri. Fitur seperti pengetikan properti yang kuat, batasan nilai properti, properti terhitung, dan prosedur tersimpan juga didukung. Fitur skema penyimpanan objek EdgeDB, yang agak mengingatkan pada ORM, mencakup kemampuan untuk menggabungkan skema, menghubungkan properti dari objek yang berbeda, dan dukungan JSON terintegrasi.
Alat bawaan disediakan untuk menyimpan migrasi skema - setelah mengubah skema yang ditentukan dalam file esdl terpisah, cukup jalankan perintah "edgedb migrasi buat" dan DBMS akan menganalisis perbedaan dalam skema dan secara interaktif menghasilkan skrip untuk migrasi ke skema baru. Riwayat perubahan skema dilacak secara otomatis.
Dukungan kueri mencakup GraphQL dan bahasa kueri EdgeDB sendiri, yang merupakan adaptasi SQL untuk data hierarkis. Alih-alih daftar, hasil kueri terstruktur, dan alih-alih subkueri dan JOIN, Anda dapat menentukan satu kueri EdgeQL sebagai ekspresi dalam kueri lain. Transaksi dan loop didukung. Pilih Film { judul, aktor: { nama } } filter .judul = "The Matrix" masukkan Film { judul := "The Matrix Resurrections", aktor := ( pilih Orang filter .nama di { 'Keanu Reeves', 'Carrie-Anne Moss', 'Laurence Fishburne' } ) } untuk angka di {0, 1, 2, 3} union ( pilih { angka, angka + 0.5 } );
Sumber: opennet.ru
