Невероятно медленная запись в Amazon DynamoDB (PHP API)

Этот вопрос уже публиковался на форумах AWS, но до сих пор остается без ответа https://forums.aws.amazon.com/thread .jspa?threadID=94589

Я пытаюсь выполнить первоначальную загрузку длинного списка коротких элементов (около 120 миллионов из них), чтобы получить их позже по уникальному ключу, и это кажется идеальным случаем для ДинамоДб.

Тем не менее, моя текущая скорость записи очень низкая (примерно 8-9 секунд на 100 операций записи), что делает первоначальную загрузку практически невозможной (при нынешнем темпе это займет около 3 месяцев).

Я читал форумы AWS в поисках ответа и уже попробовал следующее:

  1. Я переключился с одиночных вызовов «put_item» на пакетную запись 25 элементов (рекомендуемый максимальный размер пакета), и каждый из моих элементов меньше 1 КБ (что также рекомендуется). Очень типично, что даже 25 моих элементов имеют размер менее 1 КБ, но это не гарантируется (и в любом случае не должно иметь значения, поскольку я понимаю, что для DynamoDB важен только размер одного элемента).

  2. Я использую недавно введенный регион ЕС (я нахожусь в Великобритании), указав его точку входа напрямую, вызвав set_region('dynamodb.eu-west-1.amazonaws.com'), поскольку, по-видимому, нет другого способа сделать это. что в PHP API. Консоль AWS показывает, что таблица находится в нужном регионе, так что все работает.

  3. Я отключил SSL, вызвав disable_ssl() (ускорение на 1 секунду на каждые 100 записей).

Тем не менее, тестовый набор из 100 элементов (4 вызова пакетной записи для 25 элементов) никогда не занимает меньше 8 секунд для индексации. Каждый запрос на пакетную запись занимает около 2 секунд, поэтому первый запрос не является мгновенным, а последующие запросы выполняются медленно.

Пропускная способность, выделенная моей таблицей, составляет 100 единиц записи и 100 единиц чтения, чего должно быть достаточно (на всякий случай пробовал и более высокие ограничения, безрезультатно).

Я также знаю, что есть некоторые расходы на сериализацию запросов, поэтому я, вероятно, могу использовать очередь для «накопления» своих запросов, но действительно ли это так важно для batch_writes? И я не думаю, что это проблема, потому что даже один запрос занимает слишком много времени.

Я обнаружил, что некоторые люди изменяют заголовки cURL (в частности, «Ожидание:») в API, чтобы ускорить запросы, но я не думаю, что это правильный способ, а также API был обновлен после этого совета. был опубликован.

Сервер, на котором запущено мое приложение, тоже в порядке — я читал, что иногда загрузка процессора зашкаливает, но в моем случае все в порядке, просто сетевой запрос занимает слишком много времени.

Я застрял. Могу ли я попробовать что-нибудь еще? Пожалуйста, не стесняйтесь запрашивать дополнительную информацию, если я не предоставил достаточно.

Есть другие недавние темы, по-видимому, по той же проблеме, здесь(пока нет ответа).

Этот сервис должен быть сверхбыстрым, поэтому я с самого начала был озадачен этой проблемой.

15
задан Simon Dugré 2 July 2012 в 20:51
поделиться