A tiny and fast in memory database with relationships support focused in simplicity, small footprint and lib size (for browser and node js)
Tiny-js-db was born from a need for working with large relational data in memory where each byte of memory saved matters, GC must works masterfully and indexes are essential for performance... all with the smallest footprint and boilerplate possible.
There are 3 ways to install tiny-js-db:
Download the file tiny-js-db.min.js, add it to your project folder and add a script tag into your html or js file:
<script src="tiny-js-db.min.js"></script>
Just add a script tag pointing to a CDN :
<script src="https://cdn.jsdelivr.net/npm/tiny-js-db@latest/tiny-js-db.min.js"></script>
npm install tiny-js-db --save
const TinyJsDb = require("./");
// create a new database instance
const Db = new TinyJsDb();
// create tables
const heroes = Db.createTable("heroes");
const abilities = Db.createTable("abilities");
// set relationships
Db.createRelationship(heroes, abilities);
// add records to the database
heroes.insert({ name: "Thor", age: 437 });
heroes.insert({ name: "Hulk", age: 40 });
// add record and get its instance
const ironMan = heroes.insert({ name: "Iron Man", age: 42 });
abilities.insert({ type: "Super force" });
abilities.insert({ type: "Resistance" });
abilities.insert({ type: "Money" });
abilities.insert({ type: "Thunder" });
// retrieve a record by filter
const thor = heroes.getFirst({ name: "Thor" });
// retrieve a record by id
const thunder = abilities.getById(3);
// add a relation between records - using its instances
heroes.addRelation(thor, "abilities", thunder);
// add a relation between records - using its ids
heroes.addRelation(1, "heroes", 1);
// relations can be set from both sides
abilities.addRelation(2, "abilities", ironMan);
// get a record with its relationships
const item = heroes.getById(1, ["abilities"]);
console.log(item);
/*
{
_id: 1,
name: 'Hulk',
age: 40,
abilities: [ { type: 'Resistance', _id: 1 }, { type: 'Super force', _id: 0 } ]
}
*/
const myHeroes = heroes.getAll();
console.log(myHeroes);
/*
[
{ name: 'Thor', age: 437, _id: 0 },
{ name: 'Hulk', age: 40, _id: 1 },
{ name: 'Iron Man', age: 42, _id: 2 }
]
*/
Click here to view a detailed API documentation:
IMPORTANT: This project is in the early stages of development, so I suggest not use this library in a production or serious project/product. The first stable version will be released soon, including basic documentation and usage examples (in this readme)
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. One point that is very easy to contribute is chose a function, do some benchmarking and change the code to accomplish the most performance possible.
Please make sure to update tests as appropriate.
module | description |
---|---|
lodash/fp | Great library that provides many useful functionalities to deal with arrays, objects, collections, etc. use |
for now, lodash/fp is the only external dependency in this project.
MIT. Copyright (c) Herminio Brustulim.