用于大量定时数据记录的数据库设计-汽车跟踪系统

时间:2018-12-24 12:35:53

标签: mysql performance database-design monitoring database-performance

我是一个汽车追踪系统,我想将每5秒钟后每辆汽车发送的数据存储在MySql数据库中。假设我有1000辆汽车在5秒钟后将数据传输到我的系统,并且数据存储在一张表中。在某个时候,我想查询该表以生成特定车辆的报告。我在将所有车辆数据记录在一个表中或为每辆车创建一个表(1000个表)之间感到困惑。哪个更有效率?

3 个答案:

答案 0 :(得分:0)

确定每天86400秒/ 5 =每辆车每天17280条记录。 每天将产生17,280,000条记录。通常,这对于MYSQL而言不是问题。 设计良好的表将易于查询。 如果您为每辆车买一张桌子-那是什么时候将来会有2000辆车。 但是问题还在于:您希望将数据存储多长时间? 当您的数据库是200 GB,800GB,2TB等时,很容易计算。

答案 1 :(得分:0)

一张桌子,而不是每辆车一张桌子。当您尝试备份或维护具有1000个表的数据库时,这将是垃圾场。

使该表的行尽可能短;它会有很多记录。

同时在timestamp和(car_id,timestamp)上索引该表。第二个索引使您可以有效地报告单个汽车。

阅读https://use-the-index-luke.com/

答案 2 :(得分:0)

这是“冰山一角”。此处和dba.stackexchange上大约有5个与跟踪汽车/卡车相关的线程。这里是一些其他提示。

  • 保持尽可能小的数据类型。您的表将变得非常庞大-可能会导致磁盘溢出,并由于“庞大的行意味着可以在RAM中缓存更少的行”而减慢查询速度。
  • 您是否保持一夜之间闲置的汽车的“相同”信息?考虑一下这会占用多少磁盘空间。
  • 如果您使用的是HDD磁盘,则需要以每秒100 INSERTs的速度传输,然后重新设计摄取过程。 (对于SSD,为1000 / sec。)有些技术可以使您获得10倍甚至100倍的性能,但是您必须应用它们。
  • 您将要有几台服务器来收集数据,然后简单地插入数据库吗?我的意思是,可能是您的第一个瓶颈。
  • PRIMARY KEY(car_id, ...),以便高效地访问一辆车的数据。
  • 今天,您说数据将被永久保存。但是您是否计算了磁盘需要多大?
  • 一种大幅度收缩数据的方法是将“旧”数据合并为一个月后的1分钟间隔。开始考虑您想保留什么。例如:最小/最大/平均速度,而不仅仅是瞬时速度。发生任何重大变化时(发动机打开;发动机关闭;安全气囊展开;等等)有额外的记录
  • (我可能有更多提示。)