【问题标题】:DynamoDB Parallel Scan not splitting resultsDynamoDB Parallel Scan 不拆分结果
【发布时间】:2017-01-15 10:09:15
【问题描述】:

我正在使用 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 amazon-dynamodb boto aws-lambda


    【解决方案1】:

    让我印象深刻的一件事是过滤器表达式。

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

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

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

    【讨论】:

      【解决方案2】:

      您正在创建 DynamoDB 会话和客户端并在所有线程之间共享。如果你看这个例子,他们不会那样做。尝试创建会话和客户端,以便每个线程都有自己的,这个问题可能会消失。

      【讨论】:

        猜你喜欢
        • 2018-04-02
        • 2017-11-26
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多