Commit d0716a0fb033e2be1db7ab1f619c98ea605d9d38

Authored by Andrew Kane
1 parent 929c4ce7

Updated benchmark script [skip ci]

Showing 2 changed files with 49 additions and 11 deletions   Show diff stats
benchmark/Gemfile
@@ -3,9 +3,13 @@ source "https://rubygems.org" @@ -3,9 +3,13 @@ source "https://rubygems.org"
3 # Specify your gem's dependencies in searchkick.gemspec 3 # Specify your gem's dependencies in searchkick.gemspec
4 gemspec path: "../" 4 gemspec path: "../"
5 5
6 -gem "sqlite3" 6 +# gem "sqlite3"
  7 +gem "pg"
7 gem "activerecord", "~> 5.0.0" 8 gem "activerecord", "~> 5.0.0"
8 gem "activerecord-import" 9 gem "activerecord-import"
  10 +gem "activejob"
  11 +gem "redis"
  12 +gem "sidekiq"
9 13
10 # performance 14 # performance
11 gem "typhoeus" 15 gem "typhoeus"
benchmark/benchmark.rb
@@ -2,19 +2,27 @@ require "bundler/setup" @@ -2,19 +2,27 @@ require "bundler/setup"
2 Bundler.require(:default) 2 Bundler.require(:default)
3 require "active_record" 3 require "active_record"
4 require "benchmark" 4 require "benchmark"
  5 +require "active_support/notifications"
  6 +
  7 +ActiveSupport::Notifications.subscribe "request.searchkick" do |*args|
  8 + event = ActiveSupport::Notifications::Event.new(*args)
  9 + p event.duration
  10 +end
  11 +
  12 +ActiveJob::Base.queue_adapter = :sidekiq
  13 +
  14 +Searchkick.redis = Redis.new
5 15
6 ActiveRecord::Base.default_timezone = :utc 16 ActiveRecord::Base.default_timezone = :utc
7 ActiveRecord::Base.time_zone_aware_attributes = true 17 ActiveRecord::Base.time_zone_aware_attributes = true
8 -ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" 18 +# ActiveRecord::Base.establish_connection adapter: "sqlite3", database: "/tmp/searchkick"
  19 +ActiveRecord::Base.establish_connection "postgresql://localhost/searchkick_demo_development"
  20 +# ActiveRecord::Base.logger = Logger.new(STDOUT)
9 21
10 -ActiveRecord::Migration.create_table :products do |t|  
11 - t.string :name  
12 - t.string :color  
13 - t.integer :store_id  
14 -end 22 +ActiveJob::Base.logger = nil
15 23
16 class Product < ActiveRecord::Base 24 class Product < ActiveRecord::Base
17 - searchkick batch_size: 100 25 + searchkick batch_size: 1000
18 26
19 def search_data 27 def search_data
20 { 28 {
@@ -25,7 +33,15 @@ class Product &lt; ActiveRecord::Base @@ -25,7 +33,15 @@ class Product &lt; ActiveRecord::Base
25 end 33 end
26 end 34 end
27 35
28 -Product.import ["name", "color", "store_id"], 20000.times.map { |i| ["Product #{i}", ["red", "blue"].sample, rand(10)] } 36 +total_docs = 100000
  37 +
  38 +# ActiveRecord::Migration.create_table :products, force: :cascade do |t|
  39 +# t.string :name
  40 +# t.string :color
  41 +# t.integer :store_id
  42 +# end
  43 +
  44 +# Product.import ["name", "color", "store_id"], total_docs.times.map { |i| ["Product #{i}", ["red", "blue"].sample, rand(10)] }
29 45
30 puts "Imported" 46 puts "Imported"
31 47
@@ -35,19 +51,37 @@ stats = nil @@ -35,19 +51,37 @@ stats = nil
35 51
36 # p GetProcessMem.new.mb 52 # p GetProcessMem.new.mb
37 53
  54 +Product.searchkick_index.delete rescue nil
  55 +
38 time = 56 time =
39 Benchmark.realtime do 57 Benchmark.realtime do
40 # result = RubyProf.profile do 58 # result = RubyProf.profile do
41 # report = MemoryProfiler.report do 59 # report = MemoryProfiler.report do
42 # stats = AllocationStats.trace do 60 # stats = AllocationStats.trace do
43 - Product.reindex 61 + reindex = Product.reindex(async: true)
  62 + p reindex
44 # end 63 # end
  64 +
  65 + 60.times do |i|
  66 + if reindex.is_a?(Hash)
  67 + docs = Searchkick::Index.new(reindex[:index_name]).total_docs
  68 + else
  69 + docs = Product.searchkick_index.total_docs
  70 + end
  71 + puts "#{i}: #{docs}"
  72 + if docs == total_docs
  73 + break
  74 + end
  75 + p Searchkick.reindex_status(reindex[:index_name]) if reindex.is_a?(Hash)
  76 + sleep(1)
  77 + # Product.searchkick_index.refresh
  78 + end
45 end 79 end
46 80
47 # p GetProcessMem.new.mb 81 # p GetProcessMem.new.mb
48 82
49 puts time.round(1) 83 puts time.round(1)
50 -puts Product.searchkick_index.total_docs 84 +
51 85
52 if result 86 if result
53 printer = RubyProf::GraphPrinter.new(result) 87 printer = RubyProf::GraphPrinter.new(result)