0.0.7 • Published 3 years ago

maoda-db v0.0.7

Weekly downloads
-
License
-
Repository
-
Last release
3 years ago

introduction

一个扁平化的 kv 的 db,能读写到硬盘里,同时能充分利用内存减少 io 的开销

api

const DiskDb = require("maoda-db");

const db = new DiskDb("./db_dir");

// 异步,确认加载到 memory 了,如果没有,返回 false
db.loadBlock("5a930d801bd54095b0460fbe394e80c5");

// 同步读取,读之前,先 await loadBlock
db.getBlock("5a930d801bd54095b0460fbe394e80c5"); // 返回 block 数据 Promise<{code:0, data}>

// 同步设置
db.setBlock("5a930d801bd54095b0460fbe394e80c5", { age: 100 });

db.on((changedIds) => {
  console.log("监听到以下 block 被改动了", changeIds);
});

db.config(conf); // 配置,通常使用默认就好,见下面配置明细

notice

读了后马上写,必须是同步的,中间不能有其他 await 否则就 bug 了

config

const config = {
  minBlockIdLength: 32, // 最小 id 长度
  maxBlockSize: 100000, // 一个 block 的大小
  checkFreq: 60 * 1000, // 每分钟检查一次保存
  inactiveToSave: 60 * 1000, // 1 分钟不活跃,就存库
};

存储逻辑

持久化到硬盘里

  • 直接存储在硬盘的上,扁平化的放在一个目录里,文件名如:029882ab6ce3445f847b24e9784d197e-maoda

内存缓冲

  • 为了避免内存过大,定期从缓冲中移除并存入内存中,我们为每个 block 带上读写时间戳,按照时间戳早的,优先存入硬盘;
  • 上述的删除缓存入内存的事情,我们每分钟做一次
  • 我们也提供一个能力,全量写入硬盘,主要应对用户需要重启的情形
0.0.7

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago