запросите DynamoDB для последней записи каждого хеш-ключа

1

У меня есть таблица dynamoDB, где хранятся события датчиков.

  • HASH KEY: идентификатор датчика

  • КНОПКА ДИАПАЗОНА: метка времени

  • информация о датчике

Теперь мне нужен запрос для последнего события каждого датчика.

Единственное решение, которое я могу придумать, - это запросить последнее событие для каждого идентификатора датчика. Но это было бы много запросов с датчиками 2000+. Я не хочу сканировать всю таблицу, чтобы потом разобраться с ней, поскольку таблица может расти довольно быстро.

Есть идеи?

Теги:
aws-lambda
amazon-dynamodb

2 ответа

1
Лучший ответ

Вы должны решить, что важно для вас, и разработать таблицу (таблицы) для соответствия вашим прецедентам.

Вы говорите, что хотите запросить последнее значение для каждого датчика и что имеются датчики 2000+. Что вы будете делать с этими 2000+ значениями? Как часто вам нужны эти значения и могут ли значения быть немного устаревшими?

Одним из решений было бы иметь две таблицы: одну, где вы добавляете исторические значения (данные временных рядов) и другую таблицу, в которой вы всегда обновляете последнее значение для каждого датчика. Когда вам нужны самые последние данные датчика, просто сканируйте эту вторую таблицу, чтобы получить все ваши датчики самые последние значения. Это так же эффективно, как и для чтения. Для записи это означает, что вы должны писать дважды для каждого обновления датчика.

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

Однако, если вы сразу обновите все датчики, то дальнейшая оптимизация может быть достигнута путем объединения нескольких показаний датчика в один элемент, поэтому требуется меньше записей для обновления всего 2000 из них.

  • 0
    Ну, мне не нужны эти запросы часто. Я хочу инициализировать визуализацию, которая показывает состояния тысяч объектов и датчиков. Поэтому мне нужно текущее состояние всех объектов одновременно. Поскольку данные поступают асинхронно, я также не могу запросить временной интервал или временной диапазон. Но я также подумал о версии с двумя таблицами, и это то, что я сейчас реализую.
  • 0
    Рад, что все получилось. Причина, по которой я спросил о том, как вы будете использовать значения 2000+, заключается в том, что одновременно визуализировать 2000 различных датчиков может быть довольно сложно.
0

Поскольку у вас определен параметр range_key вы можете получить последний элемент с помощью Query(hash_key=HASH_KEY, ScanIndexForward=True, limit=1)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню