LoginSignup
26
26

More than 5 years have passed since last update.

Loki.js: Mongo風APIを持ったクライアントJS/node両対応のストレージエンジン

Last updated at Posted at 2014-11-07

某アプリでストレージどうしようかなーという感じだったので適当に探してて、昨日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アプリとか)
26
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
26