FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

データストアを高速化する(データ取得編)

f:id:mbaasdevrel:20180913163950p:plain

データストアに限りませんが、mBaaSを使う際にはネットワークアクセスが必要です。そのため、いかにネットワーク通信量(回数、データ量)を減らすかがアプリ高速化の鍵になります。

今回はデータストアにおけるデータの持ち方と、その速度比較を紹介します。

データの持ち方

今回は2,000個のデータを対象にします。この時、保存法は二つ考えられます。

  1. 2,000行のデータに分ける
  2. 一つの行、一つのカラムに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回ネットワークアクセスが発生する関係上、遅くなります。それでも配列の場合に比べて二倍程度、データダウンロードに時間がかかっているようです。配列でも問題ない場合は、配列を使って保存する方がデータ容量、利用速度的に有利と言えます。

まとめ

データの持ち方一つで速度は大幅に変わります。ユーザがストレスを感じないよう、スキーマレスならではのデータの持ち方を考えると良さそうです。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。