データストアに限りませんが、mBaaSを使う際にはネットワークアクセスが必要です。そのため、いかにネットワーク通信量(回数、データ量)を減らすかがアプリ高速化の鍵になります。
今回はデータストアにおけるデータの持ち方と、その速度比較を紹介します。
データの持ち方
今回は2,000個のデータを対象にします。この時、保存法は二つ考えられます。
- 2,000行のデータに分ける
- 一つの行、一つのカラムに2,000個の配列で保存する
なお、それぞれにメリットとデメリットがあります。まずデータを分けた場合、送信されるデータ量が圧倒的に増えます。1行のデータにはobjectId/acl/createDate/updateDateといったカラムが付きますので、この分だけデータ量が増えます。また、データストアは一度に1,000行までのデータしか取得できません。そのため、2,000行のデータを取るためには二回ネットワークアクセスする必要があります。一つの行に配列で入れてしまった場合は、一度のネットワークアクセスで解決します。
行を分けた場合、行ごとにACLを設定できるのがメリットです。また、一部のデータだけを取り出せます。一つのカラムに入れてしまった場合は、常にすべてのデータを取得する必要があります。例えば10個だけデータを取り出すと言った操作はできません。
速度の比較
JavaScript SDKを使った時の速度比較です(単位はms)。
保存形式 | 1回目 | 2回目 | 3回目 | 平均 |
---|---|---|---|---|
2,000行 | 672 | 527 | 608 | 602.33 |
配列 | 176 | 133 | 120 | 143.0 |
2,000行取得する場合は2回ネットワークアクセスが発生する関係上、遅くなります。それでも配列の場合に比べて二倍程度、データダウンロードに時間がかかっているようです。配列でも問題ない場合は、配列を使って保存する方がデータ容量、利用速度的に有利と言えます。
まとめ
データの持ち方一つで速度は大幅に変わります。ユーザがストレスを感じないよう、スキーマレスならではのデータの持ち方を考えると良さそうです。