Мне любопытно, почему вы выбираете DynamoDB для этой задачи.Такие сложные запросы, кажется, гораздо лучше подходят для баз данных на основе SQL, чем для баз данных NoSQL.Из-за продвинутой природы запросов SQL эта задача, по моему опыту, намного проще в базах данных SQL.Поэтому я бы посоветовал вам подумать о том, является ли DynamoDB действительно подходящей системой для того, что вы пытаетесь сделать здесь.
Если вы решите, что это так, вам, возможно, придется немного реструктурировать свои данные.Вы можете сделать что-то вроде свойства device-type
, которое будет объединять значения устройства и типа.Затем установите его в качестве индекса и выполните запрос на основе этого, отсортируйте по отметке времени и отфильтруйте результаты, которые не превышают желаемое значение.
Вы правы, что в настоящее время Dynamoose не передаетвесь объект в функцию set
.Это то, что лично я открыта для изучения.Я являюсь участником проекта GitHub, и если вы хотите представить PR, добавляющий эту функцию, я был бы очень рад помочь вам изучить этот вариант и включить его в кодовую базу.
Другойвы, возможно, захотите исследовать наличие потока DynamoDB, который будет устанавливать это свойство device-type
всякий раз, когда оно добавляется в вашу таблицу DynamoDB.Это отвлечет эту логику от DynamoDB и вашего приложения.Я не уверен, если это необходимо для того, что вы делаете, чтобы развязать его до этого уровня, но это может быть то, что вы хотите исследовать.
Наконец, в зависимости от ваших настроек, вы можете выяснить, какой элемент будетбыть более уникальным device
или type
и установить индекс для этого свойства.Затем просто сделайте запрос на основе этого и отфильтруйте результаты другого свойства, которое вам не нужно.Я не уверен, что это то, что вы ищете, это, конечно, сработает, но я не уверен, сколько элементов у вас будет в вашей таблице, и возникнут вопросы о масштабируемости на определенном уровне.Одним из способов решения некоторых из этих вопросов о масштабируемости может быть установка TTL
ваших элементов, если вы знаете, что указанная вами временная метка является постоянной или предсказуемой заранее.
В целом, существуетмного способов достичь того, что вы хотите сделать.Без более подробной информации о количестве элементов, о том, что именно эти свойства будут выполнять, о необходимой вам масштабируемости, какие из этих свойств будут наиболее уникальными и т. Д., Трудно найти хорошее решение.Я настоятельно рекомендую вам подумать, действительно ли NoSQL - лучший путь.Тот запрос, который вы хотите сделать, кажется НАМНОГО больше похож на запрос SQL.Не говоря уже о том, что это невозможно в DynamoDB, но это потребует некоторых размышлений о том, как вы хотите структурировать свою модель данных, и тому подобное.