lndb是基于本地文件系统封装的一套灵活的持久化存储数据库,支持Node、Electron等。html
Github: github.com/yansenlei/l…git
使用文件系统做为基础存储方式,并在上层读写时提供灵活的插件机制,这意味着你能够根据本身的需求定制读写功能,详细信息查看插件机制。github
$ npm install lndb
复制代码
const LNDB = require('lndb')
const db = new LNDB('your/path')
// 初始类型
const pg = db.init('page')
// 写入数据
pg.set('key', {hello: 'lndb!'})
// 读取类型信息
pg.get('key')
// 删除指定key的缓存
pg.remove('key')
// 清空类型下全部缓存
pg.clear()
复制代码
.get(key)
获取到的都是一个文件结构,这是为了能够自由的获取文件信息。 如上面举例那样的Object
类型数据默认存入data.json
中:__lndb__/page/
└── key
└── data.json
复制代码
你经过.get(key)
获取到的数据像这样:{
"data.json": {
"path": "pro/__lndb__/page/key/data.json"
},
"data": {
"hello": "lndb!"
}
}
复制代码
若是使用内置插件内的unzip
这样的插件来存入文件,文件树像这样:__lndb__/page/
└── key
└── files
├── index.html
└── about.html
复制代码
你经过.get(key)
获取到的数据像这样:{
"files": {
"path": "pro/__lndb__/page/key/files/",
"child": {
"index.html": {
"path": "pro/__lndb__/page/key/files/index.html"
},
"about.html": {
"path": "pro/__lndb__/page/key/files/about.html"
}
}
}
}
复制代码
Object
类型,在读取时会默认加载数据信息能够经过get(key).data
获取,若是须要更灵活的操做数据信息可使用lodash
插件。\
/
) 是很敏感的,虽然程序会默认使用__lndb__
来替换敏感符号后再命名文件,可是但愿你在使用的时候注意规避敏感符号以保证程序正常运行。也许默认的读写操做并不能知足你的需求,值得一提的是,Lndb 的核心是能够灵活的扩展读写功能,你能够引入符合标准的插件来替换现有的读写功能:数据库
const demoPlugin = require('demo-plugin')
// add plugin
db.use('demo-plugin', demoPlugin, { "options": true})
const pg = db.init('page')
pg.set('key', { hello: 'lndb!'}, {
name: 'demo-plugin',
options: {}
})
复制代码
name
惟一名称plugin
插件对象options
插件参数name
惟一名称options
插件参数,替换db.use()
时的预制参数如今你能够根据本身的需求编写本身的读取方式,可是你必须遵循必要的规范,插件模板看起来像这样:npm
module.exports = {
install(Ln, params = {}, options = {}){
// 你的自定义操做
// 调用文件获取
Ln.fls.get(id)
// 调用文件写入
Ln.fls.set(params.id, params.value)
// 获取当前数据保存路径
Ln.fls.datapath
return true
}
}
复制代码
目前插件容许你在set()
,get()
上作自定义操做。 插件内是一个对象,对象内函数名为install
,函数带有三个参数:json
Ln
当前读写上下文params
读写时的参数 {id, value}
options
传入插件的配置信息内置插件默认已经存在于系统插件列表中,能够在.get()
.set()
直接使用缓存
读取扩展,使用lodash插件灵活读写,该插件参考了lowdb
的使用方式,这能够很灵活的处理单个文件,具体参考lodash文档bash
const pg = db.init('page')
const _ = pg.get('key', ['lodash'])
_.setState({hello: 'lndb!'}).write()
_.getState() // { hello: 'lndb!'}
_.has("hello").value() // true
_.update("hello", n => n.toUpperCase()).write() // update -> { hello: 'LNDB!!'}
复制代码
.write()
后才写入磁盘
写入扩展,使用unzip写入zip文件时解压到指定目录下,意味着能够经过.get()
方法获取到解压后的路径,即可使用里面的文件函数
pg.set('key', value, {
name: 'unzip'
})
pg.get('key')
复制代码
value
<Buffer> | <Base64>目前还有须要优化的地方,欢迎大佬指正。 若是你有任何意见或者想贡献本项目,欢迎提交Issues或PR。优化
MIT - yansenlei