2016-09-13 13 views

答えて

2

パーティションキー(テーブルで使用されている場合はソートキー)を把握している単一のアイテムを効率的に検索するために、GetItemはクエリまたはスキャンよりも効率的です。 BatchGetItemは、パーティション/ソートキーを知っている一連のアイテムを取得する便利な方法で、ネットワークトラフィックの節約という点でより効率的です。

ただし、アイテムに関する部分的な情報しかない場合は、GetItem/BatchGetItemを使用することはできず、スキャンするアイテムまたは気になるアイテムをクエリする必要があります。このような場合、問合せでは、すでに表領域を単一のパーティションのキー値に絞り込んでいるため、問合せはスキャンよりも効率的になります。フィルタ式は実際に効率に寄与しませんが、ネットワークトラフィックを節約できます。

多数のアイテムを取得する必要がある場合もあります。同じパーティションキーを持つ多数の項目が必要な場合、クエリは複数のGetItem(またはBatchGetItem呼び出し)よりも効率的になります。また、テーブルの重要な部分を構成するアイテムを取得する必要がある場合は、スキャンが必要です。

+0

「フィルタ式は実際に効率に寄与しませんが、ネットワークトラフィックを節約できます」と言います。私は、フィルタリングされた結果がより少ないデータを返すことを理解しています。たとえば、フィルタ式の一部として文字列セットに対して複数のIN演算子が実行された場合はどうなりますか?私はそのようなパターンの効率に関する情報を見つけることができません。乾杯。 – theSiberman

+0

絶対に真実。ネットワーク帯域幅の面では、フィルタリングが実際に大規模であると仮定して、クライアントではなくサーバーでフィルタリングすることで、大幅に節約できます。また、接続が遅いと効果はさらに大きくなります。 DynamoDBを使用すると、クエリごとに最大1MBのデータを取得できるため、フィルタ処理された結果セットの希薄さに応じて、クエリごとに数キロバイトから1メガバイトのどこでも可能です。私は複数のIN句に関してどのような効率性が言及されているのかよくわかりません。 –

+0

IN演算子はクライアントに返される前に結果に適用されるため、オーバーヘッドは無視できます。 –

関連する問題