Структура данных AWS и предложение стека для данных с высокой степенью фильтрации - PullRequest
0 голосов
/ 03 мая 2018

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

Я создаю мобильное приложение на основе AWS App Sync, если не смогу определить, что оно плохо подходит.

Я хочу хранить довольно большой набор данных, скажем, полмиллиона записей.

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

Примером этих данных будет:

{
   "name":"Product123",
   "tags":[
      {
         "name":"1880",
         "type":"year",
         "value":7092
      },
      {
         "name":"f",
         "type":"gender",
         "value":4120692
      }
   ]
}

Различные объекты могут иметь или не иметь определенный тег, но могут иметь до 500 тегов или более (начальное число содержит 130 тегов). Мой фильтр игнорирует их, если они не совпадают, но возвращает их, если они совпадают.

Читая о Query vs Scan на DyanmoDB, я чувствую, что моя текущая структура данных потребует в основном сканирования и будет неэффективной. Эффективность - только реальное ограничение из-за стоимости.

Имея в виду стоимость, я сосредоточусь на стоимости одного пользователя для доступа к этим данным в отфильтрованных наборах. Скажи 100 000 пользователей за каждую фильтрацию и подкачку данных много раз в день.

1 Ответ

0 голосов
/ 21 мая 2018

Ваша концепция тегов не слишком отличается от концепции групп Cognito User Pools с AppSync (docs) - аутентификация на основе групп будет возвращать только элементы, разрешенные для групп, которые пользователь создает запрос в. Предел группы Cognito по умолчанию составляет 25 на пул пользователей, так что, хотя это удобно из коробки, само по себе это вам мало поможет. Напротив, он интересен только потому, что концептуально похож на него, и может дать вам представление о том, как он работает внутри.

Если вы зайдете в консоль AppSync и настроите шаблон сопоставления запросов для аутентификации групп, вы увидите, что он использует сканирование и операцию содержимого. Делать что-то подобное, вероятно, будет лучшим выбором, если вы действительно хотите использовать «Динамо». Если вы обнаружите, что это слишком дорого, вы можете использовать источник данных Lambda, который позволяет вам использовать любое хранилище данных, если оно у вас есть, которое немного более гибкое для этого типа действий.

...