J'utilise les paramètres Segment
et TotalSegments
pour diviser mon scan DynamoDB sur plusieurs travailleurs (comme indiqué dans le Parallel Scan section du guide du développeur).DynamoDB Parallel Scan ne divise pas les résultats
Cependant, tous les résultats sont renvoyés à un seul opérateur. Quel pourrait être le problème ici? Est-ce qu'il y a peut-être un problème avec la façon dont j'ai implémenté le threading?
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')
Sortie:
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