一分鐘入門
lowdb 是一個基于 Lodash 的小型本地 JSON 數(shù)據(jù)庫。神器卤橄!
- 可以語義化較強的查詢/操作方法枉圃,對指定的文本文件或者瀏覽器 LocalStorage 內(nèi)容進行精確的查詢讀寫操作
- 基于 Lodash, 支持大量的處理方法
- 支持 JSON 格式文本及任意可被轉(zhuǎn)換為 JSON 結構的文本數(shù)據(jù) (xml/yaml/toml/ini)
具體使用請參照 Github: https://github.com/typicode/lowdb
數(shù)據(jù)內(nèi)容
{
"posts": [
{ "id": 1, "title": "lowdb is awesome" },
{ "id": 2, "title": "sooooooo good" }
],
"user": {
"name": "typicode"
},
"count": 1
}
常用操作
// Node.js
// npm install lowdb
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const adapter = new FileSync('db.json')
const db = low(adapter)
// Add a post
db.get('posts')
.push({ id: 1, title: 'lowdb is awesome'})
.write()
// Set a user using Lodash shorthand syntax
db.set('user.name', 'typicode')
.write()
// Increment count
db.update('count', n => n + 1)
.write()
// Sort the top five posts.
db.get('posts')
.filter({published: true})
.sortBy('views')
.take(5)
.value()
// Get post titles.
db.get('posts')
.map('title')
.value()
// Get the number of posts.
db.get('posts')
.size()
.value()
自定義 serialize/deserialize 函數(shù)支持更多格式
const adapter = new FileSync('array.xml', {
defaultValue: [],
serialize: (array) => toXMLString(array),
deserialize: (string) => fromXMLString(string)
})
使用場景
之前使用 JavaScript 寫過很多小工具乾闰,包括文件格式轉(zhuǎn)換绣的,簡單數(shù)據(jù)處理速客,文檔生成戚篙,代碼生成等等。
這種輕量級的處理場景下本地數(shù)據(jù)存儲簡直是剛需挽封,在 Node 環(huán)境中我通常使用 JSON 文件來進行存儲已球,以下是某產(chǎn)品文檔中的一則 FAQ JSON 格式數(shù)據(jù)示例臣镣,生成文檔的時候我需要指定 category
提取相應的信息辅愿,指定 rank
來進行文檔排序:
{
"faq": [
{
"title": "EMQ X中ssl resumption session的使用",
"category": "使用教程",
"tag": ["TLS"],
"content": "修改emqx.conf配置中的 reuse_sessions = on 并生效后。",
"rank": 0
},
{
"title": "MQTT 客戶端斷開連接統(tǒng)計",
"category": "運維管理",
"tag": ["指標"],
"content": "執(zhí)行 `emqx_ctl listeners`忆某,查看對應端口下的 `shutdown_count` 統(tǒng)計点待。",
"rank": 100
},
{
"title": "EMQ X 的百萬連接壓力測試的場景是什么?",
"category": "運維管理",
"tag": ["性能測試"],
"content": "在EMQ 2.0版本發(fā)布的時候弃舒,由第三方軟件測試工具服務提供商 [XMeter](https://www.xmeter.net) 執(zhí)行了一次百萬級別連接的性能測試癞埠。...",
"rank": 98
}
]
}
使用前
很長一段時間里我在 Node.js 中采用 JavaScript 的數(shù)組查找、過濾和排序來完成數(shù)據(jù)篩選聋呢,在數(shù)據(jù)變更之后使用寫文件的方式再次寫入磁盤苗踪。
const { faq } = require('./datasource.json')
// 過濾
const deployFAQ = faq.filter($ => $.category === '運維管理')
// 以下還有排序代碼...
基于如此復雜且不清晰的操作流,我多次思考糾結我是否需要一個數(shù)據(jù)庫來處理這部分業(yè)務削锰,哪怕是 SQLite 都行通铲,但是引入數(shù)據(jù)庫后我又不得不再開發(fā)一個 Admin 界面來進行增刪查改。
使用后
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const adapter = new FileSync('db.json')
const db = low(adapter)
db.defaults({ faq: [] })
.write()
// Filter and Sort by rank.
const faq = db.get('faq')
.filter({ category: '運維管理' })
.sortBy('rank')
.value()
console.log(faq)
項目計劃
文章首發(fā)
物聯(lián)網(wǎng) IoT 應用集成器贩、前端倒騰 W I v 的博客 https://wivwiv.com