tako 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +54 -10
- data/lib/tako.rb +1 -0
- data/lib/tako/repository.rb +9 -0
- data/lib/tako/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 251999f9587d91e10a4124565e939a832f1a07da
|
4
|
+
data.tar.gz: 4161bbab1056d2c22a2984fd4b4429f73f51f4da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80506c988bd63b6b3a437c16998a79bccd22126e6b667e5f2fd917d097f44488ba52f1a615aea3c86f0d811275a00c9bb53e42d5dd807ebf2495f57393243f54
|
7
|
+
data.tar.gz: 5473bc23a5dcfaf1d96bb437c4d3b7796fce09e816b2226a02406a0bed008859b86b48e0df1f14417a5a4a577261ace70daa58874414e556a6c046d297ef8dc8
|
data/README.md
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
# Tako
|
2
2
|
[](https://circleci.com/gh/the40san/tako/tree/master)
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
Tako provides Database-Sharding features for ActiveRecord.
|
5
|
+
Respecting [Octopus](https://github.com/thiagopradi/octopus)
|
6
|
+
|
7
|
+
# Motivation
|
8
|
+
The main goal of Tako is implementing sharding features with less ActiveRecord-dependent; catching up Rails version up.
|
9
|
+
And also, Tako supports migration from Octopus because it is no longer maintained.
|
10
|
+
|
7
11
|
|
8
12
|
## Installation
|
9
13
|
|
@@ -29,7 +33,7 @@ Or install it yourself as:
|
|
29
33
|
|
30
34
|
## Usage
|
31
35
|
## How to use Tako?
|
32
|
-
First, you need to create a config file, shards.yml
|
36
|
+
First, you need to create a config file, `shards.yml`, inside your config/ directory.
|
33
37
|
Also you can override config file path with environment variable.
|
34
38
|
|
35
39
|
### Syntax
|
@@ -37,22 +41,49 @@ Tako adds a method to each AR Class and object: the shard method is used to sele
|
|
37
41
|
|
38
42
|
```ruby
|
39
43
|
User.shard(:slave_one).where(:name => "Thiago").limit(3)
|
44
|
+
# => Query will run in :slave_one
|
40
45
|
```
|
41
46
|
|
42
47
|
Tako also supports queries within a block. When you pass a block to the shard method, all queries inside the block will be sent to the specified shard.
|
43
48
|
|
44
49
|
```ruby
|
50
|
+
User.create(name: "Bob")
|
51
|
+
# => Query will run in default connection in database.yml
|
52
|
+
|
45
53
|
Tako.shard(:slave_two) do
|
46
|
-
User.create(:
|
54
|
+
User.create(name: "Mike")
|
55
|
+
# => Query will run in :slave_two
|
47
56
|
end
|
48
57
|
|
49
58
|
# or
|
50
59
|
|
51
|
-
|
52
|
-
User.create(:
|
60
|
+
User.shard(:slave_two) do
|
61
|
+
User.create(name: "Mike")
|
62
|
+
# => Query will run in :slave_two
|
53
63
|
end
|
54
64
|
```
|
55
65
|
|
66
|
+
## Associations
|
67
|
+
|
68
|
+
```
|
69
|
+
class User < ActiveRecord::Base
|
70
|
+
has_many :logs
|
71
|
+
has_one :life
|
72
|
+
end
|
73
|
+
|
74
|
+
user = User.shard(:shard01).create(name: "Jerry")
|
75
|
+
|
76
|
+
user.logs.create
|
77
|
+
# => Query will run in :shard01 (same as user)
|
78
|
+
|
79
|
+
user.logs << Log.shard(:shard02).new
|
80
|
+
# => Query will run in :shard02 (careful)
|
81
|
+
|
82
|
+
life = user.build_life
|
83
|
+
life.save!
|
84
|
+
# => Query will run in :shard01 (same as user)
|
85
|
+
```
|
86
|
+
|
56
87
|
## Vertical Sharding
|
57
88
|
|
58
89
|
Add `force_shard` definition to your Vertical-Sharding model
|
@@ -61,8 +92,20 @@ Add `force_shard` definition to your Vertical-Sharding model
|
|
61
92
|
class YourModel < ActiveRecord::Base
|
62
93
|
force_shard :shard01
|
63
94
|
end
|
95
|
+
|
96
|
+
YourModel.create
|
97
|
+
# => Query will run in :shard01
|
98
|
+
|
99
|
+
Tako.shard(:shard02) do
|
100
|
+
YourModel.create
|
101
|
+
# => Query will run in :shard01
|
102
|
+
end
|
64
103
|
```
|
65
104
|
|
105
|
+
## TODO
|
106
|
+
|
107
|
+
* Make more independent of ActiveRecord implementation.
|
108
|
+
|
66
109
|
## Development
|
67
110
|
|
68
111
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -73,14 +116,15 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
73
116
|
|
74
117
|
Run `bundle exec rake` to run rspec
|
75
118
|
|
76
|
-
Run `bundle exec rake` in `spec/dummy5` will run rspec with rails 5
|
119
|
+
Run `bundle exec rake` in `spec/dummy5` will run rspec with rails 5.0.0.1
|
77
120
|
|
78
|
-
Run `bundle exec rake` in `spec/dummy42` will run rspec with rails 4.2
|
121
|
+
Run `bundle exec rake` in `spec/dummy42` will run rspec with rails 4.2.7.1
|
79
122
|
|
80
123
|
|
81
124
|
## Contributing
|
82
125
|
|
83
|
-
|
126
|
+
Contributors are welcome on GitHub at https://github.com/the40san/tako. Documentation contributors also welcome!
|
127
|
+
This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
84
128
|
|
85
129
|
|
86
130
|
## License
|
data/lib/tako.rb
CHANGED
data/lib/tako/repository.rb
CHANGED
@@ -9,6 +9,15 @@ module Tako
|
|
9
9
|
@proxy_connections ||= {}
|
10
10
|
end
|
11
11
|
|
12
|
+
def clear
|
13
|
+
proxy_connections.each do |shard_name, connection|
|
14
|
+
connection.disconnect!
|
15
|
+
remove_const("TAKO_AR_CLASS_#{shard_name.upcase}")
|
16
|
+
end
|
17
|
+
proxy_configs.clear
|
18
|
+
proxy_connections.clear
|
19
|
+
end
|
20
|
+
|
12
21
|
def add(shard_name, conf)
|
13
22
|
shard_name = shard_name.to_sym
|
14
23
|
return if proxy_configs[shard_name]
|
data/lib/tako/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tako
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masashi AKISUE
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|