[Titanium Mobile] JSONDBを使ってみた

11月に iPhone用RSSリーダー「Walls」をリリースしたのですが、最重要であるsqliteの処理があまりにも遅すぎてTitaniumでの開発を断念しかけていました。が、twitter でJSONDBなるモジュールがあるとの情報を得たので、試しにと思い使ってみました。

» JSONDB – NoSQL DB for your mobile apps! « Appcelerator Developer Center

モジュールは下記から。円高なので $14.99 = ¥1,182 でした。安いw

» JSONDB by IRL Gaming Pty Ltd | Appcelerator

■どうやって使うの?

リファレンスはもちろん英語です。忘れそうなのでおおまかな書き方をまとめました。
より詳細な記述方法などは、下記などから。
https://github.com/irlgaming/jsondb-public

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// DB open 的なことをしたり
var JSONDB = require('com.irlgaming.jsondb');
JSONDB.debug(true); // true でコンソールにログが出ます。デフォルトは false。
var collection = JSONDB.factory('nameSample', 'secretSample');

// データを格納したり
collection.save({
    'data1':'さんぷる',
    'data2':'さんぷる2',
    'data3':'さんぷる3',
    'data4':10,
    'data5':20,
    'data6':30,
    'data7':1000
});

// データを削除したり
collection.remove({{$クエリ}:{$条件}});

// 更新したり
collection.update({{$クエリ}:{$条件}},{$更新するデータ}})

// データの追加/更新/削除をしたら必ずコミットしたり
collection.commit();

// データを検索したり
collection.find({{$クエリ}:{$条件}})

// 格納されているデータ数をカウントしたり
collection.getAll().length;

// 条件を指定してデータ数をカウントしたり
collection.count({{$クエリ}:{$条件}});

// sqliteと同じ感覚で書けます。

■sqliteから移行するのが面倒じゃね?

と思っていたのですが、ほぼsqliteと同じような書き方なため意外と早く出来ました。
個人的にはソースの変更は容易だと思われます。
実際、リファレンスを読みながらでも1時間かからずに変更できました。

■実際使ってみてどうなのか

sqliteに比べると速度がめちゃくちゃ早いです。まぁ当たり前ですが・・・体感だと100倍位(あばうと)でしょうかw
一番差が出たのは、検索(sqliteだとSELECT文の時)で条件を2,3個指定した時の速度でした。
あとでこれちゃんと測ろう。。。

もうsqliteには戻れません。有料ですが、jsonでデータを扱うのであれば必ず買うべきモジュールだと思いました。
また、トランザクション処理ではないため、ループで大量のデータを追加しながら、同時にfindでデータを取得することができるのが、個人的に一番助かりました。

■実機で動かすときにエラー

今回はじめてモジュールを追加したのですが、実機でうまく動かずハマりました。
プロジェクトをクリーンしなきゃだめだったんですね。。。
twitterで、できねー!って騒いでたら、 @k0sukey さんが大変親切に助言してくださり、早急に解決できました。(ありがとうございました!)

■JSONDBに書きなおして速度が劇的に早くなった。で、アップデートは・・・

Waiting for Review 4日目 (´;ω;`)ウッ…

  • http://twitter.com/hiroki_y hiroki

    ありがとうございます。あまりの速度の違いに興奮してブログ書きました(汗
    デフォルトで組み込まれててもおかしくないレベルのモジュールだと思います。

  • http://twitter.com/motoy3d motoy3d

    なるほど。参考になりました(^-^)
    有料でも、いいモジュールは使うべきですよね。