0

私は datamapper を使用しており、ruby ベンチマーク ライブラリを使用していくつかのクエリをベンチマークしたいと考えています。それが機能しているかどうかを確認するために、以下に示すように、データマッパーのドキュメントに記載されているメソッドを比較して、セットから始めました。

(1..1000).each do |i|
  i = Item.create :name => "item_#{i}", :weight => 0.5, :volume => 1.2, :price => 15
end

Benchmark.bmbm do |x|
  x.report("all:") { Item.all }
  x.report("name_only:") { Item.all :fields => [:name] }
  x.report("direct_talk_all:") { repository(:default).adapter.select('SELECT * FROM items') }
  x.report("direct_talk_name_only:") { repository(:default).adapter.select('SELECT name FROM items') }

終わり

驚くべきことに (私には)、実際の結果はそれぞれ 0、0.001、0.024、0.014 でした。データマッパー固有のコードを使用する場合、選択的な SELECT クエリに時間がかかり、データ ストアと直接やり取りするとクエリに時間がかかるというのは、私には間違っているように思えます。

では、この方法でクエリのベンチマークを行うべきですか、それとも ruby​​ ベンチマーク ライブラリの選択が間違っているのでしょうか?

4

1 に答える 1

2

Item.all実際にはクエリを実行しません。必要になるまで遅延します。Item.all.to_aクエリを強制するために使用します。

于 2012-11-13T06:13:33.853 に答える