LowDB - 基于Node的纯Json文件数据库


发布者 1518409521  发布时间 1409063011715
关键字 JS开源  Node.JS 
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许可下发布的。




回复 (5)
  • #
  • #1 f2e.be 1409714758249

    爽啊,sqlite也不用了

  • #2 梅页冬 1409721822534

    @f2e.be #0

    一直用redis

  • #3 kindle 1409904036806

    @梅页冬 #1

    test

  • #4 葛务礼 1447171593310

    支持G级么

  • #5 薛叼氏 1471831141995

    @葛务礼 #3

    不大可能支持G级吧,本来设计就是用来应付超小规模数据的

微信扫码 立即评论