当前位置: 首页 > news >正文

物联网系统中MQTT设备数据的保存方法

物联网系统中MQTT设备数据的保存方法

在物联网系统中,MQTT协议推送的硬件设备数据可以通过以下几种方式保存:

1. 数据库存储方案

时序数据库

  • InfluxDB:专为时间序列数据优化的数据库,适合设备传感器数据
  • TimescaleDB:基于PostgreSQL的时序数据库扩展
  • Prometheus:监控和时序数据库,适合监控场景

NoSQL数据库

  • MongoDB:文档型数据库,灵活存储JSON格式的MQTT数据
  • Cassandra:高可扩展的列式存储数据库

关系型数据库

  • MySQL/PostgreSQL:传统关系型数据库,适合结构化数据
  • SQLite:轻量级嵌入式数据库,适合边缘设备

2. 消息队列中间件

  • Kafka:高吞吐量分布式消息系统,可持久化消息
  • RabbitMQ:消息代理,可作为MQTT数据的缓冲层
  • Redis:内存数据库,可作为高速缓存或消息队列

3. 文件存储

  • 本地文件:JSON/CSV格式直接存储
  • HDFS:适合大数据量的分布式存储
  • 对象存储:如AWS S3、MinIO等

4. 云平台服务

  • AWS IoT Core + DynamoDB/S3
  • Azure IoT Hub + Cosmos DB/Blob Storage
  • 阿里云IoT平台 + 表格存储/TSDB

实现方案示例

使用Node.js + MongoDB的简单实现

const mqtt = require('mqtt');
const mongoose = require('mongoose');// 连接MQTT
const client = mqtt.connect('mqtt://broker.example.com');
// 连接MongoDB
mongoose.connect('mongodb://localhost:27017/iot_data');// 定义数据模型
const DeviceData = mongoose.model('DeviceData', {deviceId: String,timestamp: { type: Date, default: Date.now },temperature: Number,humidity: Number,payload: Object
});// 订阅主题
client.on('connect', () => {client.subscribe('devices/+/data');
});// 处理消息
client.on('message', (topic, message) => {const data = JSON.parse(message.toString());const deviceId = topic.split('/')[1];// 存储到MongoDBnew DeviceData({deviceId,...data}).save().catch(err => console.error(err));
});

使用Python + InfluxDB的示例

from influxdb import InfluxDBClient
import paho.mqtt.client as mqtt# InfluxDB连接
influx_client = InfluxDBClient(host='localhost', port=8086, database='iot_data')def on_message(client, userdata, msg):payload = json.loads(msg.payload.decode())json_body = [{"measurement": "sensor_data","tags": {"device_id": msg.topic.split('/')[1]},"time": datetime.utcnow().isoformat(),"fields": {"temperature": payload['temp'],"humidity": payload['hum']}}]influx_client.write_points(json_body)# MQTT连接
mqtt_client = mqtt.Client()
mqtt_client.on_message = on_message
mqtt_client.connect("broker.example.com", 1883, 60)
mqtt_client.subscribe("devices/+/data")
mqtt_client.loop_forever()

数据存储的最佳实践

  1. 数据标准化:定义统一的数据格式和字段命名规范
  2. 数据分区:按设备ID、时间范围等进行分区存储
  3. 数据压缩:对历史数据进行压缩以减少存储空间
  4. 冷热分离:热数据存高速存储,冷数据归档到低成本存储
  5. 数据索引:为常用查询字段建立索引
  6. 数据安全:实施适当的访问控制和加密措施

选择哪种存储方式取决于您的具体需求,包括数据量、查询模式、性能要求和预算等因素。


文章转载自:
http://chromomere.riewr.cn
http://believable.riewr.cn
http://barbican.riewr.cn
http://boorish.riewr.cn
http://anthropophagite.riewr.cn
http://bullbaiting.riewr.cn
http://amidships.riewr.cn
http://beanpole.riewr.cn
http://anthracnose.riewr.cn
http://celsius.riewr.cn
http://catenaccio.riewr.cn
http://amphibolite.riewr.cn
http://apologetical.riewr.cn
http://assayer.riewr.cn
http://alfred.riewr.cn
http://arachne.riewr.cn
http://affectation.riewr.cn
http://advocate.riewr.cn
http://canutism.riewr.cn
http://appassionata.riewr.cn
http://chi.riewr.cn
http://cechy.riewr.cn
http://arenulous.riewr.cn
http://centrifugalize.riewr.cn
http://aftersales.riewr.cn
http://alonso.riewr.cn
http://cautelous.riewr.cn
http://boeotia.riewr.cn
http://avoidant.riewr.cn
http://biomolecule.riewr.cn
http://www.dtcms.com/a/281053.html

相关文章:

  • 了解 Android 内存使用情况 - Google I/O 大会演讲
  • ethers.js-8-bigNmber和callstatic模拟
  • 【Android】日志的使用
  • 《黑马笔记》 --- C++核心编程
  • 10分钟搞定!Chatbox+本地知识库=你的私人语音导师:企业级全栈实现指南
  • etcd压缩历史版本
  • 安装MATLAB流程中遇到的问题
  • wpf Canvas 动态增加右键菜单
  • css:flex:1;是谁的缩写
  • compose、 pipe 组合函数实现
  • 20th Day| 235.二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作, 450.删除二叉搜索树中的节点
  • Postman + Newman + Jenkins 接口自动化测试
  • 使用canal同步分库分表数据,到 Elasticsearch
  • JavaScript事件
  • 【数据同化案例1】ETKF求解 Lorenz-63 模型的同化系统(完整MATLAB实现)
  • Java-特殊文件、日志技术
  • CherryStudio配置DeepSeek调用MCP服务实现任务自动化
  • Elasticsearch 9.x 搜索执行过程(源码解析)
  • AOP简化MyBatis分页:高效自动化方案
  • 第二十篇 Word文档自动化:Python批量生成、模板填充与内容修改,告别繁琐排版!
  • Web3 支付系统:面向企业和消费者的全面概述
  • 时间序列挖掘及建模
  • Linux系统集群部署模块之Keepalived双机热备
  • 使用SQLMAP的文章管理系统CMS的sql注入渗透测试
  • Java全栈工程师面试实录:从电商系统到AIGC的层层递进
  • WSF70N10G N 沟道 MOSFET 在蓝牙耳机中的应用分析
  • Linux获取CPU/GPU的温度
  • docker部署gbase8s(数据持久化)并用可视化工具管理
  • NuGet01-安装及使用
  • gRPC实战指南:像国际快递一样调用跨语言服务 —— 解密Protocol Buffer与HTTP/2的完美结合