npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

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

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 de LMDB desteği.
  • Nested (İç İçe) Veri: users.selim.money gibi 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 add ve subtract fonksiyonları.
  • 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")); // 130

4. 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ından async/await kullanı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.