ocean-dynamo 0.3.9 → 0.3.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d36ffc88503b1fb28acf30eb86d8b5e709561e72
4
- data.tar.gz: 126589875287f2df88701c60aea134918e0b6c55
3
+ metadata.gz: f6249788253589b08c22ba6f39f134b14ac986b5
4
+ data.tar.gz: 1d170f9c05448c3136fe7df37de6f6f43f56666f
5
5
  SHA512:
6
- metadata.gz: 54c12079e7262327235bd3bae2fd40151c817ea7950ecbd1a22a61ac11f288c9bdec67a31f1e256b39aef30699aa56a1de14211ca29b2588f6a789d75a4e0d2a
7
- data.tar.gz: 67e51cfa1e840deca03e0119b897b20a2a5de29b3f4b23df8b2669b375493efa728c914172820f1e160ff902cb0e4253bb2fe3b84384e049475fb76348db94b7
6
+ metadata.gz: 84d2847bba2ae68f2c29aa52844081bab0a0e61976b8b9b5fc25cb185f8eb039481418b501ce36db628a8912bfbc95fce488121abe766de45cca39525f5fc433
7
+ data.tar.gz: 238e095ec0105f540326430af4e0445c02cdf9ee557780e87c6e10284f53aa6e97aa43be57c29747e343b4051a51c1f3bdfef782abea06e60f8164a5a7a3511b
data/README.rdoc CHANGED
@@ -8,34 +8,6 @@ OceanDynamo requires Ruby 2.0 and Ruby on Rails 4.0.0 or later.
8
8
  {<img src="https://badge.fury.io/rb/ocean-dynamo.png" alt="Gem Version" />}[http://badge.fury.io/rb/ocean-dynamo]
9
9
 
10
10
 
11
- ==== Installation
12
-
13
- gem install ocean-dynamo
14
-
15
- Then, locate the gem's directory and copy
16
-
17
- spec/dummy/config/initializers/aws.rb
18
-
19
- to your project's
20
-
21
- config/initializers/aws.rb
22
-
23
- Also copy
24
-
25
- spec/dummy/config/aws.yml.example
26
-
27
- to both the following locations in your project:
28
-
29
- config/aws.yml.example
30
- config/aws.yml
31
-
32
- Enter your AWS credentials in the latter file. Eventually, there
33
- will be a generator to copy these files for you, but for now you need to do it manually.
34
-
35
- You also need +fake_dynamo+ to run DynamoDB locally: see below for installation instructions.
36
- NB: You do not need an Amazon AWS account to run OceanDynamo locally.
37
-
38
-
39
11
  ==== Features
40
12
 
41
13
  As one important use case for OceanDynamo is to facilitate the conversion of SQL based
@@ -45,18 +17,17 @@ callbacks, exceptions and support methods. Ocean-dynamo follows this pattern clo
45
17
  is of course based on ActiveModel.
46
18
 
47
19
  The attribute and persistence layer of OceanDynamo is modeled on that of ActiveRecord:
48
- there's +save+, +save!+, +create+, +update+, +update!+, +update_attributes+ and all the other
49
- methods you're used to. The design goal is always to implement as much as possible of the
50
- ActiveRecord interface, without sacrificing scalability. This makes the task of switching
51
- from SQL to no-SQL much easier.
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 is always to implement as much
22
+ as possible of the ActiveRecord interface, without sacrificing scalability. This makes the
23
+ task of switching from SQL to no-SQL much easier.
52
24
 
53
25
  Thanks to its structural similarity to ActiveRecord, OceanDynamo works with FactoryGirl.
54
26
  To facilitate testing, future versions will keep track of and delete instances after tests.
55
27
 
56
- OceanDynamo will use primary and secondary indices to retrieve related table items,
28
+ OceanDynamo uses primary and secondary indices to retrieve related table items,
57
29
  which means it will scale without limits.
58
30
 
59
-
60
31
  ==== Example
61
32
 
62
33
  The following example shows the syntax.
@@ -115,22 +86,61 @@ Also, dynamo_schema takes args and many options. Here's the full syntax:
115
86
  end
116
87
 
117
88
 
118
- == Current State
89
+ === Current State
119
90
 
120
91
  At the moment, OceanDynamo is fully usable as an ActiveModel and can be used by Rails
121
92
  controllers. Furthermore, OceanDynamo implements much of the infrastructure of ActiveRecord;
122
93
  for instance, +read_attribute+, +write_attribute+, and much of the control logic and
123
94
  parameters.
124
95
 
125
- Relations are underway. Assocations will use secondary
126
- indices, up to the DynamoDB maximum of 5 secondary keys per table. At the moment,
127
- only find with a single id is implemented. Collections can not yet be obtained.
128
- Work has begun on the +has_many+ / +belongs_to+ association which requires only a primary index.
129
- After that, the +has_and_belongs_to_many+ association will be added.
96
+ At the moment, Model.find only takes a single id. Model.all and Model.count work as
97
+ expected. Model.find_each and Model.find_in_batches are also available.
98
+
99
+ Work has begun on the +has_many+ / +belongs_to+ association which requires only a primary
100
+ index. This association is even more efficient than its ActiveRecord counterpart.
101
+
102
+
103
+ === Future milestones
104
+
105
+ After the +has_many+ / +belongs_to+ association, the +has_and_belongs_to_many+ assocation
106
+ will be implemented. This will require secondary indices. This, and other associations will
107
+ use secondary indices. OceanDynamo will use association proxies to achieve the same kind of
108
+ interface as ActiveRecord, e.g.: <code>blog_entry.comments.build(body: "Cool!").save!</code>
109
+
110
+
111
+ === Current use
130
112
 
131
113
  OceanDynamo is currently used in the Ocean framework (http://wiki.oceanframework.net)
132
114
  e.g. to implement critical job queues. It will be used increasingly as features are
133
- added to OceanDynamo and will eventually replace all ActiveRecord tables.
115
+ added to OceanDynamo and will eventually replace all ActiveRecord tables in Ocean.
116
+
117
+
118
+ ==== Installation
119
+
120
+ gem install ocean-dynamo
121
+
122
+ Then, locate the gem's directory and copy
123
+
124
+ spec/dummy/config/initializers/aws.rb
125
+
126
+ to your project's
127
+
128
+ config/initializers/aws.rb
129
+
130
+ Also copy
131
+
132
+ spec/dummy/config/aws.yml.example
133
+
134
+ to both the following locations in your project:
135
+
136
+ config/aws.yml.example
137
+ config/aws.yml
138
+
139
+ Enter your AWS credentials in the latter file. Eventually, there
140
+ will be a generator to copy these files for you, but for now you need to do it manually.
141
+
142
+ You also need +fake_dynamo+ to run DynamoDB locally: see below for installation instructions.
143
+ NB: You do not need an Amazon AWS account to run OceanDynamo locally.
134
144
 
135
145
 
136
146
  == Documentation
@@ -32,6 +32,22 @@ module OceanDynamo
32
32
  end
33
33
 
34
34
 
35
+ def self.delete_all
36
+ dynamo_items.each() do |item|
37
+ item.delete
38
+ end
39
+ nil
40
+ end
41
+
42
+
43
+ def self.destroy_all
44
+ dynamo_items.select() do |item_data|
45
+ new._setup_from_dynamo(item_data).destroy
46
+ end
47
+ nil
48
+ end
49
+
50
+
35
51
  # ---------------------------------------------------------
36
52
  #
37
53
  # Instance variables and methods
@@ -42,5 +42,33 @@ module OceanDynamo
42
42
  result
43
43
  end
44
44
 
45
+
46
+ #
47
+ # Looping through a collection of records from the database (using the +all+ method,
48
+ # for example) is very inefficient since it will try to instantiate all the objects at once.
49
+ #
50
+ # In that case, batch processing methods allow you to work with the records in batches,
51
+ # thereby greatly reducing memory consumption.
52
+ #
53
+ def self.find_each(limit: nil, batch_size: 1000)
54
+ dynamo_items.select(limit: limit, batch_size: 1000) do |item_data|
55
+ yield new._setup_from_dynamo(item_data)
56
+ end
57
+ true
58
+ end
59
+
60
+
61
+ # #
62
+ # # Yields each batch of records that was found by the find options as an array. The size of
63
+ # # each batch is set by the :batch_size option; the default is 1000.
64
+ # #
65
+ # # You can control the starting point for the batch processing by supplying the :start option.
66
+ # # This is especially useful if you want multiple workers dealing with the same processing queue. You can make worker 1 handle all the records between id 0 and 10,000 and worker 2 handle from 10,000 and beyond (by setting the :start option on that worker).
67
+ # #
68
+ # # It’s not possible to set the order.
69
+ # #
70
+ # def self.find_in_batches(start: nil, batch_size: 1000)
71
+ # []
72
+ # end
45
73
  end
46
74
  end
@@ -1,3 +1,3 @@
1
1
  module OceanDynamo
2
- VERSION = "0.3.9"
2
+ VERSION = "0.3.10"
3
3
  end
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.9
4
+ version: 0.3.10
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+ and all the other\nmethods you're used to. The design goal is
148
- always to implement as much as possible of the\nActiveRecord interface, without
149
- sacrificing scalability. This makes the task of switching from\nSQL to no-SQL much
150
- easier.\n\nOceanDynamo will use secondary indices to retrieve related table items,
151
- \nwhich means OceanDynamo tables will scale without limits.\n\nThanks to its structural
152
- similarity to ActiveRecord, OceanDynamo works with FactoryGirl.\nTo facilitate testing,
153
- future versions will keep track of and delete instances after tests.\n\nSee also
154
- Ocean, a Rails framework for creating highly scalable SOAs in the cloud, in which\nocean-dynamo
155
- is used as a central component: http://wiki.oceanframework.net"
147
+ +update_attributes+, +find_each+,\nand all the other methods you're used to. The
148
+ design goal is always to implement as much \nas possible of the ActiveRecord interface,
149
+ without sacrificing scalability. This makes the \ntask of switching from SQL to
150
+ no-SQL much easier.\n\nThanks to its structural similarity to ActiveRecord, OceanDynamo
151
+ works with FactoryGirl.\nTo facilitate testing, future versions will keep track
152
+ of and delete instances after tests.\n\nOceanDynamo uses primary and secondary indices
153
+ to retrieve related table items, \nwhich means it will scale without limits.\n\nSee
154
+ also Ocean, a Rails framework for creating highly scalable SOAs in the cloud, in
155
+ which\nocean-dynamo is used as a central component: http://wiki.oceanframework.net"
156
156
  email:
157
157
  - peter@peterbengtson.com
158
158
  executables: []