Skip to main content

NEDB — a versioned, self-compressing, time-traveling embedded database (replay-protected, idempotent, relational, searchable). Native Rust core with a pure-Python fallback.

Project description

NEDB

A versioned, self-compressing, time-traveling embedded database.

Replay-protected · idempotent · relational · filterable · sortable · searchable · provable. One Rust core → ships to PyPI and npm from a single source.


Why NEDB

Redis is fast because it's in-memory and simple — but relations are hand-rolled, history is gone the moment you overwrite, and every call pays a network hop. NEDB keeps the speed and adds the things real systems actually need:

  • Faster-than-Redis latency where it's honest to claim it — NEDB runs embedded, in-process, so point reads pay no socket hop. The networked server (nedbd, RESP-compatible) competes on the Rust core's merits.
  • Replay protection + idempotency in the core, not the app. Every write carries a strictly-monotonic per-client nonce and an optional idempotency key. Retries are no-ops; stale/out-of-order ops are rejected. This is built into one hash-chained, append-only log.
  • Time-travel. Read the database exactly as it existed at any past sequence — AS OF seq. Debugging, audit, MVCC snapshots, and deterministic replay all fall out of the same log.
  • First-class relations. Adjacency-list graph edges with O(1) traversal — and the graph time-travels too.
  • Filter / sort / search. Equality, ordered, and full-text inverted indexes, maintained incrementally.
  • git-style files with maximum compression. Content-defined chunking + content-addressed dedup + temperature tiers (fast warm codec, max-ratio cold archival). Every file version has a Merkle root you can anchor on-chain.

The keystone: one nonce-enforced append-only log is the substrate for idempotency, replay protection, crash recovery, MVCC, and time-travel — simultaneously.


Quickstart (Python reference engine — runs today, zero build)

git clone https://github.com/Eth-Interchained/nedb && cd nedb
pip install -e .                 # pure-Python reference; no toolchain needed
python3 examples/demo.py         # see every feature
python3 tests/test_nedb.py       # 10/10 invariants
from nedb import NEDB

db = NEDB()
db.create_index("users", "status", "eq")
db.create_index("users", "age", "ordered")
db.create_index("users", "bio", "search")

db.put("users", "alice", {"name": "Alice", "age": 31, "status": "active",
                          "city": "Austin", "bio": "rust systems hacker"})

# Idempotent, replay-protected write (safe to retry forever):
db.put("orders", "o1", {"total": 42}, client="checkout", nonce=7, idem="charge-o1")

# NQL — filter + sort
db.query('FROM users WHERE age >= 25 AND status = "active" ORDER BY age DESC')

# Full-text search
db.query('FROM users SEARCH "rust"')

# Relations + graph traversal
db.link("users:alice", "follows", "users:bob")
db.q("users").where("_id", "=", "alice").traverse("follows").run()

# Time-travel
s = db.seq
db.put("users", "alice", {"name": "Alice", "city": "Lisbon", "age": 31, "status": "active"})
db.get("users", "alice", as_of=s)["city"]      # -> "Austin"

# git-style files with Cascade compression + provable history
v1 = db.put_file("notes.txt", open("notes.txt","rb").read())
db.file_root("notes.txt", v1)                  # Merkle root — anchorable on ITC

NQL — the NEDB Query Language

One small grammar; the Rust parser is the single source of truth so Python and Node share identical semantics. A fluent builder compiles to the same plan.

FROM <collection>
  [ AS OF <seq> ]
  [ WHERE <field> <op> <value> (AND ...)* ]      op ∈ = != < <= > >=
  [ SEARCH "<text>" ]
  [ ORDER BY <field> [ASC|DESC] ]
  [ TRAVERSE <relation> ]
  [ LIMIT <n> ]

What's measured (reference engine, pure Python, 2 vCPU)

Operation Result
GET (embedded, in-process) ~1.2M ops/s (~800 ns/op)
SET (logged + indexed) ~77K ops/s
Indexed query latency ~75 µs
File compression — warm (zlib stand-in) 39.9×
File compression — cold (LZMA archival) 88.9×
Cross-version dedup 20 of 22 chunks reused on edit

The reference engine proves the architecture. The Rust core (rust/) is the speed target — see bench/bench_redis.py for the embedded-vs-Redis harness.


Architecture

            ┌──────────────────────────────────────────────┐
  put/del → │  OpLog  (append-only · BLAKE3 hash chain ·    │ ← single source of truth
  link      │          per-client nonce · idempotency keys) │
            └───────────────┬──────────────────────────────┘
            deterministic fold │ (state = pure function of the log)
        ┌──────────────┬───────┴────────┬───────────────────┐
        ▼              ▼                ▼                   ▼
   MVCC store     Relations         Indexes            BlobStore (Cascade)
   (time-travel)  (graph, AS OF)    eq/ordered/search  CDC+dedup+tiers, Merkle roots

One Rust core (nedb-core) → PyO3 wheels (PyPI) and napi-rs binaries (npm), plus a future nedbd server (RESP-compatible) and a WASM build for browser/edge.

Full design: docs/SPEC.md.


Repo layout

nedb/            pure-Python reference engine (this is what `pip install` ships today)
rust/            production core — nedb-core + nedb-py (PyO3) + nedb-node (napi-rs)
examples/demo.py end-to-end walkthrough
tests/           invariant tests
bench/           embedded micro-bench + Redis head-to-head harness
docs/SPEC.md     architecture specification
.github/         release CI → PyPI + npm on tag

Roadmap

  • Reference engine: log, MVCC, relations, indexes, NQL, Cascade, Merkle
  • Rust core parity + criterion benches + cargo test
  • PyO3 wheels + napi-rs binaries published on tag
  • nedbd server: RESP-compatible + native protocol
  • Similarity-picked deltas + schema-aware columnar transforms
  • On-chain (ITC) root anchoring; WASM build

License

Apache-2.0. Part of the Interchained ecosystem.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

nedb_engine-0.1.3-cp38-abi3-win_amd64.whl (192.0 kB view details)

Uploaded CPython 3.8+Windows x86-64

nedb_engine-0.1.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (318.3 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

nedb_engine-0.1.3-cp38-abi3-macosx_11_0_arm64.whl (276.5 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

File details

Details for the file nedb_engine-0.1.3-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: nedb_engine-0.1.3-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 192.0 kB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for nedb_engine-0.1.3-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 39eea23d86348d6e6a858798ba38942e2fdfe75810e60a5f43b7d8b21059c9d2
MD5 f67cb67305485854ed350651a17c462d
BLAKE2b-256 6b2f40d8cdc1bbdcab51a1bb8edee0dbba94fd713a1642b85011758b9c59d7ca

See more details on using hashes here.

File details

Details for the file nedb_engine-0.1.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for nedb_engine-0.1.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 20df181ff6a918b22eb147c3474e4a54728a47866240d8f65cc5d8770dce5547
MD5 7b0298adc04899bcb1f099e7be4f5e39
BLAKE2b-256 592b73031166fb2728bda2f4ccd83b0174fda1d54a65d947bcdc40d7a0b00bc4

See more details on using hashes here.

File details

Details for the file nedb_engine-0.1.3-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nedb_engine-0.1.3-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 290b996fbf13d79c13f2b61d678c81562d472e77abd5bdd54987b41bab58b9a8
MD5 f753a0a4a28c98ea661cd73b36b04d6b
BLAKE2b-256 9d464ee7c1381bf5a847c7e1dc111a4a45f4e77bbb13fbd8a36bd834dcdfc4fe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page