https://github.com/beenotung/compact-db
A lightweight embedded database inspired from leveldb but operate in sync mode.
https://github.com/beenotung/compact-db
embedded-database file-based-database key-value nodejs typescript
Last synced: 5 months ago
JSON representation
A lightweight embedded database inspired from leveldb but operate in sync mode.
- Host: GitHub
- URL: https://github.com/beenotung/compact-db
- Owner: beenotung
- License: bsd-2-clause
- Created: 2020-09-08T08:41:12.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-03-01T12:50:06.000Z (over 3 years ago)
- Last Synced: 2024-12-27T03:05:17.524Z (5 months ago)
- Topics: embedded-database, file-based-database, key-value, nodejs, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/compact-db
- Size: 21.5 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# compact-db
A lightweight embedded database inspired from leveldb but operate in sync mode.
[](https://www.npmjs.com/package/compact-db)
## Why compact-db?
To free your code from callback hell and async await.## What is it not good for?
If your application need to serve for multiple users / concurrent tasks, and you favour average "concurrent performance" over "raw throughput", you may better adopt leveldb or other asynchronous database.## Features
- [x] sync mode operation
- [x] fully tested (with jest)
- [x] efficient disk space consumption (with auto compaction)
- [x] support atomic, batched operations
- [x] fault tolerant to program crash
- [x] simple interface (similar to Map)
- [x] small code base (~250 loc)## Usage
Import and create database instance:
```typescript
import { createDB } from 'compact-db'let db = createDB({ path: 'data' })
```Database options and supported methods (from dist/db.d.ts):
```typescript
export type Key = string | numberexport declare function createDB(options: {
path: string// default 8 MB
batch_read_size?: number// default 2 (compact will occur when the file size of LOG file is twice as DATA file)
compact_ratio?: number
}): {
get: (key: Key) => T | undefined;
set: (key: Key, value: any) => void;
del: (key: Key) => void;
clear: () => void;
batch: (batch: Batch) => void;
keys: () => string[];
entries: () => any[][];
values: () => any[];
};
```Type signature of batch operations:
```typescript
export declare type Batch = Op[];
export declare type Op = {
type: 'del';
key: Key;
} | {
type: 'set';
key: Key;
value: any;
} | {
type: 'clear';
};
```Details refer to the [test spec](./test/db.test.ts)
## License
This project is licensed with [BSD-2-Clause](./LICENSE)
This is free, libre, and open-source software. It comes down to four essential freedoms [[ref]](https://seirdy.one/2021/01/27/whatsapp-and-the-domestication-of-users.html#fnref:2):
- The freedom to run the program as you wish, for any purpose
- The freedom to study how the program works, and change it so it does your computing as you wish
- The freedom to redistribute copies so you can help others
- The freedom to distribute copies of your modified versions to others