README.md in sengiri-0.0.2 vs README.md in sengiri-0.1.0
- old
+ new
@@ -2,75 +2,104 @@
Flexible sharding access for Ruby on Rails with ActiveRecord
## Sharding model generator
+```
rails g sengiri:model mygroup user name:string
+```
## database.yml
+```ruby
mysql: &mysql
adapter: mysql2
encoding: utf8
reconnect: false
pool: 1
username: root
password:
host: localhost
- mygroup_shards_first: # define shard as 'first'
+ mygroup_shard_first: # define shard as 'first'
<<: *mysql
database: mygroup_1
host: hosta
- mygroup_shards_second: # define shard as 'second'
+ mygroup_shard_second: # define shard as 'second'
<<: *mysql
database: mygroup_2
host: hostb
- mygroup_shards_third: # define shard as 'third'
+ mygroup_shard_third: # define shard as 'third'
<<: *mysql
database: mygroup_3
host: hostc
.
.
.
+```
## Sharding migration
+ActiveRecord task is available on every shard.
+
+```ruby
rake sengiri:mygroup:db:create
rake sengiri:mygroup:db:migrate
-
+ rake sengiri:mygroup:db:rollback
+ ...
+```
## Sharding access
+On a shard, ActiveRecord class is given.
+
+```ruby
User.shard('second') do |shard|
- shard.all.limit(10) # query on db 'mygroup_1'
+ shard.all.limit(10) # query on db 'mygroup_2'
+ shard.find(1) # query on db 'mygroup_2'
end
+```
+Every shard.
+```ruby
User.shards do |shard|
- shard.all.limit(10) # query on all db 'mygroup_1', 'mygroup_2', 'mygroup_3'
+ shard.all.limit(10) # query on all shards 'mygroup_1', 'mygroup_2', 'mygroup_3'
end
+```
+All records from all shards.
+
+```ruby
+ all_records = User.all.broadcast
+```
+
## Transaction
+In a shard transaction.
+
+```ruby
User.shard('second').transaction do
# in mygroup_2 transaction
end
+```
+In all shards transaction.
+```ruby
User.transaction do
# in mygroup_1, mygroup_2 and mygroup_3 transaction
end
+```
+This is same as below
- # This is same as below
-
-
+```ruby
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.