⚡ NomDB
High-Performance In-Memory Key-Value Database & Server in Pure Python
NomDB is a Redis-inspired in-memory database built from scratch using Python and asyncio.
Zero Redis wrappers. Zero C dependencies. Run as a standalone TCP Server, an Embedded Library (import nomdb), or manage via the Built-in Web Dashboard.
🎯 Key Capabilities
- 🌐 Full RESP2 / RESP3 Protocol Compatibility: Works with standard Redis clients and the native NomDB SDK.
- 📦 Three Flexible Execution Modes:
- Standalone TCP Server (
nomdb-server --port 6379) - Embedded Python Library (
import nomdb; db = nomdb.open_db("app.db")) - Self-Hosted Python Server (
nomdb.serve(port=6379))
- Standalone TCP Server (
- 🎨 Modern Web Management Dashboard: Inspect keys, edit data, run queries, and monitor live memory usage in real time (
nomdb-dashboard). - 🌲 Custom Native Data Structures: Strings, Hashes, Lists, Sets, and pure Python SkipList with $O(\log N)$ rank/range operations for Sorted Sets.
- ⏳ Dual Active & Lazy Expiration: High-precision timestamp min-heap background worker + on-access eviction.
- 💾 Dual Persistence & Crash Recovery: AOF (
always,everysec,no) with rewriting + Binary Snapshotting (RDB) with SHA-256 integrity checks. - 🔒 Transactions & Optimistic Concurrency:
MULTI,EXEC,DISCARD, and versionedWATCH/UNWATCH. - 📡 Pub/Sub & Replication: Channel and pattern broadcasting, circular replication ring buffer, and
PSYNCpartial resynchronization. - 🔗 16,384 CRC16 Cluster Routing: Hash slot allocation,
{hash_tag}colocation, and-MOVEDredirection.
📥 Installation
Install NomDB via pip:
pip install nomdb
Or install directly from GitHub:
pip install git+https://github.com/TypeAbdullah/NomDB.git
Or clone and install locally for development:
git clone https://github.com/TypeAbdullah/NomDB.git
cd NomDB
pip install -e .
🚀 Quickstart Guides
1. Embedded Mode (Zero Server Setup, Stored in Local File)
Use NomDB like SQLite — just import and store in any local file:
import nomdb
# Open local database file (automatically creates data.db)
db = nomdb.open_db("data.db")
# Strings & Numbers
db.set("user:101", "Noman")
print(db.get_str("user:101")) # "Noman"
db.incr("page_views", 1) # 1
# Hashes (Objects / Key-Value Mappings)
db.hset("user:101:profile", mapping={"name": "Noman", "role": "Architect"})
print(db.hgetall("user:101:profile"))
# Lists (Queues & Feeds)
db.rpush("tasks", "send_email", "generate_report")
print(db.lrange("tasks", 0, -1))
# Sets (Unique Tags)
db.sadd("tags", "python", "database", "fast")
print(db.smembers("tags"))
# Sorted Sets (Leaderboards backed by SkipList)
db.zadd("leaderboard", {"player_1": 1500.0, "player_2": 2400.0})
print(db.zrange("leaderboard", 0, -1, with_scores=True))
# Close & save snapshot
db.close()
2. Host as a Dedicated TCP Server
Option A: Run from Command Line
nomdb-server --host 127.0.0.1 --port 6379 --data-dir ./data
Option B: Host Programmatically in Python
import nomdb
# Host directly in your python backend / microservice
nomdb.serve(host="0.0.0.0", port=6379, data_dir="./data")
Option C: Host in Background Thread (Inside existing Python App)
import nomdb
# Runs the database server in a background daemon thread
server = nomdb.serve_background(port=6379)
# Now your application can connect to it!
client = nomdb.connect("nomdb://127.0.0.1:6379/0")
client.set("hello", "world")
3. Connect via Database URLs
NomDB provides standard database URL formatting:
import nomdb
# Connect to TCP server
client = nomdb.connect("nomdb://:secret@127.0.0.1:6379/0")
client.set("key", "value")
# Connect to embedded local database
db = nomdb.connect("nomdb://./app.db")
db.set("key", "value")
4. Interactive CLI
Launch the interactive REPL with color highlighting:
nomdb-cli --host 127.0.0.1 --port 6379
127.0.0.1:6379> SET user:100 "Noman"
OK
127.0.0.1:6379> GET user:100
"Noman"
127.0.0.1:6379> HSET profile:100 age 28 role "Staff Engineer"
(integer) 2
127.0.0.1:6379> HGETALL profile:100
1) "age"
2) "28"
3) "role"
4) "Staff Engineer"
🌐 Web Management Dashboard
NomDB includes a built-in UI for inspecting and managing database keys:
nomdb-dashboard --port 8080 --db-port 6379
Open http://localhost:8080 in your browser:
- 🔍 Keyspace Explorer: Search keys, filter by type (String, Hash, List, Set, ZSet), inspect TTL and memory size.
- 📝 Data Editor: View and update values, tabular JSON/Hash viewers, list index inspector, and sorted set member scores.
- ⚡ Live Performance Monitor: Real-time memory footprint, ops/sec throughput counter, and total keys.
- 💻 Interactive Query Console: Execute any NomDB/Redis command directly in the browser.
📊 Performance & Stress Test Benchmark
Results from writing 55,000+ entries across Strings, Hashes, Lists, Sets, and Sorted Sets (scripts/stress_test_large_data.py):
| Metric | Measured Value | Threshold Target | Status |
|---|---|---|---|
| Write Throughput | 250,471 ops/sec | > 10,000 ops/sec | 🟢 PASS |
| Write Latency (p50) | 0.0019 ms (1.9 µs) | < 20 ms | 🟢 PASS |
| Write Latency (p99) | 0.0069 ms (6.9 µs) | < 20 ms | 🟢 PASS |
| Read Throughput | 537,828 ops/sec | > 50,000 ops/sec | 🟢 PASS |
| Read Latency (p50) | 0.0011 ms (1.1 µs) | < 20 ms | 🟢 PASS |
| Read Latency (p99) | 0.0053 ms (5.3 µs) | < 20 ms | 🟢 PASS |
🗂 Data Structures & Time Complexity
| Command | Data Structure | Time Complexity | Implementation Details |
|---|---|---|---|
GET / SET |
String | $O(1)$ | Direct keyspace dictionary lookup |
INCR / DECR |
String | $O(1)$ | Fast in-place integer arithmetic |
HGET / HSET |
Hash | $O(1)$ | Hash table field lookup/insertion |
HGETALL |
Hash | $O(N)$ | Field iteration where $N$ is total fields |
LPUSH / RPUSH |
List | $O(1)$ | Head/Tail insertion on collections.deque |
LPOP / RPOP |
List | $O(1)$ | Head/Tail pop on collections.deque |
SADD / SREM |
Set | $O(1)$ | Native hash set insertion and deletion |
SISMEMBER |
Set | $O(1)$ | Hash set member presence check |
ZADD |
Sorted Set | $O(\log N)$ | Custom SkipList level link updates |
ZRANK / ZREVRANK |
Sorted Set | $O(\log N)$ | SkipList traversal using span pointers |
ZSCORE |
Sorted Set | $O(1)$ | Direct lookup via secondary hash table |
🧪 Running the Test Suite
NomDB has an extensive test suite covering unit tests, end-to-end integration, persistence recovery, replication, cluster hash slots, and protocol fuzzing:
python -m pytest -v
============================= 56 passed in 1.77s ==============================
🐳 Docker Deployment
Run NomDB server in Docker:
docker build -t nomdb .
docker run -p 6379:6379 -v $(pwd)/data:/app/data nomdb
Or spin up a Primary + Replica setup using Docker Compose:
docker compose up --build
📜 License
NomDB is open source software released under the MIT License.
Metadata
Release files for nomdb 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| nomdb-0.1.1.tar.gz | 73.2 kB | With provenance | Details for nomdb-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| nomdb-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for nomdb-0.1.1-py3-none-any.whl |
Total release size: 168.3 kB
Release files / nomdb-0.1.1.tar.gz
| Download URL | nomdb-0.1.1.tar.gz |
|---|---|
| Size | 73.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f32b8ac5b9f5e90f31538754dded6d3ef0c87257d511674e64419910e19c4c3f
|
|
BLAKE2b-256 checksum How to use checksums |
c15edc74d9ba124cf44b8ab1dac3d2e595f38f3b54c8b6689628f74bd63be001
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logRelease files / nomdb-0.1.1-py3-none-any.whl
| Download URL | nomdb-0.1.1-py3-none-any.whl |
|---|---|
| Size | 95.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
02c44e5a9f71b419a15be9accb631c40816cfcf7dee1b4077029c65e24b118e5
|
|
BLAKE2b-256 checksum How to use checksums |
a909874eb2a12b632f6324124bf4aed022f27d538129ec5c38db768e6550e815
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logSecurity for nomdb 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for nomdb-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.