Closed okkez closed 7 years ago
:memo: TODO
TODO:
require "benchmark"
issues = Issue.all
active_user = User.active.all.sample
n_issues = issues.size
times = []
issues.each do |issue|
times << Benchmark.realtime do
issue.similar_issues(user: active_user)
end
end
total = times.inject(&:+)
puts "User: #{active_user.id}"
puts "records: %d, total: %.2f sec, min: %.2f ms, max: %.2f ms, average: %.2f ms" % [n_issues, total, times.min * 1000, times.max * 1000, total/n_issues * 1000]
雑にベンチマークを取ってみた。
mariadb-server 10.0.29-0ubuntu0.16.04.1 + mariadb-server-10.0-mroonga 7.05-2~xenial1
$ bin/rails r similar.rb
User: 50
records: 3457, total: 58.22 sec, min: 7.54 ms, max: 253.88 ms, average: 16.84 ms
bin/rails r similar.rb 24.85s user 2.27s system 44% cpu 1:00.67 total
2.4.1 | system
$ bin/rails r similar.rb
User: 78
records: 3457, total: 45.81 sec, min: 4.46 ms, max: 258.71 ms, average: 13.25 ms
bin/rails r similar.rb 21.36s user 1.77s system 47% cpu 48.218 total
postgresql 9.6.4-1 + PGroonga 1.2.3
$ bin/rails r similar.rb
User: 45
records: 3457, total: 48.55 sec, min: 5.60 ms, max: 260.23 ms, average: 14.04 ms
bin/rails r similar.rb 22.16s user 1.19s system 45% cpu 50.944 total
2.4.1 | system
$ bin/rails r similar.rb
User: 37
records: 3457, total: 48.83 sec, min: 5.33 ms, max: 265.98 ms, average: 14.12 ms
bin/rails r similar.rb 22.12s user 1.10s system 45% cpu 51.228 total
CPU: Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz
Memory: 16GB
SSD: 256GB
今のところプロジェクトの条件は付けないことにした。 必要になったら付けることにする。
まだ権限まわりのコードを入れてないけど、2つのパターンの類似issue検索を作ってみた。 searcher_records を参照しているのと、issue_contentsを参照しているのでどちらがよりよい結果を出しているのだろう。