DynamoDb, как обрабатывать большие транзакции - PullRequest
0 голосов
/ 24 марта 2020

В моем случае использования у меня есть пользователь, который загружает CSV-файл с 60k строк, каждая строка предпочтительно является записью в DynamoDb.

Пользователь имеет возможность загружать файл в любое время. Когда он загружает новый файл, старые данные должны быть удалены и заменены. В базе данных SQL вы должны:

  • открыть транзакцию
  • removeAllFromDb ()
  • сохранить () каждую запись в базе данных
  • транзакция закрытия / отката

Данные, которые я храню, действительно соответствуют хранилищу объектов, связи отсутствуют. Плюс экономическая эффективность DynamoDb приносит Aurora.

Поскольку пакетные операции DynamoDb могут обрабатывать только 25 объектов на один запрос, и важно сохранить старые данные, если по какой-то причине новый файл не может быть полностью обработан.

Есть ли чистый способ добиться этого с DynamoDb?

1 Ответ

0 голосов
/ 24 марта 2020

Похоже, вы должны взглянуть на управление версиями в DDB.

Использование ключей сортировки для контроля версий

  • Для для каждого нового элемента создайте две копии элемента: одна копия должна иметь нулевой префикс номера версии (например, v0_) в начале
    ключа сортировки, а один должен иметь префикс номера версии один
    (например, v001 _).

  • Каждый раз, когда элемент обновляется, используйте следующий более высокий префикс версии в ключе сортировки обновленной версии и копируйте обновленное содержимое в элемент с нулевым префиксом версии. Это означает, что последнюю версию любого элемента можно легко найти, используя нулевой префикс

РЕДАКТИРОВАТЬ
Фактически вы не удалите строки в этот сценарий ... Но да, в середине обновлений был момент, когда пользователь мог получить как старые, так и новые данные. Это идея, стоящая в конечном итоге непротиворечивой.

Если вы не можете с этим жить, зачем вообще нужен DDB?

Похоже, вам лучше обслужить, храня сделайте c в S3 и используйте Athena для запроса.

...