MYSQL 如何最佳地分段处理海量数据?

4

我目前正在设计一个可以监控设备并为其保留日志和数据的系统。每15秒钟会从每个设备接收和存储数据。虽然我有数据库架构设计的经验,但这次处理的数据量还是比较大的。

总共需要两张表,一张用于存储设备信息,另一张用于存储统计数据。如果我们有5000个设备,每天就会产生近2500万条记录。几周过后,这张表就会变得非常庞大。

由于我大部分时间都只需要查询过去一天的数据,所以我想把这些数据拆分成更多的表。

一张表将始终保持运行状态,并实时更新数据。每周结束时,将所有数据移动到另一张表中,并在那里保存,以防需要查询旧数据。

现在,我应该坚持使用InnoDB吗?在统计数据表中,我唯一需要使用外键的是设备ID。

谢谢


1
尝试了解一些有关分区的内容-每周/每月创建一个分区可以让您非常快速地删除旧数据,并且最新数据可以更快地处理。并且在删除分区后,磁盘空间将直接被回收。但是也存在一些缺点(索引是每个分区“本地”的,您不能拥有非分区唯一键-这可能不会影响您的情况)。如果您需要长时间存储旧数据,可以使用某些方法将它们归档到单独的表/数据库/服务器中,然后使用快速删除来保持“操作”表的大小。 - jkavalik
1个回答

3
如果您通常只想查看过去一天的数据,那么我的建议是按天进行分区。 您可以在此处了解有关MySQL分区的更多信息:这里
根据查询的不同,您还需要对日期和设备建立索引。 对于每天的28.8百万行数据,许多查询应该在合理的时间内完成。
分区的一个好处是它们可以被删除和归档,对数据库的性能影响很小。
顺便说一句,每15秒5000次插入相当于每秒333次插入。 您需要确保硬件足够处理这种事务量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接