web-dev-qa-db-ja.com

テーブルにキーが含まれている場合はすばやくクエリを実行します(DynamoDBおよびJava)

ハッシュと範囲の複合キーを持つテーブルがあります。
AWS SDK forJavaのGetItemを使用してアイテムをクエリできます。 GetItemは、オブジェクトが見つからない場合はnullを返し、アイテムはMap<String, AttributeValue>として返します。
オブジェクトが存在するかどうかを確認するための最速のアプローチを探しています
次のような.withAttributesToGetを提供することを考えていました。

GetItemResult result =  dbClient.getItem(new GetItemRequest().
    withTableName(TABLE_NAME).
        withKey(new Key(new AttributeValue().withS(hashKey),
                        new AttributeValue().withS(rangeKey))).
        withAttributesToGet(new ArrayList<String>()));
Map<String, AttributeValue> item = result.getItem();
return (item != null);

もう1つの最適化は、SDK JSONパーサーを使用せず、応答を自分で解析して、アイテムが返されたかどうかをすばやく確認することです。

ありがとう

18
Chen Harel

「取得」と「取得」の速度の違いはごくわずかだと思います。先に進んで、GetItem自体を使用できます。アイテムが大きすぎる可能性がある場合は、返される属性を制限してください。

ボトルネックは、Dynaamo DBサーバー(REST API)に到達するまでの待ち時間と、インデックスからのフェッチにあります。したがって、取得とチェックは同じ速度になります。呼び出しを発行するサーバーがDynamoDBと同じリージョンにあることを確認します-これは速度に最大の影響を与えます。

17
Sony Kadavan

取得する属性としてハッシュキーのみを指定することで、パフォーマンスが向上し、スループットを無駄にすることがなくなります。

5
Ashwin Patti