用于重定时数据记录的数据库设计——汽车跟踪系统



我是一个制造汽车跟踪系统的人,我想把每辆车每5秒发送一次的数据存储在MySql数据库中。假设我有1000辆车在5秒钟后将数据传输到我的系统,并且数据存储在一个表中。在某个时候,我想查询此表以生成特定车辆的报告。我很困惑是将所有车辆数据记录在一个表中,还是为每辆车创建一个表(1000个表)。哪个更有效?

OK每天86400秒/5=17280条记录/辆车和一天。每天将产生17280000条记录。一般来说,这不是MYSQL的问题。一个设计良好的表将很容易查询。如果你为每辆车找一张桌子,那未来什么时候会有2000辆车。但问题还在于:你喜欢将数据存储多久?当您的数据库为200 GB、800 GB、2 TB等时,计算起来很容易,。。。。

一张桌子,而不是每辆车一张桌子。当你试图备份或维护一个有1000个表的数据库时,它将是一个垃圾箱

尽可能地缩短表格中的行数;它将有许多记录。

根据时间戳和(car_id,timestamp)为该表编制索引。第二个索引将使您能够有效地报告各个汽车。

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

这只是"冰山一角"。这里和dba.stackexchange上大约有5个线程与跟踪汽车/卡车有关。以下是一些进一步的提示。

  • 保持数据类型尽可能小。您的表将变得巨大——可能会溢出磁盘,并且由于"庞大的行意味着可以缓存在RAM中的行更少"而导致查询速度减慢
  • 对于一辆闲置了一夜的汽车,你会保留"相同"的信息吗?想想这需要多少磁盘空间
  • 如果你使用的是硬盘,在你需要重新设计摄入过程之前,先打开100INSERTs/秒。(固态硬盘为1000/sec。)有些技术可以给你10倍,也许是100倍,但你必须应用它们
  • 你会让几个服务器收集数据,然后在数据库中进行简单的插入吗?我的观点是可能是你的第一个瓶颈
  • CCD_ 2使得访问一辆车的数据是有效的
  • 今天,你说这些数据将永远保存。但是你有没有计算过你的磁盘需要有多大
  • 大幅缩减数据的一种方法是在一个月后将"旧"数据合并为1分钟的间隔。开始思考你想保留什么。例如:最小/最大/平均速度,而不仅仅是瞬时速度。当发生任何重大变化(发动机打开、发动机关闭、安全气囊展开等)时,要有额外的记录
  • (我可能还有更多的建议。)

最新更新