数据存储设计

数据存储设计

一对一消息存储

image

  1. Publish 端发布一条消息;
  2. Backend 将消息记录数据库中;
  3. Subscribe 端订阅主题;
  4. Backend 从数据库中获取该主题的消息;
  5. 发送消息给 Subscribe 端;
  6. Subscribe 端确认后 Backend 从数据库中移除该消息;

一对多消息存储

image

  1. Publish 端发布一条消息;
  2. Backend 将消息记录在数据库中;
  3. Subscribe1 和 Subscribe2 订阅主题;
  4. Backend 从数据库中获取该主题的消息;
  5. 发送消息给 Subscribe1 和 Subscribe2;
  6. Backend记录Subscribe1 和 Subscribe2 已读消息位置,下次获取消息从该位置开始。

客户端在线状态存储

EMQ X 存储支持将设备上下线状态,直接存储到Redis或数据库。

客户端代理订阅

EMQ X 存储支持代理订阅功能。设备客户端上线时,由存储模块直接从数据库,代理加载订阅主题。

存储插件列表

EMQ X 支持 MQTT 消息直接存储 Redis、MySQL、PostgreSQL、MongoDB、Cassandra、DynamoDB、InfluxDB、OpenTSDB 数据库:

存储插件 配置文件 说明
emqx_backend_redis emqx_backend_redis.conf Redis 消息存储
emqx_backend_mysql emqx_backend_mysql.conf MySQL 消息存储
emqx_backend_pgsql emqx_backend_pgsql.conf PostgreSQL 消息存储
emqx_backend_mongo emqx_backend_mongo.conf MongoDB 消息存储
emqx_backend_cassa emqx_backend_cassa.conf Cassandra 消息存储
emqx_backend_dynamo emqx_backend_dynamo.conf DynamoDB 消息存储
emqx_backend_influxdb emqx_backend_influxdb.conf InfluxDB 消息存储
emqx_backend_opentsdb emqx_backend_opentsdb.conf OpenTSDB 消息存储