Этот вопрос уже публиковался на форумах AWS, но до сих пор остается без ответа https://forums.aws.amazon.com/thread.jspa?threadID=94589
Я пытаюсь выполнить первоначальную загрузку длинного списка коротких элементов (около 120 миллионов из них), чтобы получить их позже с помощью уникального ключа, и это кажется идеальным случаем для DynamoDb.
Однако моя текущая скорость записи очень низкая (примерно 8-9 секунд на 100 записей), что делает первоначальную загрузку практически невозможной (при текущем темпе это займет около 3 месяцев).
Я читал форумы AWS в поисках ответа и уже пробовал следующие вещи:
Я переключился с одиночных вызовов «put_item» на пакетную запись 25 элементов (рекомендуемый максимальный размер пакетной записи), и каждый из моих элементов меньше 1 КБ (что также рекомендуется). Очень типично, что даже 25 моих элементов также имеют размер менее 1 КБ, но это не гарантируется (и в любом случае не должно иметь значения, поскольку я понимаю, что для DynamoDB важен только размер одного элемента).
Я использую недавно введенный регион ЕС (я нахожусь в Великобритании), указав его точку входа напрямую, вызвав set_region('dynamodb.eu-west-1.amazonaws.com'), поскольку в PHP, по-видимому, нет другого способа сделать это. API. Консоль AWS показывает, что таблица находится в нужном регионе, так что все работает.
Я отключил SSL, вызвав disable_ssl() (получив 1 секунду на 100 записей).
Тем не менее, тестовый набор из 100 элементов (4 вызова пакетной записи для 25 элементов) никогда не занимает меньше 8 секунд для индексации. Каждый запрос на пакетную запись занимает около 2 секунд, поэтому первый запрос не является мгновенным, а последующие запросы выполняются медленно.
Пропускная способность, предоставленная моей таблицей, составляет 100 единиц записи и 100 единиц чтения, чего должно быть достаточно (на всякий случай также пробовал более высокие пределы, безрезультатно).
Я также знаю, что есть некоторые расходы на сериализацию запросов, поэтому я, вероятно, могу использовать очередь для «накопления» своих запросов, но действительно ли это так важно для batch_writes? И я не думаю, что это проблема, потому что даже один запрос занимает слишком много времени.
Я обнаружил, что некоторые люди изменяют заголовки cURL (в частности, «Ожидание:») в API, чтобы ускорить запросы, но я не думаю, что это правильный способ, а также API был обновлен с тех пор, как этот совет был опубликован.
Сервер, на котором работает мое приложение, тоже в порядке - я читал, что иногда загрузка процессора зашкаливает, но в моем случае все в порядке, просто сетевой запрос занимает слишком много времени.
Я застрял сейчас - есть ли что-нибудь еще, что я могу попробовать? Пожалуйста, не стесняйтесь запрашивать дополнительную информацию, если я не предоставил достаточно.
Есть и другие недавние темы, по-видимому, по той же проблеме, здесь (нет ответ пока что).
Этот сервис должен быть сверхбыстрым, поэтому я действительно озадачен этой проблемой в самом начале.
SqlBulkCopy
данные. SQL Server — это веб-масштаб, если вы спрашиваете. - person ta.speot.is   schedule 21.05.2012