DynamoDB ローカル
開発にはDynamoDB ローカルを使ってテスト可能。
DynamoDB ローカル (ダウンロード可能バージョン) のセットアップ - Amazon DynamoDB
型
- S: 文字列
- N: 数値
- など
詳細はデータ型記述子に記載がある。
パーティションキー
プライマリキーと同じようなもの。 ただし、パーティションを分割するために使われるため、 複合プライマリキーを使うときは、ばらつきについて考慮したほうがいいです。
- AWS Solutions Architect ブログ: 【AWS Database Blog】DynamoDB におけるパーティションキー設計の手引き
- テーブルのベストプラクティス - Amazon DynamoDB
Rubyでの呼び出し方法
Module: Aws::DynamoDB — AWS SDK for Ruby V3
Number型はBigDecimal型に変換されるようです。
値の格納
以下のようにします。HashはMapとして格納されます。 取り出し時は文字列でアクセスします(シンボルにできないのかな?)。
require 'aws-sdk'
client = Aws::DynamoDB::Client.new
item = {Id: "1", Contents: {'key1' => 'value1'}}
client.put_item(table_name: 'test', item: item)
# クエリなどで取り出した時はこんな感じで参照
puts response.items[0]["Contents"]['key1']
スキャン
全てのアイテムを走査します。
クエリ
以下のような感じです。
key_condition_expression
: プライマリキーのwhere相当:v1
: プレースホルダexpression_attribute_values
: プレースホルダの値を指定するところfilter_expression
: フィルタ(プライマリキー以外のwhere相当)
require 'aws-sdk'
client = Aws::DynamoDB::Client.new
response = client.query(
table_name: 'test',
key_condition_expression: "Id = :v1",
expression_attribute_values: {
":v1": "1"
}
)
キーに予約語や日本語などを使う場合
キーに日本語を含める場合。追加の方は特に問題ないが、 フィルタの考慮が必要。
以下のように、 expression_attribute_values
に入れる。
item = {Id: "1", Contents: {'key' => 'value1'}}
client.put_item(table_name: 'test', item: item)
response = client.query(
table_name: 'test',
key_condition_expression: "Id = :v1",
filter_expression: "Contents.#key1 = :v2",
expression_attribute_names: {
"#key1": "key",
},
expression_attribute_values: {
":v1": "1",
":v2": "value1"
},
)