Querrel ทำให้การสืบค้นหลายฐานข้อมูลพร้อมกัน (เธรด) เป็นเรื่องง่ายโดยใช้ ActiveRecord ราวกับว่าคุณกำลังสืบค้นฐานข้อมูลเดียว
เพิ่มบรรทัดนี้ลงใน Gemfile ของแอปพลิเคชันของคุณ:
gem 'querrel'
แล้วดำเนินการ:
$ bundle
หรือติดตั้งด้วยตัวเองเป็น:
$ gem install querrel
คุณสามารถใช้กับ Querrel ได้โดยตรงผ่านเนมสเปซระดับบนสุดหรือโดยการสร้างอินสแตนซ์:
all_brands = Querrel . query ( Brand . all , on : [ 'db1' , 'db2' , 'db3' ] )
# is the same as
all_brands = Querrel . new ( [ 'db1' , 'db2' , 'db3' ] ) . query ( Brand . all )
อย่างใดอย่างหนึ่งข้างต้นจะให้อาร์เรย์ของออบเจ็กต์ Brand ทั้งหมดจากฐานข้อมูลที่กำหนดทั้งหมด บันทึกจะถูกทำเครื่องหมายว่าอ่านอย่างเดียว
query
จะให้ผลบล็อกที่ส่งผ่านใน ActiveRecord::Relation
ซึ่งช่วยให้คุณสามารถดำเนินการเพิ่มเติมกับผลลัพธ์ก่อนที่จะรวมเข้าด้วยกัน ตัวอย่างเช่น คุณสามารถใช้ pluck:
all_brand_names = q . query ( Brand . all ) do | s |
s . pluck ( :name )
end
นอกจากนี้ยังมีวิธี run
ซึ่งแทนที่จะเรียกใช้ขอบเขตที่กำหนดไว้ล่วงหน้าและการรวมเข้าด้วยกัน จะใช้บล็อกที่ให้คุณทำอะไรก็ได้ที่คุณต้องการด้วยการเชื่อมต่อฐานข้อมูลที่ระบุ เช่น:
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
มีสามวิธีที่คุณสามารถสั่ง Querrel ได้ว่าจะใช้ฐานข้อมูลใด:
ผ่านอาร์เรย์ของสภาพแวดล้อม เช่น Querrel.new([:customer1, :customer2])
ส่งผ่านอาร์เรย์ของชื่อฐานข้อมูล เช่น Querrel.new(['dbs/customer1.sqlite3', 'dbs/customer2.sqlite3'], db_names: true)
ส่งผ่านแฮชของการกำหนดค่าการเชื่อมต่อที่มีชื่อ เช่น:
Querrel . new ( {
one : {
adapter : "sqlite3" ,
database : "test/dbs/test_db_1.sqlite3"
} ,
two : {
adapter : "sqlite3" ,
database : "test/dbs/test_db_2.sqlite3"
}
} )
ตามค่าเริ่มต้น Querrel จะใช้สูงสุด 20 เธรด แต่คุณสามารถปรับค่านี้ได้โดยใช้ตัวเลือก :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
)