なお、ローカルセカンダリインデックスを使うためには、ライブラリのパッケージは
com.amazonaws.services.dynamodbv2.*以下を使用することになるので注意してください。
ローカルセカンダリインデックスを持つテーブルの作成
テーブル作成時にローカルセカンダリインデックスを定義する必要があります。事後にインデックスを追加することはできないので要注意ですね。
Index Name名というのがよくわからないので、Attributeの名前を同じにしました。
データクラスにアノテーションを記述する
アノテーションの記述方法ですが、ローカルセカンダリインデックスに相当するAttributeについては、
@DynamoDBIndexRangeKey(localSecondaryIndexName ="age") public int getAge() { return age; } public void setAge(int age) { this.age = age; }というようにします。
ローカルセカンダリインデックスで検索をかける
従来のRangeKeyに対する検索の方法と同じです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//条件の定義 | |
Condition SecondaryCondition = new Condition() | |
.withComparisonOperator(ComparisonOperator.EQ.toString()) | |
.withAttributeValueList(new AttributeValue().withN(Integer.toString(20))); | |
//クエリーの設定 | |
DynamoDBQueryExpression<TestDynamo> queryExpression = new DynamoDBQueryExpression<TestDynamo>() | |
.withRangeKeyCondition("age", SecondaryCondition) | |
.withHashKeyValues(key); | |
//クエリーの実行 | |
List<TestDynamo> result = mapper.query(TestDynamo.class, queryExpression); |
ローカルセカンダリインデックスの特徴
個人的にポイントと思っているのは下記の点です。
- テーブル毎に最大5つのローカルセカンダリインデックスを作成可能
- あくまでも従来のレンジキーに対する代替
- 複数のローカルセカンダリインデックスを組み合わせた検索は不可
- 従来のレンジキーとの組み合わせも不可
- 紐付けるAttributeによってコストが増える?
APIの仕様が若干変化している点に注意
パッケージがcom.amazonaws.services.dynamodbv2に変わるとともに、微妙にAPIの仕様が変わってます。今までのコードが動かなくなる可能性が高いので注意が必要でしょう。現状すでにDynamoDBで運用している場合は、移行の際は注意した方がいいです。
0 件のコメント:
コメントを投稿