/okeydb

Pure JavaScript NoSQL database with no dependency, written by node.js.

Primary LanguageJavaScriptMIT LicenseMIT

OkeyDB

OkeyDB is a light-weight document oriented NoSQL database based on local file-system and IndexedDB.

Pure JavaScript NoSQL database with no dependency. IndexedDB, Flat file, JSON based document database, running in Web Browser and Node.js.

Its api is compatible with the aircode database API.

Features

  • Available in Web Browser and Node.js.
  • Use IndexedDB in Web Browser.
  • Use JSON file storage in Node.js, no need to install any database.
  • A convenient and easy-to-use chained API that returns Promises.
  • Powerful combined conditional queries.

Usage

In Web Browser

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script type="module">
    import { OkeyDB } from 'https://unpkg.com/okeydb/dist/okeydb.browser.mjs';

    function* pollItem(array) {
      let current = 0;
      while(true) {
        yield array[current++ % array.length];
      }
    }

    const db = new OkeyDB();
    const table = db.table('employees');

    await table.where().delete();
    const genTeam = pollItem(['juejin', 'segmentfault', 'aircode']);
    const genPosition = pollItem(['developer', 'designer', 'manager', 'intern']);

    const employees = [];
    for(let i = 0; i < 10; i++) {
      employees.push({
        id: i,
        team: genTeam.next().value, 
        position: genPosition.next().value,
        age: 20 + i * 2,
        avaliablePositions: ['developer', 'designer', 'manager', 'intern'],
      });
    }
    await table.save(employees);

    console.table(await table.where({team: 'juejin'}).find());
  </script>
</body>
</html>

In Node.js

import {OkeyDB} from 'okeydb';

const db = new OkeyDB();
const personTable = db.table('person');
const students = [];

function randomScore(low = 0, high = 100) {
  return low + Math.floor(Math.random() * (high - low + 1));
}

for(let i = 0; i < 1000; i++) {
  const student = {name: `student${i}`, score: randomScore()};
  students.push(student);
}
await personTable.save(students);

// find all students that score >= 60
const result = await personTable.where({score: db.gte(60)}).find();
console.log(result);

Database API

Limits

You can use OkeyDB in your web app as client database.

  • But due to the following reasons, it is NOT recommended for use in a Node.js production environment:
    • This is just a single-instance text database and does not have the ability to scale across multiple servers.
    • Without using schema constraints and indexes(not implemented yet), the storage performance is limited by the usage of JSON.parse and JSON.stringify. Additionally, the query efficiency is limited by the size of the data.

If you want to deploy your code to a production environment, you can seamlessly migrate to AirCode and use aircode.db.