LokiJSのバージョン1.4がリリースされた。LokiJSは、パフォーマンスに焦点を当てたインメモリ型のJavaScriptdデータベースである。
北欧神話の神の名を付けられたLokiは、MondoDB同様にコレクションをサポートする。高速なドキュメントアクセスのためのフィールドインデクシングの機能も持っている。 また、JSON形式でのデータ保存が可能である。これは、データの可搬性を向上させる。
このプロジェクトの開発者、Joe Minichino氏(自らを"Mis-Chief"("いたずら者"と"プロジェクトの長"をかけている)と呼ぶ)は、LokiについてInfoQに語ってくれた。 彼によると、今回のメジャーリリースは、"数々のバグを解消し、大きなパフォーマンス向上を果たした"という。
Minichino氏
いくつかのクエリオペレータ(
$where
、$ne
、$len
、$keyin
、$nkeyin
、$type
、$contains
、$containsAny
等)が追加、改善されました。 さらに、非常に使い勝手の良い機能が、time-to-live(TTL)です。この機能は、一定期間アクセスされていないオブジェクトを自動的に削除します。 この機能は、セッションの保存やゲーム等で便利に使えるでしょう。
Lokiはもともと、Phonegap/Cordovaアプリケーションでのデータ保管を目的をとして開発が始まった。 このとき、SQLiteでは大げさすぎる、とMinichino氏が判断し、Lokiが必要になったのである。 もしあなたがJavaScriptを使い、JavaScriptのオブジェクトやオブジェクトリテラルをテーブル形式に変換するコードを書くことになったら、大変な思いをするだろう、とMinichino氏は言う。 Lokiは、オブジェクトを受け取り、ローカルファイルシステム上のJSON形式ファイルにシリアライズするコンポーネントとして作られている。 開発者は、以下のようなワークセッションによって、データをリロードする。
Loki 1.4では、NativeScriptアプリケーション用のアダプタが追加されている。 以下のコードはその一例である。
// Requirements
var fs = require("file-system");
var Loki = require("./node_modules/lokijs/src/lokijs.js");
var LokiNativeScriptAdapter = require("./node_modules/loki-nativescript-adapter/loki-nativescript-adapter.js");
// Setup Loki
var path = fs.path.join(fs.knownFolders.currentApp().path, "database.db");
var db = new Loki(path, {
adapter: new LokiNativeScriptAdapter()
});
// Save some movies
var movies = db.addCollection("movies");
movies.insert({ title: "Ghost Busters", year: 1984 });
movies.insert({ title: "Ghost Busters II", year: 1989 });
movies.insert({ title: "Ghost Busters", year: 2016 });
console.log(movies.data);
db.saveDatabase();
// Load and find some movies
db.loadDatabase({}, function() {
var movies = db.getCollection("movies");
console.log(movies.find({ title: "Ghost Busters" }));
});
今回のメジャーリリースは、Minichino氏によると、3人の開発者による"丁寧な仕事"により出来上がっている。 obeliskos氏、aleandernst氏、VladimirTechMan氏である。 彼らは、クエリや動的ビューに対するLoki内部の改善に対して的確に対応し、パフォーマンスを劇的に改善させた。
LokiJSのロードマップとしてサーバサイド永続化アダプタが挙がっている。 現時点では、全データが1ファイルとしてシリアライズされている。 ファイルは保存の度に上書きされる。
数GBのデータベースを扱うためにLokiJSを使う開発に対しても、1つの更新ごとにファイルのリライトが発生する。 ブラウザやモバイル端末での、数GBのデータベースでは問題にはならないだろう。 保存処理は、数msecの時間の問題だからである。 一方で、バックエンドとしては、増分永続化アダプタが必要だ、とMinichino氏は言う。 方式として、ネットワーキングとレプリケーションのためにhttp/tcpラッパーを使用するものが考えられている。
LokiJSはMITライセンスにより公開されている。 InfoQ読者の内、本プロジェクトに積極的に協力したい方は、GitHubにサインアップし、プルリクエストや新しい課題を出してほしい。 LokiJSチームは、苦労した経験を持つ方からの、建設的な批判を熱心に聞いてくれる。
Rate this Article
- Editor Review
- Chief Editor Action