gpt4 book ai didi

python - DynamoDB 并行扫描不拆分结果

转载 作者:行者123 更新时间:2023-11-28 19:29:06 24 4
gpt4 key购买 nike

我正在使用 SegmentTotalSegments 参数将我的 DynamoDB 扫描拆分给多个工作人员(如开发人员指南的 Parallel Scan section 所示)。

但是,所有结果都会返回给一名工作人员。这里可能是什么问题?我实现线程的方式可能存在问题吗?

import threading
import boto3

def scan_foo_table(foo, segment, total_segments):
print 'Looking at segment ' + str(segment)
session = boto3.session.Session()
dynamoDbClient = session.client('dynamodb')
response = dynamoDbClient.scan(
TableName='FooTable',
FilterExpression='bar=:bar',
ExpressionAttributeValues={
':bar': {'S': bar}
},
Segment=segment,
TotalSegments=total_segments,
)
print 'Segment ' + str(segment) + ' returned ' + str(len(response['Items'])) + ' items'

def create_threads(bar):
thread_list = []
total_threads = 3

for i in range(total_threads):
# Instantiate and store the thread
thread = threading.Thread(target=scan_foo_table, args=(bar, i, total_threads))
thread_list.append(thread)

# Start threads
for thread in thread_list:
thread.start()

# Block main thread until all threads are finished
for thread in thread_list:
thread.join()

def lambda_handler(event, context):
create_threads('123')

输出:

Looking at segment 0
Looking at segment 1
Looking at segment 2
Segment 1 returned 0 items
Segment 2 returned 0 items
Segment 0 returned 10000 items

最佳答案

过滤表达式让我印象深刻。

有可能匹配你的过滤表达式的项目都位于第一个段中。

还值得注意的是,并行扫描不会拆分项目,但会拆分搜索项目的键空间。可以把它想象成将一条非常大的高速公路分成多条车道。有可能大多数汽车都在快车道上,而您在其他车道上看不到任何汽车。

虽然在这种情况下,过滤器表达式似乎更有可能导致只有一个段返回项目。

关于python - DynamoDB 并行扫描不拆分结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39374617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com