DynamoDBのorder byに関して
前回の記事でDynamoDBはorder byは出来ないと思っていたのですが、簡単な奴だったらできるみたいです。
order byできる条件として、、、
- hashとrangeキーが設定されていること。
- rangeキーを元にソートする。
- queryだけの場合のみ使える。(scanでは使用できない。)
以下がサンプルプログラムです。
DynamoDBテーブル構成
hash_key | range_key |
mori | 2002-01 |
yoshida | 2002-11 |
suzuki | 1999-01 |
suzuki | 2000-09 |
suzuki | 2001-02 |
suzuki | 2008-06 |
suzuki | 2009-01 |
tanaka | 2001-01 |
tanaka | 2001-10 |
プログラム
require 'aws-sdk' require 'pp' dynamo_db = AWS::DynamoDB.new( :access_key_id => '*****', :secret_access_key => '*****', :dynamo_db_endpoint => 'dynamodb.ap-northeast-1.amazonaws.com' ) table = dynamo_db.tables["test"] table.hash_key = [:name, :string] table.range_key = [:date, :string] table.items.query(:hash_value => "suzuki", :scan_index_forward => true).each {|i| pp i.attributes["date"] }
結果
"1999-01"
"2000-09"
"2001-02"
"2008-06"
"2009-01"
「scan_index_forward => true」をfalseにすると逆になります。
"2009-01"
"2008-06"
"2001-02"
"2000-09"
"1999-01"
まとめ
かなり制限されていますが、使用することは可能です。
DynamoDBはイケイケで使うよりは、ちゃんと設計してから構築したほうが良いです。
rangeキーが3つぐらい設定出来ればいいのに・・・