Динамодб одно массовое сканирование против множества разовых - PullRequest
0 голосов
/ 11 июня 2019

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

Я думаю, что 50 запросов get будут лучше с точки зрения производительности, потому что если завтра у меня будет миллион записей, это будет пустой тратой времени и памяти, чтобы отсканировать их все, а затем отфильтровать только 50 из них, но с другой стороны нет. не делать 50 запросов к DynamodB может иметь проблемы с производительностью и требуют дополнительной подготовки?

1 Ответ

2 голосов
/ 11 июня 2019

Вы правы, что операция Scan при условии, что вам нужно будет только прочитать 50 записей из миллиона, является худшим из возможных решений. Это будет очень медленно и обойдется вам в копеечку, потому что при сканировании вы платите Amazon за чтение всех ваших данных - даже , если отфильтровываете большую их часть.

Выполнение 50 отдельных GetItem запросов не так уж и плохо - это, безусловно, лучше, чем сканирование. Вы платите Amazon только за фактический извлеченный товар - вы не платите больше, потому что это 50 отдельных запросов. Конечно, если вы не хотите больших задержек, не запускайте эти запросы один за другим - запускайте их все параллельно.

Но для этого варианта использования DynamoDB обеспечивает еще лучшую работу BatchGetItem. С помощью этой операции вы даете DynamoDB список из 50 необходимых ключей в одном HTTP-запросе, и он будет извлекать все из них (параллельно) и возвращать вам все ответы. Кажется, что BatchGetItem лучше всего подходит для вашего случая использования.

...