Извлечение большого объема данных из таблицы dynamo DB с использованием первичного ключа

#amazon-web-services #amazon-dynamodb

#amazon-веб-сервисы #amazon-dynamodb

Вопрос:

Я новичок в dynamo DB, у меня есть требование, в соответствии с которым мне нужно получить около 120 миллионов строк из таблицы dynamo DB. Критерии для выборки основаны на PK (в основном мне нужно получить все строки, относящиеся к шаблону первичного ключа CAR_ ********). Единственный способ, который я могу придумать, — это выполнить операцию get, но это отнимает много времени. Я также искал вариант массового получения, но у него тоже есть ограничение в 100 строк или 16 МБ данных.

Итак, может кто-нибудь предложить лучший и более быстрый подход к извлечению этих данных?

Комментарии:

1. Требуется ли извлекать все 120 миллионов записей за ОДНУ операцию чтения?

2. Можете ли вы поделиться фактическим запросом?

3. Потенциальная проблема XY здесь. Можете ли вы объяснить, почему вам нужно извлекать 120 миллионов элементов? Какую проблему вы принципиально пытаетесь решить?

4. @jarmod Мне нужны некоторые конкретные поля JSON из этих выбранных строк. На самом деле, мы загрузили эти данные в хранилище данных (snowflake) с задержкой в 4-5 месяцев. Таким образом, эти обязательные поля JSON недоступны в snowflake в этот период. Итак, я использую свою таблицу dynamo напрямую для запроса этих ключей и извлечения из нее необходимых атрибутов JSON.

5. @SethGeoghegan я использовал обычный запрос get: «access_key = «CAR_» str(car_id) response = table.get_item( Key={ «EntityId»: access_key} ) « Я перебираю все возможные комбинации ключей и получаю доступ к таблице dynamo, используя упомянутый кодвыше.

Ответ №1:

Во-первых, DynamoDB оптимизирован для хранения и извлечения отдельных объектов данных по первичному ключу. Если вам необходимо регулярно извлекать или обновлять миллионы строк, вам следует поискать альтернативное хранилище данных.

Учитывая это, если это одноразовая задача, я рекомендую развернуть базу данных Redshift и использовать команду COPY для извлечения данных из Dynamo. Затем вы можете загрузить эти данные с помощью одной инструкции SQL.

Если вы не хотите этого делать или ожидаете получения данных более одного раза, вам необходимо использовать API сканирования. Это вернет не более 1 МБ на вызов, поэтому вам нужно будет вызывать его в цикле.

В любом случае, вам почти наверняка потребуется увеличить объем чтения, чтобы справиться с этой задачей.