某アプリでストレージどうしようかなーという感じだったので適当に探してて、昨日echo.jsで偶然紹介されてたライブラリ、試してみたらチョット便利だったので紹介。
Lightweight javascript in-memory database: LokiJS
注意: 自分はnode環境下で試したので、以下のサンプルはnode用です。ブラウザでも動くはずです。
特長
Mongo風API。
var DB_PATH = process.env.HOME + '/.loki.json'
var db = new Loki(DB_PATH);
var items = db.addCollection('items');
items.insert({a: 1, b: 2});
items.insert({a: 2, b: 3});
obj = items.findOne({a: 1}) // search by json query
obj.a = 3;
items.update(obj) // update first item
永続化する
var DB_PATH = process.env.HOME + '/.loki.json'
var db = new Loki(DB_PATH);
var items = db.addCollection('items');
items.insert({foo:1, bar: '2'});
items.saveToDisk()
この例だと saveToDiskで ~/.loki.json にデータが書き出されます。
自分も最初勘違いしていたんですが、node環境下でもsaveToDiskしたものは次回起動時に自動的に読み込まれてはいません。
次のように初期化時に読み込む必要があります。
var DB_PATH = process.env.HOME + '/.loki.json'
var db = new Loki(DB_PATH);
var initDb = function(cb){
if(!fs.existsSync(DB_PATH)) {
db.loadDatabase(function(serialized){
db.loadJSON(serialized)
cb();
});
} else {
cb();
}
}
initDb(function(){
// Storages restored
})
雑感
- クライアント-サーバー間で同じコードでストレージを永続化したい時に便利な気がする
- バックエンドはIndexedDb or ファイルストレージ
- Mongoを知ってる自分にはMongo風APIの書き味は良い
- 全部オンメモリに乗ってしまい、毎回大きな一つのjsonで書きだすので、大きなデータの一部を高い頻度書き換えるようなものには向かない気がする
- 中規模のアプリなら問題なさそう(TODOアプリとか)