ニフクラmBaaSお役立ちブログ

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

mBaaSを使ってデータを自動分割、ローテートする

アクセスログなどを管理する場合、一日ごとのログファイルを分割したいと考えることは多いでしょう。同じファイルや同じテーブルにデータを蓄積していると、いつの間にか膨大になってしまいます。

mBaaSのデータストアを使った場合、そういった煩わしい処理は不要です。そのやり方を紹介します。

データストアのクラス名を動的にしてみよう

例えば Log というクラス名を定義します。

var Log = ncmb.DataStore("Log");

これにデータを保存すると、Logクラスがどんどん肥大化していきます。

それに対して、次のように処理を変更するとどうなるでしょうか。

var d = new Date;
var Log = ncmb.DataStore("Log_"+ d.getFullYear() + "_" + (d.getMonth() + 1) + "_" + d.getDate());

例えば2016年11月01日であれば Log_2016_11_1 、2016年12月15日であれば Log_2016_12_15 などと自動的にクラスが分割されて保存されるようになります。これは保存専用の場合や、一日ごとにデータの保存や取得先を分けたいという時に役立ちます。

応用編

応用として、認証したユーザ毎に分割するという方法があります。各ユーザのデータが独立したものであれば、ユーザ毎や一定のグループ毎に分けても良いでしょう。

var Photo = ncmb.DataStore("Photo_" + ncmb.User.getCurrentUser().objectId[0]);

上記の方法の場合、ユーザのObjectIdの最初の1文字(a-zA-Z0-9のいずれか)ごとにデータが分割されます。すべてのデータを同じPhotoクラスに保存すると何十倍にもなりますが、分割すれば検索も速くなるでしょう。

デメリット

デメリットとしてはクラスが自動的にどんどん増えてしまうことで、管理画面が見づらくなるかもしれません。場合によって管理画面を独自作成することをお勧めします。


ローテーションによるデータの分割は度々問題にありますが、mBaaSを使えば簡単に実現できます。データの検索量を減らすことで、レスポンスを高速化できる効果もあるでしょう。