Querrel memudahkan untuk menanyakan beberapa database secara paralel (utas) menggunakan ActiveRecord, seolah-olah Anda sedang menanyakan satu database.
Tambahkan baris ini ke Gemfile aplikasi Anda:
gem 'querrel'
Dan kemudian jalankan:
$ bundle
Atau instal sendiri sebagai:
$ gem install querrel
Anda dapat menggunakan Querrel secara langsung melalui namespace tingkat atasnya, atau dengan membuat sebuah instance:
all_brands = Querrel . query ( Brand . all , on : [ 'db1' , 'db2' , 'db3' ] )
# is the same as
all_brands = Querrel . new ( [ 'db1' , 'db2' , 'db3' ] ) . query ( Brand . all )
Salah satu cara di atas akan memberi Anda larik semua objek Merek dari semua database yang diberikan. Catatan akan ditandai sebagai hanya dapat dibaca.
query
akan menghasilkan blok dengan meneruskan ActiveRecord::Relation
, ini memungkinkan Anda melakukan operasi tambahan pada hasil sebelum digabungkan, misalnya Anda dapat menggunakan pluck:
all_brand_names = q . query ( Brand . all ) do | s |
s . pluck ( :name )
end
Ada juga metode run
yang alih-alih menjalankan cakupan dan penggabungan yang telah ditentukan sebelumnya, akan mengambil blok yang memungkinkan Anda melakukan apa pun yang Anda inginkan dengan koneksi database yang ditentukan, misalnya:
require 'thread'
all_brands = [ ]
b_s = Mutex . new
all_products = [ ]
p_s = Mutex . new
Querrel . run ( on : dbs ) do | db |
b_s . synchronize { all_brands += Brand . all . to_a }
p_s . synchronize { all_products += Product . all . to_a }
end
Ada tiga cara di mana Anda dapat menginstruksikan Querrel database mana yang akan digunakan:
Lewati berbagai lingkungan, misalnya Querrel.new([:customer1, :customer2])
Masukkan array nama database, misalnya Querrel.new(['dbs/customer1.sqlite3', 'dbs/customer2.sqlite3'], db_names: true)
Berikan hash konfigurasi koneksi bernama, misalnya:
Querrel . new ( {
one : {
adapter : "sqlite3" ,
database : "test/dbs/test_db_1.sqlite3"
} ,
two : {
adapter : "sqlite3" ,
database : "test/dbs/test_db_2.sqlite3"
}
} )
Secara default Querrel akan menggunakan maksimal 20 thread, namun Anda dapat menyesuaikannya menggunakan opsi :threads
:
q = Querrel . new ( dbs , threads : 50 )
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)