İlişkisel grafik veri modelini ve karmaşık hiyerarşik verilerle çalışmak için optimize edilmiş EdgeQL sorgu dilini uygulayan EdgeDB 2.0 DBMS'nin sürümü sunulmaktadır. Kod Python ve Rust (ayrıştırıcı ve performans açısından kritik parçalar) dillerinde yazılmıştır ve Apache 2.0 lisansı altında dağıtılmaktadır. Proje PostgreSQL'e eklenti olarak geliştirilmektedir. İstemci kütüphaneleri Python, Go, Rust ve TypeScript/Javascript için hazırlanmıştır. DBMS yönetimi ve etkileşimli sorgu yürütme (REPL) için komut satırı araçları sağlar.
EdgeDB, tablo tabanlı bir veri modeli yerine nesne türlerine dayalı bildirimsel bir sistem kullanır. Türler arasındaki ilişkiyi tanımlamak için yabancı anahtarlar yerine referansa göre bağlantı kullanılır (bir nesne başka bir nesnenin özelliği olarak kullanılabilir).
type Kişi { gerekli özellik adı -> str; } type Movie { gerekli özellik title -> str; çoklu bağlantı aktörleri -> Kişi; }
Sorgu işlemeyi hızlandırmak için dizinler kullanılabilir. Güçlü özellik yazma, özellik değeri kısıtlamaları, hesaplanan özellikler ve saklı prosedürler gibi özellikler de desteklenir. Bir şekilde ORM'yi anımsatan EdgeDB nesne depolama şemasının özellikleri arasında şemaları karıştırma yeteneği, farklı nesnelerden bağlantı özellikleri ve entegre JSON desteği yer alıyor.
Şema geçişini depolamak için yerleşik araçlar sağlanmıştır - ayrı bir esdl dosyasında belirtilen şemayı değiştirdikten sonra, sadece "edgedb migration create" komutunu çalıştırın; DBMS şemadaki farklılıkları analiz edecek ve etkileşimli olarak esdl dosyasına geçiş için bir komut dosyası oluşturacaktır. yeni şema. Şema değişikliklerinin geçmişi otomatik olarak izlenir.
Sorgu oluşturmak için hem GraphQL sorgu dili hem de hiyerarşik veriler için SQL'in uyarlanması olan özel EdgeDB dili desteklenir. Sorgu sonuçları, listeler yerine yapılandırılmış bir şekilde biçimlendirilir ve alt sorgular ve JOIN'ler yerine, bir EdgeQL sorgusunu başka bir sorgu içinde ifade olarak belirtebilirsiniz. İşlemler ve döngüler desteklenir.
seç Film { başlık, aktörler: { ad } } filtre .başlık = "The Matrix" insert Film { title := "The Matrix Resurrections", aktörler := ( seçin Kişi filtresi .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } {0, 1, 2, 3} birleşimindeki sayı için ( { sayı, sayı + 0.5 } 'u seçin);
Yeni sürümde:
- Veri tabanı yönetimi için, verileri görüntülemenize ve düzenlemenize, EdgeQL sorgularını çalıştırmanıza ve kullanılan depolama düzenini analiz etmenize olanak tanıyan yerleşik bir web arayüzü eklenmiştir. Arayüz “edgedb ui” komutuyla başlatılır ve ardından localhost'a erişildiğinde kullanılabilir hale gelir.

- "GROUP" ifadesi uygulandı; bu, SELECT işlemindeki gruplamaya benzer şekilde rastgele EdgeQL ifadelerini kullanarak verileri bölümlemenize ve toplamanıza ve verileri gruplamanıza olanak tanır.
- Erişimi nesne düzeyinde kontrol edebilme. Erişim kuralları, depolama şeması düzeyinde tanımlanır ve getirme, ekleme, silme ve güncelleme işlemlerinde belirli bir nesne kümesini kullanma yeteneğini sınırlamanıza olanak tanır. Örneğin, yalnızca yazarın bir yayını güncellemesine izin veren bir kural ekleyebilirsiniz.
- Depolama şemasına genel değişkenleri kullanma yeteneği eklendi. Kullanıcıya bağlanmak için yeni bir global değişken current_user önerildi.
- Değer aralıklarını tanımlayan türler için destek eklendi.
- Rust dili için resmi bir istemci kütüphanesi hazırlandı.
- EdgeDB ikili protokolü stabilize edilerek, aynı ağ bağlantısı içinde birden fazla farklı oturumun eş zamanlı olarak işlenmesi, HTTP yoluyla iletilmesi, genel değişkenler ve yerel durumlar kullanılması mümkün kılındı.
- Sunucu işleyicisini bellekte tutmamanıza ve yalnızca bağlantı kurmaya çalışırken başlatmanıza olanak tanıyan soket etkinleştirme desteği eklendi (geliştirici sistemlerde kaynakları kaydetmek için kullanışlıdır).
Kaynak: opennet.ru

