Sengiri
Flexible sharding access for Ruby on Rails with ActiveRecord
Sharding model generator
rails g sengiri:model mygroup user name:string
database.yml
mysql: &mysql
adapter: mysql2
encoding: utf8
reconnect: false
pool: 1
username: root
password:
host: localhost
mygroup_shards_first: # define shard as 'first'
<<: *mysql
database: mygroup_1
host: hosta
mygroup_shards_second: # define shard as 'second'
<<: *mysql
database: mygroup_2
host: hostb
mygroup_shards_third: # define shard as 'third'
<<: *mysql
database: mygroup_3
host: hostc
.
.
.
Sharding migration
rake sengiri:mygroup:db:create
rake sengiri:mygroup:db:migrate
Sharding access
User.shard('second') do |shard|
shard.all.limit(10) # query on db 'mygroup_1'
end
User.shards do |shard|
shard.all.limit(10) # query on all db 'mygroup_1', 'mygroup_2', 'mygroup_3'
end
Transaction
User.shard('second').transaction do
# in mygroup_2 transaction
end
User.transaction do
# in mygroup_1, mygroup_2 and mygroup_3 transaction
end
# This is same as below
User.shard('first').transaction do
User.shard('second').transaction do
User.shard('third').transaction do
end
end
end
This project rocks and uses MIT-LICENSE.