AWS BatchGetItem и GetItem параллельно

Есть ли большая разница (по времени) в использовании BatchGetItem по сравнению с параллельным выпуском нескольких GetItem?

Мой код будет чище, если я смогу использовать GetItem и сам буду заниматься распараллеливанием.

Однако, если у BatchGetItem есть определенное преимущество в производительности по времени, я бы, безусловно, использовал это.


person Lawrence Wagerfield    schedule 01.12.2020    source источник


Ответы (1)


BatchGetItem уже работает параллельно:

Чтобы свести к минимуму задержку ответа, BatchGetItem извлекает элементы параллельно.

Хотя у меня нет тестов для вас, один BatchGetItem может обрабатывать до 100 элементов параллельно. Также BatchGetItem является одиночным вызовом API. Таким образом, выполнение одного вызова API для получения 100 элементов должно быть намного быстрее, чем выполнение 100 отдельных вызовов API с использованием GetItem только из-за задержки в сети.

person Marcin    schedule 01.12.2020
comment
Таким образом, выполнение одного вызова API для получения 100 элементов должно быть намного быстрее, чем выполнение 100 отдельных вызовов API с использованием GetItem только из-за задержки в сети. Нет, если эти 100 отдельных вызовов API теоретически выполняются параллельно. Время операции просто MAX(all_request_times). Как вы сказали: BatchGetItem выполняет свою работу параллельно, но и мои параллельные запросы GetItem тоже. Таким образом, возникает вопрос: является ли BatchGetItem последовательным и измеримо более быстрым, чем параллельное выполнение GetItem вручную? Как я уже упоминал: я делаю это, как и в моем случае, это делает мой код чище. - person Lawrence Wagerfield; 02.12.2020
comment
@LawrenceWagerfield У меня нет номеров для вас. Но это то, что можно довольно легко сравнить с вашей существующей базой данных. Есть и другие факторы, которые следует учитывать. 100 параллельных вызовов создадут нагрузку на ваши собственные серверы/приложение. BatchGetItem выполняет параллельную работу на серверах AWS, что снижает нагрузку на собственные вычислительные ресурсы и ресурсы памяти. - person Marcin; 02.12.2020
comment
Да верно повторно. дополнительная нагрузка на клиентскую машину, выполняющую запросы. Я не указал это, но я буду делать только 2 запроса, а клиентский компьютер — это функция Lambda (поэтому мне не нужно беспокоиться о параллельном обслуживании многих клиентов, поскольку Lambda сериализует весь доступ к Lambdas / t повторно использовать один и тот же экземпляр Lambda для одновременного обслуживания нескольких запросов), что означает, что дополнительное использование ресурсов меня не беспокоит: беспокоит только время выполнения. Я полагаю, что дополнительный HTTP-вызов немного увеличит использование памяти, что действительно влияет на это... но это всего 2 запроса :) - person Lawrence Wagerfield; 02.12.2020
comment
@LawrenceWagerfield Если это всего 2 запроса, то, вероятно, для начала не так много пользы от BatchGetItem, и если его проще программировать и управлять, то я бы придерживался GetItem. - person Marcin; 02.12.2020