Можете ли вы писать в Dynamodb одновременно из параллельных или асинхронных функций, находясь в свободном слое? - PullRequest
0 голосов
/ 05 октября 2019

выполнение без параллельных функций: время = x

выполнение с 4 параллельными функциями: время = x / 4

Когда выполняется код с 4 параллельными функциями, общее время неделится на 4, но поддерживается.

мой вопрос: поддерживает ли Dynamodb параллельные записи в таблицу функций?

def patronfanin_out(event, context):
    for i in range(4):
        x= list #aqui envio una lista nueva para cada función
        response = lambda_client.invoke(
        FunctionName="tesis-aws-patrones-dev-workers",
        InvocationType='Event',
        Payload=json.dumps(x)
      )

def workers(event, context):
  table = boto3.resource('dynamodb').Table('patron2')
  rowsFinal = event['list']
  for row in rowsFinal:
    table.put_item(Item={
        'id': str(uuid.uuid4()),
        'serie': row[0],
        'rank': row[1],
        'discipline': row[2],
        'sex': row[3],
        'salary': row[4]
        })
  response = {
      "statusCode": 200,
      "params" : rowsFinal
  }
  return response

Я бы хотел, чтобы общее время выполнения функции значительно уменьшилось, посколькуЯ использую 4 параллельные функции. общее время выполнения: x общее время выполнения желание: x / 4

1 Ответ

0 голосов
/ 06 октября 2019
  for row in rowsFinal:
    table.put_item(Item={
        'id': str(uuid.uuid4()),
        'serie': row[0],
        'rank': row[1],
        'discipline': row[2],
        'sex': row[3],
        'salary': row[4]
        })

Это, кажется, не работает параллельно, но итеративным образом

РЕДАКТИРОВАТЬ

invoke , как указанов https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html#Lambda.Client.invoke синхронно, ждет ответа.

Используйте invoke_async https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html#Lambda.Client.invoke_async, и они будут работать параллельно.

РЕДАКТИРОВАТЬ 2

вместо table.put_item используйте batch_write_item()

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.batch_write_item

И сгруппируйте их по максимум 25 элементам или 16 МБ всего https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...