NarDB nedir?
Tek bir .ndbc kapsayıcısında çalışan, şemaya dayalı, LexerLang ile birlikte tasarlanan bir veritabanı.
NarDB, LexerLang ekosistemi için Go ile yazılan bir veritabanı motorudur. Bir veritabanı bir .ndbc kapsayıcısıdır (nar database container): içinde katalog, indeksler ve her partition için ayrı bir dosya bulunan bir klasör. Şemalar, kullanıcılar, havuz ayarları ve dağıtım haritası bu kapsayıcının içindedir. Sunucu kurmak gerekmez.
Adı nardan geliyor. Bir narın tek kabuğu içinde çok sayıda tane vardır; NarDB de farklı dosyalarda ya da sunucularda duran parçaları tek bir veritabanı olarak sunmayı hedefliyor.
Üç parça#
| Parça | Ne yapar |
|---|---|
Motor (nardb) | Sayfa tabanlı B+tree, katalog, şema dili, sorgular. Go paketi olarak gömülür. |
NarDB Shell (nardb_shell) | QBASIC tarzı, klavyeyle kullanılan arayüz: menüler, sorgu editörü, sonuç tablosu, >> komut satırı. |
| Sorgu dili (NarQL) | SQL değil; from('uyeler').where({...}).get(); gibi zincirleme bir dil. |
Bir bakışta#
create_schema('urunler')
.fields({
'kod': {type: string, max_length: 20, encoding: ascii, primary_key: true},
'ad': {type: string, max_length: 80},
'fiyat': {type: decimal, precision: 10, scale: 2, check: {min: 0}}
})
.commit();
from('urunler').insert_one({kod: 'NAR-001', ad: 'Hicaz narı 🍉', fiyat: 89.90});
from('urunler').where({'fiyat': {lt: 100}}).fields('ad', 'fiyat').get();Bugün ne çalışıyor#
NarDB geliştirme aşamasında (sürüm 0.2.0-dev). Belgeler yalnızca çalışan özellikleri anlatır; planlananlar ayrıca belirtilir.
Çalışan: kapsayıcı biçimi, yazma günlüğü (WAL) ve çökme kurtarma, her ifadenin ya tamamen ya hiç uygulanması, sayfa önbelleği, partition başına dosya, diskte şifreleme (XChaCha20-Poly1305), B+tree tablolar ve indeksler, şema oluşturma, değiştirme ve silme, ekleme, güncelleme, silme, where, order, limit, CAST / FORMAT / TO_DATE, kullanıcılar (Argon2id) ve şema yetkileri, havuz sınırları, şifreli .ndbz yedekleri, mTLS'li gRPC sunucusu (nardbd) ve Go istemcisi, dağıtım haritasının tanımlanması, NarDB Shell.
Henüz yok:
- Çok ifadeli işlemler: Her ifade kendi başına atomik; birden fazla ifadeyi tek işlemde toplayan
begin/commithenüz yok. join: sözdizimi tanınıyor ama motorda çalışmıyor.- Dağıtık okuma ve yazma:
file()veremote()partition'larına erişim yok. - LexerLang bağlantısı: LexerLang connector'ı henüz yazılmadı; NarDB Shell de henüz uzak sunucuya bağlanamıyor.
- Dışa aktarma: sonuçlar csv, json ya da xlsx olarak aktarılamıyor.