как правильно запрашивать разные фильтры на Dynamodb? - PullRequest
0 голосов
/ 09 июля 2020

Я сохраняю свои order данные в таблице dyanmodb. Ключ раздела - orderId, ключ сортировки - timestamp. Каждый заказ имеет множество других атрибутов, таких как category, userName , price , items , status`. Я собираюсь создать службу фильтров, чтобы клиенты могли запрашивать порядок на основе этих атрибутов. Также я хотел бы добавить ограничение на запрос разбивки на страницы. Но я обнаружил некоторые ограничения для Dynamodb.

Для поддержки запросов к различным полям у меня есть два варианта:

  • Создать GSI для каждого атрибута. Это очень дорого, но он поддерживает высокую производительность запроса каждого атрибута. Это решение не поддерживает объединение нескольких атрибутов в фильтре.

  • Прикрепите выражение фильтра к SCAN, чтобы включить условие атрибута. SCAN - это во-первых, не очень производительность. Также выражение фильтра применяется после limits. Это означает, что он, скорее всего, ответит меньше, чем лимиты запросов пользователей.

так как лучше всего добиться этого в Dynamodb?

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Вы можете добавить ограничение для разбивки на страницы, используя атрибут limit в запросе. Но не могли бы вы подробнее c указать свои шаблоны доступа, будут ли ваши клиенты запрашивать все заказы или только заказы, принадлежащие им?

0 голосов
/ 09 июля 2020

К сожалению, magi c не может решить ваши проблемы. Нет функции DynamoDB, которую вы пропустили. В самом деле, как вы сказали, чтобы сделать каждый из атрибутов доступным для эффективных запросов, требуется GSI, который будет стоить вам дополнительных денег, но это разумно. Действительно, как вы сказали, не существует эффективного способа поиска пересечения требований по двум различным атрибутам. И действительно, функция «ограничения» не совсем выполняет то, что вы хотите, и вам нужно будет имитировать размер вашей страницы в клиентском коде (запрашивая больше страниц, пока желаемое количество не будет получено), потенциально с неприемлемо высокой задержкой.

Похоже, что вам действительно нужна поисковая система . У них есть именно те функции, о которых вы просили. Вы по-прежнему будете платить за эти функции (индексирование отдельных столбцов по-прежнему занимает центральный процессор и дисковое пространство, пересечение нескольких поисков по атрибутам по-прежнему требует значительных усилий во время запроса), но поисковые системы предназначены именно для этих операций и выполняют их более эффективно. и с более низкой задержкой (что важно для интерактивного поиска, который составляет основу поисковых систем).

...