ocean-dynamo 0.3.12 → 0.3.13
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.rdoc +35 -33
- data/lib/ocean-dynamo/version.rb +1 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff62cac1b81cd01f68f4d8be25004ae94c0afa14
|
4
|
+
data.tar.gz: f5fa8a4e8d8c7b86421a2ad977fd279136a08402
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2296afae10ea96ca8eecdb5822878da60fbd2c20b293a868694f6167bfc95ddb9519153a8b1fb08bacc7ec2506a25c307aefc4cf01398e4486d17e01f568c9e
|
7
|
+
data.tar.gz: 02ec483b0b395f07e5213bc572cf57e30ad30cd420d0b9bf39fafbcb04198f391bb8b73603f22c1e6b98dc728d18e7491e1d84c72e0ecd0232ccabfe62fbb798
|
data/README.rdoc
CHANGED
@@ -18,9 +18,9 @@ is of course based on ActiveModel.
|
|
18
18
|
|
19
19
|
The attribute and persistence layer of OceanDynamo is modeled on that of ActiveRecord:
|
20
20
|
there's +save+, +save!+, +create+, +update+, +update!+, +update_attributes+, +find_each+,
|
21
|
-
and all the other methods you're used to. The design goal
|
22
|
-
of the ActiveRecord interface as possible, without
|
23
|
-
task of switching from SQL to no-SQL much easier.
|
21
|
+
+destroy_all+, +delete_all+ and all the other methods you're used to. The design goal
|
22
|
+
is always to implement as much of the ActiveRecord interface as possible, without
|
23
|
+
compromising scalability. This makes the task of switching from SQL to no-SQL much easier.
|
24
24
|
|
25
25
|
Thanks to its structural similarity to ActiveRecord, OceanDynamo works with FactoryGirl.
|
26
26
|
To facilitate testing, future versions will keep track of and delete instances after tests.
|
@@ -30,7 +30,9 @@ which means it will scale without limits.
|
|
30
30
|
|
31
31
|
=== Example
|
32
32
|
|
33
|
-
|
33
|
+
==== Basic syntax
|
34
|
+
|
35
|
+
The following example shows the basic syntax for declaring a DynamoDB-based schema.
|
34
36
|
|
35
37
|
class AsyncJob < OceanDynamo::Base
|
36
38
|
|
@@ -54,6 +56,8 @@ The following example shows the syntax.
|
|
54
56
|
|
55
57
|
end
|
56
58
|
|
59
|
+
==== Attributes
|
60
|
+
|
57
61
|
Each attribute has a name, a type (+:string+, +:integer+, +:float+, +:datetime+, +:boolean+,
|
58
62
|
or +:serialized+) where +:string+ is the default. Each attribute also optionally has a default
|
59
63
|
value, which can be a Proc. The hash key attribute is by default +:id+ (overridden as +:uuid+ in
|
@@ -65,7 +69,9 @@ Sets are represented as arrays, may not contain duplicates and may not be empty.
|
|
65
69
|
All attributes except the +:string+ type can take the value +nil+. Storing +nil+ for a string
|
66
70
|
value will return the empty string, <tt>""</tt>.
|
67
71
|
|
68
|
-
|
72
|
+
==== Schema args and options
|
73
|
+
|
74
|
+
+dynamo_schema+ takes args and many options. Here's the full syntax:
|
69
75
|
|
70
76
|
dynamo_schema(
|
71
77
|
table_hash_key = :id, # The name of the hash key attribute
|
@@ -85,7 +91,11 @@ Also, dynamo_schema takes args and many options. Here's the full syntax:
|
|
85
91
|
...
|
86
92
|
end
|
87
93
|
|
88
|
-
|
94
|
+
=== +belongs_to+
|
95
|
+
|
96
|
+
==== Example
|
97
|
+
|
98
|
+
The following example shows how to set up a +belongs_to+ relation:
|
89
99
|
|
90
100
|
class Parent < OceanDynamo::Base
|
91
101
|
dynamo_schema do
|
@@ -106,38 +116,28 @@ The following example shows how to set up a belongs_to relation:
|
|
106
116
|
belongs_to :parent
|
107
117
|
end
|
108
118
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
=== Current State
|
113
|
-
|
114
|
-
At the moment, OceanDynamo is fully usable as an ActiveModel and can be used by Rails
|
115
|
-
controllers. Furthermore, OceanDynamo implements much of the infrastructure of ActiveRecord;
|
116
|
-
for instance, +read_attribute+, +write_attribute+, and much of the control logic and
|
117
|
-
parameters.
|
118
|
-
|
119
|
-
+Model.all+ and +.count+ work as expected. +Model.find_each+ is also available.
|
120
|
-
|
121
|
-
+belongs_to+ is now operational. The other side, +has_many+, is much simpler and should
|
122
|
-
follow very soon (probably today).
|
119
|
+
==== Restrictions
|
123
120
|
|
124
121
|
Restrictions for +belongs_to+ tables:
|
125
122
|
* The hash key must be specified and must not be +:id+.
|
126
123
|
* The range key must not be specified at all.
|
127
124
|
* +belongs_to+ can be specified only once in each class.
|
125
|
+
* +belongs_to+ must be placed after the +dynamo_schema+ attribute block.
|
128
126
|
|
129
127
|
These restrictions allow OceanDynamo to implement the +has_many+ / +belongs_to+
|
130
128
|
relation in a very efficient and massively scalable way.
|
131
129
|
|
130
|
+
==== Implementation
|
131
|
+
|
132
132
|
+belongs_to+ claims the range key and uses it to store its own UUID, which normally
|
133
133
|
would be stored in the hash key attribute. Instead, the hash key attribute holds the
|
134
134
|
UUID of the parent. We have thus reversed the roles of these two fields. As a result,
|
135
135
|
all children have their parent UUID as their hash key, and their own UUID in their
|
136
136
|
range key.
|
137
137
|
|
138
|
-
This type of
|
139
|
-
it uses only the primary index of the child model
|
140
|
-
|
138
|
+
This type of relation is even more efficient than its ActiveRecord counterpart as
|
139
|
+
it uses only the primary index of the child model in both directions of the
|
140
|
+
+has_many+ / +belongs_to+ association. No scans.
|
141
141
|
|
142
142
|
Furthermore, since DynamoDB has powerful primary index searches involving substrings
|
143
143
|
and matching, the fact that the range key is a string can be used to implement
|
@@ -149,24 +149,26 @@ which means that secondary indices won't be necessary for the vast majority of
|
|
149
149
|
OceanDynamo use cases. This ultimately means reduced operational costs, as well as
|
150
150
|
reduced complexity.
|
151
151
|
|
152
|
-
+.has_belongs_to?+ returns true if the class has a belongs_to association.
|
153
|
-
|
154
|
-
+.belongs_to_class returns the class of the belongs_to association, or false if none.
|
155
152
|
|
156
|
-
|
153
|
+
=== Current State
|
157
154
|
|
158
|
-
|
155
|
+
OceanDynamo is fully usable as an ActiveModel and can be used by Rails
|
156
|
+
controllers. OceanDynamo implements much of the infrastructure of ActiveRecord;
|
157
|
+
for instance, +read_attribute+, +write_attribute+, and much of the control logic and
|
158
|
+
parameters.
|
159
159
|
|
160
|
+
+belongs_to+ is now operational. The other side, +has_many+, is much simpler and should
|
161
|
+
follow very soon (probably today).
|
160
162
|
|
161
163
|
=== Future milestones
|
162
164
|
|
163
|
-
After the +has_many+ / +belongs_to+ association, the +has_and_belongs_to_many+ assocation
|
164
|
-
will be implemented.
|
165
|
+
* After the +has_many+ / +belongs_to+ association, the +has_and_belongs_to_many+ assocation
|
166
|
+
will be implemented.
|
165
167
|
|
166
|
-
A generator to install the <tt>config/aws.yml</tt> file.
|
168
|
+
* A generator to install the <tt>config/aws.yml</tt> file.
|
167
169
|
|
168
|
-
OceanDynamo will use association proxies to achieve the same kind of
|
169
|
-
interface as ActiveRecord, e.g.: <code>blog_entry.comments.build(body: "Cool!").save!</code>
|
170
|
+
* OceanDynamo will use association proxies to achieve the same kind of
|
171
|
+
interface as ActiveRecord, e.g.: <code>blog_entry.comments.build(body: "Cool!").save!</code>
|
170
172
|
|
171
173
|
|
172
174
|
=== Current use
|
data/lib/ocean-dynamo/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocean-dynamo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Bengtson
|
@@ -144,15 +144,15 @@ description: "== OceanDynamo\n\nOceanDynamo is a massively scalable Amazon Dynam
|
|
144
144
|
and support methods. Ocean-dynamo follows this pattern closely and\nis of course
|
145
145
|
based on ActiveModel.\n\nThe attribute and persistence layer of OceanDynamo is modeled
|
146
146
|
on that of ActiveRecord:\nthere's +save+, +save!+, +create+, +update+, +update!+,
|
147
|
-
+update_attributes+, +find_each+,\
|
148
|
-
design goal
|
149
|
-
without
|
150
|
-
no-SQL much easier.\n\nThanks to its structural
|
151
|
-
works with FactoryGirl.\nTo facilitate testing,
|
152
|
-
of and delete instances after tests.\n\nOceanDynamo
|
153
|
-
related table items, \nwhich means it will scale
|
154
|
-
a Rails framework for creating highly scalable
|
155
|
-
is used as a central component: http://wiki.oceanframework.net"
|
147
|
+
+update_attributes+, +find_each+,\n+destroy_all+, +delete_all+ and all the other
|
148
|
+
methods you're used to. The design goal \nis always to implement as much of the
|
149
|
+
ActiveRecord interface as possible, without \ncompromising scalability. This makes
|
150
|
+
the task of switching from SQL to no-SQL much easier.\n\nThanks to its structural
|
151
|
+
similarity to ActiveRecord, OceanDynamo works with FactoryGirl.\nTo facilitate testing,
|
152
|
+
future versions will keep track of and delete instances after tests.\n\nOceanDynamo
|
153
|
+
uses primary indices to retrieve related table items, \nwhich means it will scale
|
154
|
+
without limits.\n\nSee also Ocean, a Rails framework for creating highly scalable
|
155
|
+
SOAs in the cloud, in which\nocean-dynamo is used as a central component: http://wiki.oceanframework.net"
|
156
156
|
email:
|
157
157
|
- peter@peterbengtson.com
|
158
158
|
executables: []
|