lowdb 前后端轻量级数据库

@eyasliu 2016-05-15 15:39:36发表于 eyasliu/blog 前端

what is lowdb

项目地址:https://github.com/typicode/lowdb

当我第一次接触到 lowdb 的时候,被它的方便小巧,使用简单的吸引住了。lowdb 是一个轻量级的数据库。可用于服务端与前端。在服务端,以一个json文件形式永久存储数据。在前端,可使用 localStorage 永久存储。另外,无论前后端,都可以使用内存作为存储。

why lowdb

其实喜欢这个工具的原因,是有以下几点:

  • 操作api 是完全基于 lodash 的,lodash API 非常强大与方便,相当于有了一个强大且熟悉的 ORM
  • 数据库轻巧,基本不怎么消耗内存空间
  • 体积小巧,lodash是我一直使用的工具,添加了lowdb后打包文件只增加了 2.x KB 的体积

usage

server 端

server 使用一个 json 文件作为数据库

import low from 'lowdb';
import storage from 'lowdb/file-sync';
// 初始化
const db = low('db.json', {storage});
// 数据库增删改查
db('posts').push({title: 'lowdb is awesome'})

前端

在前端使用localStorage 的一个键值对作为存储数据库

// ...
import storage from 'lowdb/broser';
// ...

内存

lowdb 还可以运行在内存中,前后端都可以用

import low from 'lowdb';
const db = low();
// ...

缺点

尽管 lowdb 很酷炫,但是它依然也有他的不足

  • 速度慢,它毕竟只是一个文件,当然比不过一个数据库系统的速度
  • 不支持索引与事务等等数据库功能,原因同上
  • 效率低下,每次的写入和读取,其实是对整个数据库库进行操作。比如修改一个地方,它是先把整个数据库数据序列化,在重新对插入字符串到库中。
  • 因为 lodash api 原因吧,它好像没有批量操作的接口

尝试 lowdb 与 indexedDB 的结合

当我第一次体验了lowdb的便利性,我就想把前端的 localStorage 驱动换成 indexedDB,因为indexedDB 是类似于 NoSql 的数据库,拥有事务、索引,存储空间非常大,存储类型众多,api 纯异步等原因。当我在网上搜索的时候,发现根本没有相关的库,我当时就想自己编写一个,但是最后还是失败了。网上现在没有这种库是有道理的,因为这跟lowdb的工作方式有关,它只能操作字符串当做数据库存储,所以 indexeddb 的驱动做出来,效率、速度等方面将会比 localStorage 更糟糕。