数据库中的MQTT会话 - 如何提高性能?

时间:2017-01-18 17:08:47

标签: mysql database indexing database-design

我有一个让设备通过MQTT进行通信的应用程序。 当两个(或多个设备)配对时,它们处于会话中(具有会话ID)

主题例如:

session/<session-id>/<sender-id>/phase

有效负载

{'phase': 'start', 'othervars': 'examplevar'}

每个会话都以下列格式登录到mySQL数据库:

| id | 会话ID | 发件人 | 主题(例如:阶段)| 有效负载 |入门时间| ...

现在,当我只想获得整个会话时,我可以通过session-id进行查询。

我想要实现的另一种观点如下:

| 会话ID (不同)| 开始时间 | 结束时间 | 持续时间 | 成功 |

成功是一个布尔值;如果在当前会话中有一个条目,其中有效负载具有“&#39;成功&#39;”。否则就不会成功。

现在我遇到的问题是这个查询非常慢。每次我想访问它时,它必须计算每个会话是否成功,以及时间计算。

我应该在会话结束时创建一个脚本来计算这些信息并将其放在另一个表中吗?我对这个解决方案的问题是我将有重复的数据。

我可以使用索引加快速度吗?或者我从一开始就犯了一个巨大的设计错误?

提前致谢

1 个答案:

答案 0 :(得分:1)

索引?是。 YES!

如果session-id是唯一的,请删除id并使用PRIMARY KEY(session_id)

success可能为TINYINT NOT NULL,其值为0或1表示失败或成功。

如果&#34;有效载荷&#34;正在以JSON的形式进入,然后我建议将整个字符串存储在一列中供将来参考,并提取您需要在上搜索并对其进行索引的任何列。在MySQL的更高版本中,有一个JSON数据类型,这可能很有用。

请提供一些SELECTs,以便我们进一步提供建议。

哦,我是否提到了索引对数据库的重要性?