nerandb.fast
v0.0.26
Published
Basit, hızlı ve güvenilir key-value veritabanı. LevelDB ve LMDB ile yerelde veri saklama, local cache ile ultra hızlı okuma sağlar.
Downloads
1,815
Maintainers
Readme
🚀 nerandb.fast
nerandb.fast; LevelDB ve LMDB altyapıları üzerine kurulmuş, yüksek performanslı, kalıcı (persistent) ve kullanımı kolay bir anahtar-değer (key-value) veritabanı modülüdür.
Harici bir sunucu kurulumu gerektirmez, verileriniz yerel diskte güvenle saklanır. İçerisindeki önbellek (cache) mekanizması ve atomik kilit (mutex) sistemi ile veri bütünlüğünü ve performansı artırır.
🔥 Özellikler
- Çoklu Altyapı: Hem
LevelDB(varsayılan) hem deLMDBdesteği. - Nested (İç İçe) Veri:
users.selim.moneygibi ayarlanabilir notasyon ile derin objelere erişim. - Yüksek Performans: İsteğe bağlı
cacheözelliği ile RAM üzerinden ultra hızlı okuma. - Gelişmiş Dizi Yönetimi: Dizilere veri ekleme (
push), çıkarma (unpush) ve öncelikli işlemler. - Matematiksel İşlemler: Basit
addvesubtractfonksiyonları. - Veri Taşıma: Veritabanları arası (LevelDB -> LMDB veya tam tersi) kolay veri transferi.
📄 Lisans
MIT
📦 Kurulum
npm install nerandb.fast⚙️ Yapılandırma ve Başlangıç
Veritabanını oluştururken ihtiyaçlarınıza göre özelleştirebilirsiniz.
LevelDB (Varsayılan)
En yaygın kullanım senaryosudur.
const NeranDB = require("nerandb.fast");
const db = new NeranDB({
type: "level", // Veritabanı türü (varsayılan: level)
path: "./database/level", // Veritabanı klasörü (varsayılan: ./database)
separator: ".", // İç içe veriler için ayraç (örn: user.id) (varsayılan: .)
noBlankData: true, // Boş obje/dizileri otomatik temizler (varsayılan: false)
cache: true // Okuma hızını artırmak için verileri önbelleğe alır (Bu özellik ram kullanımını arttırır) (varsayılan: false)
});LMDB
Daha büyük veriler ve senkron işlem desteği için LMDB tercih edilebilir.
const NeranDB = require("nerandb.fast");
const db = new NeranDB({
type: "lmdb", // Veritabanı türü
path: "./database/lmdb", // Veritabanı klasörü (varsayılan: ./database)
cache: false, // Okuma hızını artırmak için verileri önbelleğe alır (Bu özellik ram kullanımını arttırır) (varsayılan: false)
maxDbs: 10, // Maksimum veritabanı sayısı (varsayılan: 10)
compression: true, // Snappy sıkıştırması (varsayılan: true)
mapSize: 1024 * 1024 * 1024, // Maksimum boyut (varsayılan: 1GB)
maxReaders: 126, // Maksimum eşzamanlı okuyucu sayısı (her process veya thread bir slot kullanır). Çok sayıda paralel process için artırılabilir. (varsayılan: 126)
});📝 Ortak Seçenekler Tablosu
| Seçenek | Tip | Varsayılan | Açıklama |
| :--- | :--- | :--- | :--- |
| type | String | "level" | Veritabanı türü (level veya lmdb). |
| path | String | "./database" | Verilerin saklanacağı klasör yolu. |
| separator | String | . | Nested (iç içe) veriler için ayırıcı karakter. |
| cache| Boolean | false | true ise verileri RAM'de önbellekler (Daha hızlı okuma). |
| noBlankData | Boolean | false | true ise boş kalan {} veya [] değerleri otomatik siler. |
📚 Kullanım Örnekleri
Aşağıdaki tüm örnekler async/await yapısı kullanılarak hazırlanmıştır.
1. Veri Kaydetme ve Okuma (Set & Get)
const NeranDB = require("nerandb.fast");
const db = new NeranDB({ type: "level", cache: false });
// Basit veri kaydetme
await db.set("app_name", "My App");
// İç içe (Nested) veri kaydetme
await db.set("user.settings.theme", "dark");
await db.set("user.settings.notifications", true);
// Veri okuma
const theme = await db.get("user.settings.theme");
console.log(theme); // Çıktı: "dark"
// Tüm "user" objesini çekme
const user = await db.get("user");
console.log(user);
// Çıktı: { settings: { theme: 'dark', notifications: true } }2. Dizi (Array) İşlemleri
const NeranDB = require("nerandb.fast");
const db = new NeranDB({ type: "level", cache: false });
// Diziye eleman ekleme (push)
await db.push("colors", "red");
await db.push("colors", "blue");
// colors: ["red", "blue"]
// Diziden eleman çıkarma (unpush)
await db.unpush("colors", "red");
// colors: ["blue"]
// Obje içeren dizilerden silme (deep mod)
await db.push("users", { id: 1, name: "Ali" });
await db.push("users", { id: 2, name: "Veli" });
// "deep" modu ile içeriği eşleşen objeyi siler
await db.unpush("users", { id: 1, name: "Ali" }, { mode: "deep" });3. Matematiksel İşlemler
const NeranDB = require("nerandb.fast");
const db = new NeranDB({ type: "level", cache: false });
await db.set("wallet", 100);
// Ekleme
await db.add("wallet", 50); // 150
// Çıkarma
await db.subtract("wallet", 20); // 130
console.log(await db.get("wallet")); // 1304. Veri Silme
const NeranDB = require("nerandb.fast");
const db = new NeranDB({ type: "level", cache: false });
// Belirli bir alanı silme
await db.delete("user.settings.theme");
// Ana veriyi tamamen silme
await db.delete("user");5. Sorgulama ve Diğer İşlemler
const NeranDB = require("nerandb.fast");
const db = new NeranDB({ type: "level", cache: false });
// Veri var mı? (Has)
const hasTheme = await db.has("user.settings.theme"); // true/false
// Veri tipi kontrolü (TypeOf)
const type = await db.typeOf("wallet"); // "number"
// Belirli bir anahtarla başlayan verileri çekme (StartsWith)
// Örn: "session_1", "session_2" verilerini toplu çeker
const sessions = await db.startsWith("session_");
// Tüm veritabanını çekme
const allData = await db.all();🚚 Veritabanı Taşıma (Move)
Verilerinizi bir veritabanından diğerine (örneğin LevelDB'den LMDB'ye veya tam tersi) kolayca aktarabilirsiniz.
const NeranDB = require("nerandb.fast");
const oldDB = new NeranDB({ type: "level", path: "./old_db" });
const newDB = new NeranDB({ type: "lmdb", path: "./new_db" });
// oldDB içindeki tüm verileri newDB'ye kopyalar
await oldDB.move(newDB);
console.log("Taşıma işlemi tamamlandı.");⚙️ Senkron Kullanım:
LevelDB Senkron Çalışmayı Desteklemez: LevelDB, Node.js üzerinde tamamen asenkron çalışan bir mimariye sahiptir. Tüm okuma ve yazma işlemleri doğal olarak callback/asenkron yapı üzerinden yürür. Bu nedenle LevelDB'de senkron kullanım desteği bulunmaz.
LMDB Senkron Kullanımı: LMDB hem senkron hem asenkron çalışmayı destekler. Senkron kullanmak isterseniz metodlara
{ sync: true }opsiyonunu ekleyebilirsiniz. Ancak kod bütünlüğü açısındanasync/awaitkullanımı önerilir.
Senkron Kullanım Örneği (LMDB):
const NeranDB = require("nerandb.fast");
const db = new NeranDB({ type: "lmdb" });
// Basit veri kaydetme
db.set("app_name", "My App", { sync: true }); // senkron kullanım için
// İç içe (Nested) veri kaydetme
db.set("user.settings.theme", "dark", { sync: true }); // senkron kullanım için
db.set("user.settings.notifications", true, { sync: true }); // senkron kullanım için
// Veri okuma
const theme = db.get("user.settings.theme", { sync: true }); // senkron kullanım için
console.log(theme); // Çıktı: "dark"
// Tüm 'user' objesini çekme
const user = db.get("user", { sync: true }); // senkron kullanım için
console.log(user);
// Çıktı: { settings: { theme: 'dark', notifications: true } }💡 Tavsiyeler
Çoklu process kullanımı Eğer uygulamanız birden fazla process veya thread üzerinden aynı veritabanına erişecekse, LMDB daha güvenli ve mantıklı bir seçenek olacaktır. LMDB, multi-reader ve single-writer mimarisi sayesinde verileri atomik olarak okuma ve yazma yeteneğine sahiptir.
Cache kullanımı LMDB zaten kendi bellekteki haritalama (memory-mapped) yapısı sayesinde çok hızlı okuma sağlar. Bu nedenle cache özelliğini açmak gereksizdir.
