Я пришел из SQL и MongoDB, и очень хочу использовать DynamoDB для нового проекта.Пока это было терпимо.Я записываю данные в DynamoDB и использую потоки для магического ввода моих данных в Elastic Search для поиска.Он делает все, что мне нужно.
Однако сейчас я нахожусь в точке, где у меня есть данные, которые я хочу иметь возможность более эффективно запрашивать напрямую непосредственно из DynamoDB.
Затрагиваемые объекты:
- Контракты
- Поставщики
- Отчетные периоды
- Платежи
Я работаю надмой платежный сервис, с помощью которого осуществляются, обновляются, проверяются и запрашиваются платежи.Платежи создаются со следующими свойствами:
- contractId
- fromVendorId (обнуляемый)
- toVendorId
- reportPeriodId
- сумма
- status
Используя DynamoDB, я хотел бы иметь возможность сделать следующие запросы:
- Получить отчетные периоды по диапазону дат
- Получать платежи по отчетному периоду
- Получать платежи от продавца
- Получать платежи от продавца
- Получать платежи по статусу
Некоторая комбинация вышеперечисленного(например, «отклоненные платежи от поставщика aaaa-bbbb»).
В соответствии с официальной документацией DynamoDB я пытаюсь настроить перегруженные глобальные вторичные индексы для решения проблемы.
Я не начал настраивать Payments сейчас, потому что это кажется очень странным, но я начал разрабатывать ключи и индексы для reportPeriods просто для того, чтобы я мог освоить его.Вот что у меня сейчас:
Ключи
Индексы
Первичный ключ - id, sort.Я планирую использовать одну и ту же таблицу как для reportPeriods, так и для платежей, потому что документы DynamoDB говорят, что вы можете использовать четко определенную таблицу для всего приложения (я держу свои данные немного более изолированными, чем эта, и использую одну таблицу на микросервис).).
Я признаю, что поддержание актуальности избыточных строк и выполнение запросов по многим полям будут лишними затратами, но при условии, что я в порядке с поддержкой (я все еще сомневаюсь, что сам) ... мойВопрос на самом деле здесь ... я делаю это правильно?
Я предполагаю, что все, что я хочу сделать запрос, мне нужно добавить новые строки с идентификатором и надлежащее поле "сортировки".Например, у нас есть Платеж с идентификатором dddd-eeee, принадлежащий поставщику aaaa-bbbb, со статусом 1. Я предполагаю, что для запроса этого платежа по поставщику и статусу я должен добавить дополнительный элемент со следующими полями:
- id: Payment-aaaa-bbbb
- sort: fromVendorId, status
- значение: aaaa-bbbb, 1
Это правильно?Что делать, если я хочу сделать запрос по vendorId + status IN (1,3)?
Если у вас есть опыт работы с перегрузкой GSI, просмотрите, что я уже сделал, и дайте мне знать, если я нахожусь наПравильный трек, или если я wayyyyy, wayyyyy, wayyyy выключен и лучше внесите некоторые изменения (быстро), или я собираюсь облажаться.Какие изменения вы рекомендуете?