LowDB 基于Node的纯Json文件数据库
- 无需服务器
- 快速
- 事件触发
- 来自Lo-Dash的50多种方法
LowDB 基于Lo-Dash 中间件,这使它无需服务器,与其他通常基于 MongoDB API 的数据库相比独特而不寻常。
LowDB支持 JSON Server 和 JSONPlaceholder.
如果你需要浏览器类似的的功能,可以查看Underscore.db
用法
var low = require('lowdb')
low('songs').insert({title: 'low!'})
数据库自动创建并以一种可读的格式保存到db.json。
{
"songs": [
{
"title": "low!",
"id": "e31aa48c-a9d8-4f79-9fce-ded4c16c3c4c"
}
]
}
查询数据,您可以使用Lo-Dash方法。
var songs = low('songs').where({ title: 'low!' }).value()
或着使用LowDB等效短语法。
var songs = low('songs', { title: 'low!' })
也可以监控变化。
low.on('add', function(name, object) {
console.log(object + 'added to' + name)
})
标准,
查询 x 1000 0.837708 ms
更新 x 1000 4.433322 ms
插入x 1000 11.78481 ms
删除x 1000 24.60179 ms
在你的机器上运行这个标准,复制这个项目并且运行npm install和 npm run install
应用程序接口
low(collection)
返回或者创建一个Lo-Dash包裹数组。
然后,您可以使用这些方法: where, find, filter, sortBy, groupBy, ...和来自Underscore.db的方法。
var topFiveSongs = low('songs')
.where({published: true})
.sortBy('views')
.first(5)
.value();
var songTitles = low('songs')
.pluck('titles')
.value()
var total = low('songs').size()
如果你只是想修改数据库,不返回数组或对象, 您可以省略.value().
low.save([path])
保存数据库到path或low.path。默认情况下是db.json。
low.path
数据库的位置。在默认情况下是db.json。
low.path = '/some/path/file.json'
autoSave
设置为false来禁用保存修改,这将LowDB变成只读内存数据库。默认情况下是true。
low.autoSave = true
事件
add(collectionName, insertedDoc)
update(collectionName, updatedDoc, previousDoc)
remove(collectionName, removedDoc)
change()
短语法
LowDB短语法只覆盖最常见的操作但允许您编写非常简洁的代码。
low('songs', id)
// == low('songs').get(id).value()
low('songs', {title: 'low!'})
// == low('songs').where({title: 'low!'}).value()
low('songs', {title: 'low!'}, +1)
// == low('songs').insert({title: 'low!'}).value()
low('songs', {title: 'low!'}, -1)
// == low('songs').removeWhere({title: 'low!'}).value()
low('songs', id, -1)
// == low('songs').remove(id).value()
low('songs', id, {title: 'new title'})
// == low('songs').update(id, {title: 'new title'}).value()
low('songs', {published: false}, {published: true})
// == low('songs').updateWhere({published: false}, {published: true}).value()
常见问题
数据库是如何保存的?
当你调用insert, update, updateWhere, remove, removeWhere, 数据库只是保存到磁盘。写操作是同步的,但字节流的方式效率很高。
这里有一个例子来说明:
low('posts').insert({ title: 'foo' }) // database is persisted synchronously
low('posts').insert({ title: 'foo' }) // database is not persisted
low('posts').insert({ title: 'foo' }) // database is not persisted
// 100 ms later database will be persisted synchronously
所以在1秒内,LowDB会做最多10个同步写操作。
LowDB的未来版本可能是完全异步的。
它支持并发吗?
是的。Node是单线程的并且更新数据库是同步写的,没有发生并发性问题的风险。
许可证
LowDB是在MIT许可下发布的。
爽啊,sqlite也不用了
@f2e.be #0
一直用redis
@梅页冬 #1
test
支持G级么
@葛务礼 #3
不大可能支持G级吧,本来设计就是用来应付超小规模数据的