Сценарий
Я хочу отправить данные в MQTT Broker (Облако), запросив измерения из InfluxDB.
У меня есть поле в схеме, которое называется status
. Это может быть 1
или 0
. status=0
указывает, что серия не была отправлена в облако. Если я получу подтверждение от брокера MQTT, я хочу переписать запрос обратно в базу данных с помощью status=1
.
Как упоминалось в Часто задаваемые вопросы для InfluxDB в отношении дублирующихся данных Если информация имеет ту же временную метку, что и предыдущий запрос, но с другим значением поля =>, тогда будет отображено поле обновления.
Чтобы проверить это, я создал следующее:
CREATE DATABASE dummy
USE dummy
INSERT meas_1, type=t1, status=0,value=123 1536157064275338300
запрос:
SELECT * FROM meas_1
обеспечивает
time status type value
1536157064275338300 0 t1 234
теперь, если я хочу перезаписать серии, я делаю следующее:
INSERT meas_1, type=t1, status=1,value=123 1536157064275338300
, который перезапишет серию
time status type value
1536157064275338300 1 t1 234
(Примечание: это невозможно через Теги в настоящее время в InfluxDB)
Использование
- Запросить некоторую информацию с помощью клиента с помощью
"status"=0
.
- Реструктурируйте JSON для отправки в облако
- Отправить информацию в облако
- В случае успеха запишите выходные данные из шага 1. обратно в БД, но с
status=1
.
Я использую InfluxDBClient Python3
для создания приложения (MQTT + InfluxDB)
В write_points
API есть параметр, который упоминает batch_size
, для которого требуется int
в качестве ввода.
Я не уверен, как я могу использовать это с приложением, которое я хочу. Может ли кто-нибудь направить меня с этим или со Схемой БД, чтобы я мог загружать актуальную и не избыточную информацию в облако?