Loading [MathJax]/extensions/tex2jax.js

2015-06-26

DynamoDB: グローバルセカンダリインデックスを使ってみた(DynamoDBMapper利用編)

ネタ的には古いですが、DynamoDBのグローバルセカンダリインデックスを、高レベルAPIであるDynamoDBMapperクラスから利用してみました。Javaでの記述方法について紹介します。

想定環境
この記事では下記のようなテーブルを作成したとして説明します。
  • テーブルの構造は「ハッシュキー:id、レンジキー:a、通常のアトリビュート:v」
  • このテーブルに対して、「ハッシュキー:v、レンジキー:a」というグローバルインデックスを設定(このインデックス名を「v-a-index」とする)
記述例
例を下記に示しますが、悩みどころはアノテーションの書き方でしたね。複数のアノテーションの書き方に悩みました。あとは、通常の検索方法と変わらないと思います。

//// 以下、マッパークラス抜粋
//@DynamoDBRangeKey(attributeName="a")
@DynamoDBRangeKey
@DynamoDBIndexRangeKey(attributeName="a",globalSecondaryIndexName ="v-a-index")
public String getAItem() {
return relation;
}
public void setRItem(String relation) {
this.relation = relation;
}
//@DynamoDBIndexHashKey(attributeName="v")
@DynamoDBAttribute
@DynamoDBIndexHashKey(attributeName="v",globalSecondaryIndexName="v-a-index")
public String getValue() {
return this.value;
}
///// ここまでマッパークラスの記述
////  以下検索の例
DynamoDBQueryExpression<DynaItem> expression = new DynamoDBQueryExpression<DynaItem>();
expression.withConsistentRead(false);
// 利用するグローバルセカンダリインデックス名を指定
expression.withIndexName("v-a-index");
// Hash キーの指定
DynaItem dti = new DynaItem();
dti.setValue(value); //vがハッシュキーになる点に注意
expression.withHashKeyValues(dti);
// Range キーの指定
expression.withRangeKeyCondition("a", new Condition().withComparisonOperator(
ComparisonOperator.BEGINS_WITH.toString()).withAttributeValueList(
new AttributeValue().withS(aValue))); //レンジキーであるaの値をここに入力
// 検索結果を取得
List<DynaItem> res = mapper.query(DynaItem.class,expression);


2015-06-18

Eclipse:GWTプロジェクトで 「missing required argument 'modules」と言われた場合の対処法

EclipseのGoogle Web Applicationプロジェクトにおいて、
  • missing required argument 'modules
みたいなエラーが出る時があります。これは、結論から言えば、
  • GWTを有効化しているのにGWTのモジュールが定義されてない
場合に発生します。
おちラボでは、Jettyがついてくるという手軽さを利用してGWTを使わない場合でも「Google Web Application」でプロジェクトを生成する場合があるのですが、その際によく陥るエラーですね。

解決方法としては、なんでもいいからGWT Moduleを作っておけばOKです。