Deeb - JSON Database
Call it "Deeb," "D-b," or "That Cool JSON Thing"—this ACID Compliant database is perfect for tiny sites and rapid experiments.
Inspired by flexibility of Mongo and light weight of SqLite, Deeb is a tool that turns a set of JSON files into a light weight database.
Deeb's ability to turn groups JSON files into a database allows you to simply open a json file and edit as needed.
The new Deeb Docs site is available now at www.deebkit.com << Check it out
-- or --
Check out the quick start below, or the docs to learn more.
Quick Start
- Add Deeb to your
Cargo.tomlfile
- Optionally, Create a JSON file for your database. Deeb will also create one for you if it does not exist.
Terminology
- Instance: A single .json file managed by Deeb. Each instance can store multiple entities and serves as a lightweight, self-contained database.
- Collection: Similar to a table (SQL) or collection (MongoDB), an array of entity documents of a consistent type within an instance.
- Entity: The
typeof document within a collection, for example User or Comment. - Document: An individual record representing an entity. Documents are stored as JSON objects and represent a single unit of data (e.g., a user, message, or task).
- Create a deeb instance and perform operations.
use *;
use json;
use ;
use Error;
async
Features
- ACID Compliant: Deeb is an ACID compliant database. We get close as we can for a light weight JSON based DB.
- JSON-Based Storage: Deeb uses lightweight JSON files as the underlying data store, providing human-readable structure and seamless integration with any system that speaks JSON.
- Schemaless: Deeb doesn't require a predefined schema like traditional SQL or strongly-typed NoSQL databases. However, by using Rust generics, you can enforce type safety at compile time. This means Deeb stays flexible at runtime, while giving you confidence at build time.
- Transactions: Perform multiple operations as a single unit — commit them all at once or roll them back if something fails.
- Querying: Deeb supports querying, nested queries, and combination queries.
- Indexing: Speed up query performance by creating indexes on single or multiple fields.
Roadmap
- Basic CRUD Operations
- Transactions
- Indexing
- Querying
- Migrations
- Benchmarks
- Associations
- Documentation
- Tests
- Examples
- Logging
- Error Handling
- Improve Transactions - Should return updated object instead of Option
- Implement traits and proc macros to streamline usage -
User.find_many(...)
Deeb
Operations
insert: Insert a new document into the databasefind_one: Find a single document in the databasefind_many: Find multiple documents in the databaseupdate_one: Update a single document in the databaseupdate_many: Update multiple documents in the databasedelete_one: Delete a single document in the databasedelete_many: Delete multiple documents in the database
Queries
eq: Equal - Find documents based on exact match.like: Like - Find documents based on like match.ne: Not Equal - Find documents based on not equal match.gt: Greater Than - Find documents based on greater than match.lt: Less Than - Find documents based on less than match.gte: Greater Than or Equal - Find documents based on greater than or equal match.lte: Less Than or Equal - Find documents based on less than or equal match.and: And - Find documents based on multiple conditions.or: Or - Find documents based on multiple conditions.all: All - Return all documents.associated: Associated - Find documents based on association.
Transactions
Indexing
add_index: Add an index to an entity to improve query performance.
Data Management
add_key: Add a new key to every document in a collectiondrop_key: Drop a key from every document in a collection