2016-04-19 17 views
0

このメソッドを使ってdynamodbからデータを取得しました。しかし、私は(Where句は、名前とアドレスでデータを取得する)DAOレイヤのDynamoDBでフィルタを適用する方法は?

をフィルタを適用したりすることができますどのようにパブリッククラスCustomerDAOはAbstractDAOあな​​たはあなたのスキャンにFilterExpressionを適用する必要がDynamodbDAO {

@Override 
public Class<Customer> getClazz() { 
    return Customer.class; 
} 
public List<Customer> getByUserId(String userId) { 

     return getDynamoDB().scan(
       getClazz(), 
       new DynamoDBScanExpression().withFilterExpression(
         "USER_ID = :userId") 
         .addExpressionAttributeValuesEntry(":userId", 
           new AttributeValue().withS(userId))); 
    } 
} 
} 
+0

私はプライマリパーティションキーとしてCustomerIDを持っています。フィルタのプライマリソートキーを定義する必要がありますか? – Parvesh

答えて

0

を実装して拡張します。この式を使用して、各項目の任意の属性にフィルタリングロジックを適用できます(詳細はhereを参照)。このフィルタリングは、DynamoDBによってサーバー側に適用されるため、一致する結果だけが返されますが、データを取得するために取った読み取りIOに対しては依然として "支払う"ことができます。

関連する問題として、通常はDynamoDBテーブルのスキャンを避ける必要があります。テーブル内のすべてのアイテムを読み取る必要があります。テーブルが非常に小さい場合を除き、大量の読み取りIOが発生し、返されるまでに時間がかかります。ハッシュまたは範囲キーを使用してクエリを実行して、必要なデータに直接アクセスできるようにする必要があります。これをテーブルのプライマリハッシュ/範囲キーに適用できない場合は、グローバルなセカンダリインデックスを作成して、必要なデータに直接アクセスできるようにする必要があります。

関連する問題