PostgreSQL 简介
PostgreSQL,或简称 Postgres,是一个功能强大的开源关系数据库管理系统,以其高度可靠、可扩展及丰富的高级功能而广受欢迎。它在处理复杂查询和多种数据类型方面表现优异,因此成为从小型项目到企业级系统等各种应用的理想选择。PostgreSQL 支持多种数据类型,包括 JSON 和 XML,且具备 ACID 合规性、事务处理以及多版本并发控制(MVCC)等功能,确保了数据的完整性和一致性。
MQTT + PostgreSQL 在物联网领域的优势
总之,将 MQTT 与 PostgreSQL 集成为物联网应用提供了实时数据处理、可扩展性、数据持久性、强大分析功能、安全性以及简化开发流程的强大组合,是需要高效数据管理和分析的物联网项目的理想选择。
使用 EMQX 实现 MQTT 与 PostgreSQL 的集成
EMQX 作为一款专为物联网和实时消息传输设计,高度可扩展且功能强大的 MQTT Broker,支持与 PostgreSQL 的无缝集成,使得物联网设备生成的实时数据流能够得到简化管理。
通过这种集成,企业可以实现海量数据的存储、精确的查询执行以及复杂的数据关联分析,同时保持数据的完整性。EMQX 的高效消息路由功能与 PostgreSQL 的灵活数据模型相结合,能够轻松实现设备状态监控、事件跟踪和操作审计。这种协同作用为企业提供了深刻的数据洞察能力和强大的商业智能支持,帮助企业做出明智决策,实现卓越运营。
EMQX 的 PostgreSQL 数据集成功能旨在轻松连接基于 MQTT 的物联网数据与 PostgreSQL 的强大数据存储能力。通过内置的规则引擎,将数据从 EMQX 传输到 PostgreSQL 的过程变得非常简单,无需复杂的编码。
下图展示了 EMQX 和 PostgreSQL 之间数据集成的典型架构:
连接 Grafana 等可视化工具,根据数据生成图表,展示数据变化趋势。 连接设备管理系统,查看设备列表和状态,检测异常设备行为,并及时消除潜在隐患。
MQTT 与 PostgreSQL 集成演示
在本节中,我们将向您展示如何使用 EMQX 收集车辆的实时位置数据,并将这些数据与 PostgreSQL 无缝集成,实现存储和分析。
前提条件
Git Docker Engine: v20.10+ Docker Compose: v2.20+
工作原理
下载示例项目到本地
git clone https://github.com/emqx/mqtt-to-postgres
cd mqtt-to-postgres
tree
├── LICENSE
├── README.md
├── docker-compose.yml
├── emqx
│ ├── api_secret
│ └── cluster.hocon
├── emqx-exporter
│ └── config
│ └── grafana-template
│ └── EMQX5-enterprise
├── grafana-dashboards
│ └── vehicle-location.json
├── grafana-provisioning
│ ├── dashboard.yaml
│ └── datasource.yaml
├── image
│ ├── mqtt-to-postgres.png
│ └── vehicle_location.png
├── mqttx
│ └── vehicle-location.js
└── postgres
└── create-table.sql
11 个目录,12 个文件
emqx 文件夹:包含 EMQX 与 PostgreSQL 集成的配置,用于启动 EMQX 时自动创建连接器、规则和操作。 mqttx 文件夹:包含一个脚本,用于模拟连接到 EMQX 的车辆传感器并生成数据。 grafana-provisioning 文件夹:提供可视化车辆位置数据的配置文件。 docker-compose.yml:用于协调项目的所有组件,实现一键部署。
启动 MQTTX CLI、EMQX 和 PostgreSQL
docker-compose up -d
mqttx/simulate/vehicle-location/{clientid}
,展示了车辆与系统之间的无缝信息流。{
"vin":"1NXBR32E57Z812344",
"latitude":42.3922,
"longitude":42.303
}
存储车辆位置数据
SELECT
payload
FROM
"mqttx/simulate/#"
vehicle_db
数据库中的 vehicle_data
表。insert into vehicle_location_data(vin, latitude, longitude)
values (${payload.vin}, ${payload.latitude}, ${payload.longitude})
记录客户端事件
SELECT
*
FROM
"$events/client_connected", "$events/client_disconnected"
vehicle_db
数据库中的 vehicle_data
表中。insert into vehicle_events(clientid, event) values (${clientid},${event})
从 EMQX 订阅数据
docker logs -f mqttx
[6:24:52 AM] › … Connecting... ] [
[6:24:52 AM] › ✔ Connected ] [
[6:24:52 AM] › … Subscribing to mqttx/simulate/ ] [
[6:24:52 AM] › ✔ Subscribed to mqttx/simulate/ ] [
[6:24:53 AM] › topic: mqttx/simulate/vehicle-location/1NXBR32E57Z812341 ] [
payload: {"vin":"1NXBR32E57Z812341","latitude":-79.3737,"longitude":-143.3323}
mqttx sub -t mqttx/simulate/vehicle-location/+
admin
和密码 public
登录。总结