Мы новички в DynamoDB и боремся с тем, что кажется, что это будет простая задача.
На самом деле это не связано с запасами (речь идет о записи результатов станка с течением времени), но пример со склада является самым простымЯ могу подумать, что это иллюстрирует цель и проблемы, с которыми мы сталкиваемся.
Два сценария запроса:
- Все исторические значения данного биржевого символа <= Мы думаем, что у нас есть этовыяснил </li>
- последнее значение всех биржевых символов <= У нас нет хорошего решения здесь! </li>
Предположим, что обновления не синхронизированы, например,Момент последнего обновления записи для TSLA может отличаться от момента для AMZN.
3 атрибута - это просто {Символ, Момент, Значение}.Мы могли бы создать символ hash_key, range_key Moment и полагать, что могли бы легко / эффективно выполнить первый запрос.
Мы также предполагаем, что можем получить последнее значение для одного указанного символа после https://stackoverflow.com/a/12008398
Решение SQL для получения последнего значения для каждого символа будет выглядеть примерно так: https://stackoverflow.com/a/6841644
Но ... мы не можем придумать ничего эффективного для DynamoDB.
Можно ли сделать это, не извлекая все или не совершая многократных циклов?
Наилучшая идея, которую мы пока имеем, состоит в том, чтобы каким-то образом использовать триггеры обновления или потоки для отслеживания последней записи по символуи, по сути, держать это в кэше.Это может быть в отдельной таблице или в той же таблице с дополнительной информацией, такой как столбец IsLatestForMachineKey (фактически, bool).При каждой вставке вы должны получить тот, где IsLatestForMachineKey = 1, сравнить момент и, если вставка новее, установить новую равную 1, а более старую - 0.
Это начинает казаться сложнымДостаточно того, что я задаюсь вопросом, правильно ли мы применяем подход, или, может быть, сама DynamoDB плохо подходит для этого, хотя сценарий использования кажется таким простым и распространенным.