5

例(Botoを使用):

import boto

db = boto.connect_dynamodb()

table = db.get_table('MyTable')
res = table.scan(attributes_to_get=['id'], max_results=10)

for i in res:
    print i

テーブルに1,000個のオブジェクトがある場合、それらすべてをスキャンしますか、それとも10個後に停止しますか?これが実際に1,000個のオブジェクトすべてを読み取る場合、最初の10個のみを読み取るにはどうすればよいですか?

4

2 に答える 2

3

キャパシティー ユニットの計算に関するドキュメントによると、1 回のリクエストで最大 1MB のデータのみが分析されます。

スキャン操作の場合、スキャンによって返されたアイテムのサイズではなく、Amazon DynamoDB によって評価されたアイテムのサイズです。つまり、スキャンリクエストの場合、Amazon DynamoDB は最大 1 MB のアイテムを評価し、スキャン条件を満たすアイテムのみを返します。

1,000 個のアイテムのみを含むテーブルの場合、理論的には毎回すべてのテーブルを解析します。願わくば、'limit' パラメーター (最大値は 100) を使用してプロセスを早期に停止し、多くてもlimitアイテムが返されるようにします。

リクエストに条件がない場合、スキャンされたアイテムの数は結果の数になります。それ以外の場合は、はるかに大きくなる可能性がありますが、スキャンされたアイテムの累積サイズは 1 MB の境界を超えることはできません。

スキャンされた操作の場合、Amazon はユーザーが消費したと見なします

consumed_capacity = math.ceil(sum(parsed_data_size)/1KB)

しかし、私の言葉を鵜呑みにしないでください。

import boto
db = boto.connect_dynamodb()

# Notice the "layer1" operation
res = db.layer1.scan('MyTable', attributes_to_get=['id'], limit=10)

print res['ScannedCount']
于 2012-08-29T18:11:17.703 に答える