Этот вопрос уже публиковался на форумах AWS, но до сих пор остается без ответа https://forums.aws.amazon.com/thread .jspa?threadID=94589
Я пытаюсь выполнить первоначальную загрузку длинного списка коротких элементов (около 120 миллионов из них), чтобы получить их позже по уникальному ключу, и это кажется идеальным случаем для ДинамоДб.
Тем не менее, моя текущая скорость записи очень низкая (примерно 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 был обновлен после этого совета. был опубликован.
Сервер, на котором запущено мое приложение, тоже в порядке — я читал, что иногда загрузка процессора зашкаливает, но в моем случае все в порядке, просто сетевой запрос занимает слишком много времени.
Я застрял. Могу ли я попробовать что-нибудь еще? Пожалуйста, не стесняйтесь запрашивать дополнительную информацию, если я не предоставил достаточно.
Есть другие недавние темы, по-видимому, по той же проблеме, здесь(пока нет ответа).
Этот сервис должен быть сверхбыстрым, поэтому я с самого начала был озадачен этой проблемой.