Module: Dynamoid::Adapter::AwsSdk
Overview
The AwsSdk adapter provides support for the AWS-SDK for Ruby gem. More information is available at that Gem's Github page: https://github.com/amazonwebservices/aws-sdk-for-ruby
Constant Summary
- @@connection =
nil
Instance Method Summary (collapse)
-
- (Hash) batch_get_item(options)
Get many items at once from DynamoDB.
-
- (AWS::DynamoDB::Connection) connect!
Establish the connection to DynamoDB.
-
- (AWS::DynamoDB::Connection) connection
Return the established connection.
-
- (Object) create_table(table_name, key = :id, options = {})
Create a table on DynamoDB.
-
- (Object) delete_item(table_name, key, options = {})
Removes an item from DynamoDB.
-
- (Object) delete_table(table_name)
Deletes an entire table from DynamoDB.
- - (Object) get_item(table_name, key, options = {})
- - (Object) get_table(table_name)
-
- (Object) list_tables
List all tables on DynamoDB.
-
- (Object) put_item(table_name, object)
Persists an item on DynamoDB.
-
- (Array) query(table_name, opts = {})
Query the DynamoDB table.
-
- (Array) scan(table_name, scan_hash, select_opts)
Scan the DynamoDB table.
- - (Object) table_cache
Instance Method Details
- (Hash) batch_get_item(options)
Get many items at once from DynamoDB. More efficient than getting each item individually.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 43 def batch_get_item() hash = Hash.new{|h, k| h[k] = []} return hash if .all?{|k, v| v.empty?} .each do |t, ids| Array(ids).in_groups_of(100, false) do |group| batch = AWS::DynamoDB::BatchGet.new(:config => @@connection.config) batch.table(t, :all, Array(group)) unless group.nil? || group.empty? batch.each do |table_name, attributes| hash[table_name] << attributes.symbolize_keys! end end end hash end |
- (AWS::DynamoDB::Connection) connect!
Establish the connection to DynamoDB.
20 21 22 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 20 def connect! @@connection = AWS::DynamoDB.new(:access_key_id => Dynamoid::Config.access_key, :secret_access_key => Dynamoid::Config.secret_key, :dynamo_db_endpoint => Dynamoid::Config.endpoint) end |
- (AWS::DynamoDB::Connection) connection
Return the established connection.
29 30 31 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 29 def connection @@connection end |
- (Object) create_table(table_name, key = :id, options = {})
Create a table on DynamoDB. This usually takes a long time to complete.
65 66 67 68 69 70 71 72 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 65 def create_table(table_name, key = :id, = {}) [:hash_key] ||= {key.to_sym => :string} read_capacity = [:read_capacity] || Dynamoid::Config.read_capacity write_capacity = [:write_capacity] || Dynamoid::Config.write_capacity table = @@connection.tables.create(table_name, read_capacity, write_capacity, ) sleep 0.5 while table.status == :creating return table end |
- (Object) delete_item(table_name, key, options = {})
Removes an item from DynamoDB.
81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 81 def delete_item(table_name, key, = {}) range_key = .delete(:range_key) table = get_table(table_name) result = if table.composite_key? table.items.at(key, range_key) else table.items[key] end result.delete unless result.attributes.to_h.empty? true end |
- (Object) delete_table(table_name)
Deletes an entire table from DynamoDB. Only 10 tables can be in the deleting state at once, so if you have more this method may raise an exception.
99 100 101 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 99 def delete_table(table_name) @@connection.tables[table_name].delete end |
- (Object) get_item(table_name, key, options = {})
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 117 def get_item(table_name, key, = {}) range_key = .delete(:range_key) table = get_table(table_name) result = if table.composite_key? table.items.at(key, range_key) else table.items[key] end.attributes.to_h() if result.empty? nil else result.symbolize_keys! end end |
- (Object) get_table(table_name)
Add an UpdateTable method.
202 203 204 205 206 207 208 209 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 202 def get_table(table_name) unless table = table_cache[table_name] table = @@connection.tables[table_name] table.load_schema table_cache[table_name] = table end table end |
- (Object) list_tables
List all tables on DynamoDB.
136 137 138 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 136 def list_tables @@connection.tables.collect(&:name) end |
- (Object) put_item(table_name, object)
Persists an item on DynamoDB.
146 147 148 149 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 146 def put_item(table_name, object) table = get_table(table_name) table.items.create(object.delete_if{|k, v| v.nil? || (v.respond_to?(:empty?) && v.empty?)}) end |
- (Array) query(table_name, opts = {})
Query the DynamoDB table. This employs DynamoDB's indexes so is generally faster than scanning, but is only really useful for range queries, since it can only find by one hash key at once. Only provide one range key to the hash.
167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 167 def query(table_name, opts = {}) table = get_table(table_name) consistent_opts = { :consistent_read => opts[:consistent_read] || false } if table.composite_key? results = [] table.items.query(opts).each {|data| results << data.attributes.to_h(consistent_opts).symbolize_keys!} results else get_item(table_name, opts[:hash_value]) end end |
- (Array) scan(table_name, scan_hash, select_opts)
Scan the DynamoDB table. This is usually a very slow operation as it naively filters all data on the DynamoDB servers.
189 190 191 192 193 194 195 196 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 189 def scan(table_name, scan_hash, select_opts) table = get_table(table_name) results = [] table.items.where(scan_hash).select(select_opts) do |data| results << data.attributes.symbolize_keys! end results end |
- (Object) table_cache
211 212 213 |
# File 'lib/dynamoid/adapter/aws_sdk.rb', line 211 def table_cache @table_cache ||= {} end |