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

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

データストアの処理速度を計測してみました

mBaaSはSaaSと呼ばれる類のサービスなので、ハードウェア的なベンチマークができません。実体はまさにクラウドで、実際のパフォーマンスがどうなっているのか分かりづらいかと思います。

公式にはパフォーマンスについて一切保証、公表していません。そこで、ライブラリを使ってどれくらいのパフォーマンスが出ているのかチェックしてみました。

前提条件

  • 上りのインターネット速度:8.81Mbps
  • 下りのインターネット速度:22.80Mbps

実行内容

データストアに100件データを登録して、それをすべて削除します。これを3つ同時に実行します。計算処理は殆どありませんので、ほぼネットワークに関係しているはずです。

NCMB.initialize application_key: yaml['application_key'],  client_key: yaml['client_key']

example = NCMB::DataStore.new 'Example'

require 'benchmark'

ary = []
Benchmark.bm 10 do |r|
  r.report "Save DataStore" do
    100.times do |i|
      item = example.new
      item.set('String', "テスト#{i}00")
      item.set('Integer', i)
      item.set('Boolean', true)
      item.set('Array', [i, i * 2, i * 3, "Orange", "Tomato"])
      item.set('Object', {test1: 'a', test2: 'b'})
      item.set('Location', NCMB::GeoPoint.new(30, 50))
      item.set('MultipleLine', "test\ntest\n")
      item.set('Increment', NCMB::Increment.new(i + 1))
      item.set('Date', Time.now)
      item.save
      ary << item.objectId
    end
  end
  r.report "Delete objects" do
    ary.each do |objectId|
      item = example.new(objectId: objectId)
      item.delete
    end
  end
end

実行結果

1つ目。

$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.280000   0.070000   0.350000 ( 32.108096)
Delete objects  0.270000   0.070000   0.340000 ( 17.979541)
$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.250000   0.070000   0.320000 ( 35.506736)
Delete objects  0.270000   0.070000   0.340000 ( 20.337422)
$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.270000   0.070000   0.340000 ( 31.747943)
Delete objects  0.290000   0.080000   0.370000 ( 20.890580)

2つ目。

$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.270000   0.080000   0.350000 ( 33.449380)
Delete objects  0.280000   0.070000   0.350000 ( 17.590708)
$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.250000   0.070000   0.320000 ( 37.433583)
Delete objects  0.280000   0.070000   0.350000 ( 20.109447)
$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.270000   0.080000   0.350000 ( 31.778656)
Delete objects  0.280000   0.070000   0.350000 ( 23.501528)

3つ目。

$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.230000   0.070000   0.300000 ( 18.021677)
Delete objects  0.270000   0.060000   0.330000 ( 43.242680)
$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.270000   0.080000   0.350000 ( 29.196634)
Delete objects  0.280000   0.070000   0.350000 ( 19.666532)
$ ruby examples/performance.rb
                 user     system      total        real
Save DataStore  0.250000   0.060000   0.310000 ( 34.970395)
Delete objects  0.270000   0.070000   0.340000 ( 21.207316)

パフォーマンスについて

ネットワークの状態にもよりますが、平均値としては 31.579秒(realが)にて完了しています。1件あたりとしては0.31秒ということになります。削除はもう少し早くて、22.7秒(1件当たり0.23秒)となっています。

ネットワーク速度が結果に大きく影響するので、モバイルネットワークなど若干遅い場合にはまた異なる結果となるでしょう。

モバイルネットワークの場合

モバイルネットワークで実行したところ、データストアへの保存で40秒くらいと1.3倍程度かかりました。なお、速度は次のようになっていました。

  • 上りインターネット速度:4.09Mbps
  • 下りインターネット速度:3.83Mbps

パフォーマンスについて明確な数値がある訳ではありませんが、目安としてもらえればと思います。データの保存についてはクライアントやサーバの処理性能よりもネットワーク速度の方が影響が大きいと思われます。検索などになるとまた別なのでご注意ください。

ドキュメント : 開発ガイドライン | ニフティクラウド mobile backend