jsDB - 一个实现btree索引的小玩具
简单实现一个基于btree索引的小玩具,文件存放磁盘中,实现简单的查询和插入功能,代码还有点乱;
Requirements
- node(>= v9.0.0)
- lru-cache(用来做page缓存)
Quick Start
npm install fudb;
- 创建一个db并且写入数据的操作:
const fudb = ; const fn = async { const db = await fudb; for let i = 0; i < itemNum; i += 1 await db; // eslint-disable-line await db; } ;
这样就在该项目目录下生成一个js目录,里面有连个文件
js.db
和js.index
,分别为原始数据文件,索引文件;注意一点由于简化实现,添加数据要小于一定值(1kb);
- 打开一个该类型的文件:
const fudb = ; const fn = async { const db = await fudb; for let i = 0; i < 100; i += 1 const result = await db; console; if !result throw 'error!'; };
- 范围查询:
const fudb = ; const fn = async { const db = await fudb; db;};
注意查询的时候必须要有{lt:, gt:},暂不支持单边的查找,以后慢慢支持;
range
函数返回的是一个Promise
; 且该方法是先统计btree的id的个数,并未实际获取真实的rawdata,该Promise
返回的数据为:
{} // 返回range查询的item总数,这里是统计的id的数量 cells: id: 'xxx'// 返回为包含id的对象数组 fetch: async {} // 通过索引id去加载rawdata
ToDo List
- 实现删除的操作(进行中)
- 不限制1kb的数据大小
- 实现page缓存处理,不用
lru-cache
依赖 - 完善代码