Как записать огромный json файл в DynamodB? - PullRequest
0 голосов
/ 11 марта 2020

Я хочу записать очень большой файл json (> 10 ГБ) в DynamodB. Файл json состоит из следующего:

[
{"id": "000", "bar": 2, ... },
{"id": "001", "bar": 2, ... },
...
]

Как записать этот большой файл в DynamodB?

Ответы [ 2 ]

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

Проще говоря, вам просто нужно сделать PutItem для каждого элемента в массиве (используйте BatchWrite для лучшей производительности). sh Это можно сделать несколькими способами.

  1. Локально запустить некоторый код, который работает с вашим файлом и вызывает DynamoDB. Если это одноразовая вещь, я бы, вероятно, воспользовался этим подходом.
  2. Запустите код в лямбда-выражении. Если это то, что вы будете делать часто, я бы использовал этот подход. Есть некоторые вещи, которые следует учитывать здесь.
    1. Как мне запустить лямбду? Я бы предложил записать файл в S3 и добавить событие в корзину S3, которое вызывает вашу лямбду. Это позволит вам автоматизировать обработку при каждой загрузке нового файла.
    2. Обработка действительно больших файлов. 10 ГБ больше, чем лямбда, сможет хранить во временном файле, но вы можете передавать данные и обрабатывать их из потока. Это должно быть достаточно просто, когда структура JSON проста (root является массивом). Если вы попали в C#, библиотека Newtonsoft (стандартная библиотека JSON) имеет встроенные возможности потоковой передачи; Я предполагаю, что другие библиотеки делают то же самое.
    3. Помните о времени обработки. Если вы не можете безопасно обработать файл за 15-минутный максимум для лямбды, тогда вам нужно подумать, как вы решаете эту проблему. Опять же, есть варианты, хотя размер вашего файла может ограничивать эти параметры (из головы не могу вспомнить, например, как бы вы использовали пошаговые функции).

Есть, конечно, много других вариантов. Я только что перечислил два, которые я, скорее всего, рассмотрю.

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

Один путь будет -

1. Store the file on AWS S3

2. Create an event on S3 when a new file is PUT

3. You will need a compute application which downloads the file and processes it, 
   now there are many fancy ways to do this, 
   based on how much you wish to spend on processing large files

4. Read each Object in your file array and send it to AWS SQS

5. Create a trigger on AWS SQS for an AWS Lambda function

6. The Lambda function can store your data on AWS DynamoDb, 
   make sure you have logic for failed puts, 
   as your file may or may not have duplicate ids, just to be sure.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...