Как вы заметили, операция GetItem
в DynamoDB не принимает фильтр. Он всегда возвращает один элемент, если он существует, поэтому часто нет необходимости в такой фильтрации. Но если вы действительно хотите такую фильтрацию - например, ваши элементы имеют большой размер и вы не хотите тратить пропускную способность сети на их отправку, если они не проходят ваш фильтр - как вы сами предложили, вы можете использовать Query
.
Да, формат ответа Query
немного отличается от GetItem
, но любая библиотека DynamoDB на любом языке делает получение первого (и единственного) элемента в ответе тривиальным. Если вас беспокоит возможность получить больше, чем первый элемент, вы всегда можете установить Limit=1
, но в этом нет необходимости, если ваше ключевое условие гарантирует, что только один элемент будет соответствовать.
Вы должны знать, чтонезависимо от того, выполняете ли вы безусловный GetItem
и выполняете фильтрацию на клиенте, или выполняете Query
с фильтром на стороне сервера, в обоих случаях стоимость чтения будет одинаковой, поскольку весь элемент будет считан с диска в обоихслучаев. Единственная небольшая разница может заключаться в затратах на пропускную способность сети, и это становится уместным только в том случае, если элементы большие.