当我在Dynamodb中执行scan()而没有过滤器并且只检索10个对象时,它是否仍然可以访问整个数据库?

ens*_*are 5 python boto amazon-web-services amazon-dynamodb

例如(使用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
Run Code Online (Sandbox Code Playgroud)

如果我的桌子上有1000个物体,它会扫描所有物体,还是10点后停止?如果这确实读取了所有1,000个对象,我怎么能只读取前10个?

yad*_*taf 3

根据容量单位计算文档,每个请求最多只能分析1MB的数据。

对于扫描操作,它不是扫描返回的项目的大小,而是 Amazon DynamoDB 评估的项目的大小。也就是说,对于扫描请求,Amazon DynamoDB 最多评估 1 MB 的项目,并仅返回满足扫描条件的项目。

对于“仅”包含 1,000 个项目的表,理论上它每次都会解析所有表。希望“limit”参数(其最大值为 100)能够提前停止该过程,以便最多limit返回项目。

如果您的请求不涉及任何条件,则扫描的项目数将为结果数。否则,它可能会大得多,但扫描项目的累积大小不能超过 1MB 边界。

对于扫描操作,亚马逊会认为您已消费

consumed_capacity = math.ceil(sum(parsed_data_size)/1KB)
Run Code Online (Sandbox Code Playgroud)

但请不要相信我的话:

import boto
db = boto.connect_dynamodb()

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

print res['ScannedCount']
Run Code Online (Sandbox Code Playgroud)