存储来自10000s节点的遥测数据

Pet*_*ete 5 mysql database web-services telemetry

我需要存储每隔几分钟从10000多个节点(可能会增加)中生成的遥测数据,每个节点都通过Internet将数据提供给服务器进行记录。我还需要从Web应用程序查询此数据。

我在确定最佳存储解决方案时遇到了麻烦。

每个节点都有一个唯一的ID,并且每个变量包都有一个时间戳。(可能需要由服务器生成)。

遥测数据在同一数据包中具有所有变量,因此从概念上讲,它可以轻松地存储在单个数据库表中,每个变量都有一列。序列号+时间戳作为密钥就足够了。每个遥测包的大小为64个字节,包括设备ID和时间戳。大约每年100Gb +。

我希望能够查询数据以获取跨时间范围的变量,并且还存储该数据的汇总报告,以便可以绘制图形。

现在,如何最好地处理呢?我对使用MySQL非常熟悉,因此我倾向于这样做。如果我要使用MySQL,是否对每个设备ID都有一个单独的表有意义?-这会使查询更快吗?还是会有10000个表成为问题?

我认为不需要一口气从所有设备查询变量,但是可能需要。还是我应该将其全部粘贴在一个表中,如果它变得很大,请使用MySQL集群吗?

还是有更好的解决方案?我一直在寻找一些非关系数据库,但看不到任何完全符合要求或看起来很成熟的东西。例如,MongoDB每行将有很多大小开销,与MySQL相比,我不知道在很大的时间范围内查询单个变量的值会多么有效。MySQL已经存在了一段时间并且功能强大。

我也希望复制数据和备份数据变得容易。

任何想法或任何人做了类似的事情都将不胜感激!

Ser*_*nov 5

你看过时间序列数据库吗?它们专为您所描述的用例而设计,并且由于内置数据折叠和压缩,实际上可能最终在空间要求方面更高效。

我建议研究使用 HBase 或 Cassandra 进行原始存储的实现,因为它为您提供经过验证的异步复制功能和吞吐量。

HBase 时间序列数据库: