Guest User

Untitled

a guest
Mar 9th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. require 'rubygems'
  2. require 'active_record'
  3. require 'benchmark'
  4.  
  5. # tweak to do immediate type translation
  6. class ActiveRecord::ConnectionAdapters::SQLite3Adapter
  7. # class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  8. attr_reader :connection
  9. end
  10. ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => 'perf_ar.db'
  11. # ActiveRecord::Base.establish_connection(:adapter => 'postgresql',
  12. # :host => 'localhost', :port => 5432, :encoding => 'UTF8',
  13. # :username => 'rails_user', :password => 'rails', :database => 'new_blog_dev')
  14. ActiveRecord::Base.connection.connection.type_translation = true
  15.  
  16.  
  17. # set up ActiveRecord
  18. class ArItem < ActiveRecord::Base
  19. set_table_name 'items'
  20. end
  21.  
  22. # created schema and data
  23. class NewItem < ActiveRecord::Migration
  24. def self.up
  25. create_table :items do |t|
  26. t.column :name, :string
  27. t.column :description, :text
  28. t.column :active, :boolean
  29. t.column :created_at, :datetime
  30. end
  31. end
  32. def self.down
  33. drop_table :items
  34. end
  35. end
  36. NewItem.up
  37.  
  38. 1000.times do |i|
  39. ArItem.create(:name => "record_#{i}", :description => "test record", :active => i.remainder(3).zero?)
  40. end
  41.  
  42. # run benchmarks
  43. Benchmark.bmbm do |x|
  44.  
  45. x.report('active_record single-thread') do
  46. 100.times do
  47. ArItem.find(:all, :conditions => ["active = ?", false]).each do |r|
  48. r.name
  49. r.description
  50. r.active
  51. r.created_at
  52. end
  53. end
  54. end
  55.  
  56. x.report('active_record threaded') do
  57. ActiveRecord::Base.allow_concurrency = true
  58. threads = []
  59. 10.times do
  60. t = Thread.new do
  61. 10.times do
  62. ArItem.find(:all, :conditions => ["active = ?", false]).each do |r|
  63. r.name
  64. r.description
  65. r.active
  66. r.created_at
  67. end
  68. end
  69. end
  70. threads.push(t)
  71. end
  72. threads.each { |t| t.join }
  73. end
  74.  
  75. end
  76.  
  77. NewItem.down
Add Comment
Please, Sign In to add comment