代码之家  ›  专栏  ›  技术社区  ›  Trumping Telle

重型定时数据记录车跟踪系统数据库设计

  •  1
  • Trumping Telle  · 技术社区  · 6 年前

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

    3 回复  |  直到 6 年前
        1
  •  0
  •   Wilhelm    6 年前

    好的,每天86400秒/5=17280条记录/辆车和一天。 每天将产生1728万条记录。一般来说,这对MYSQL来说不是问题。 一个设计良好的表将易于查询。 如果你为每辆车买一张桌子——也就是说,将来什么时候会有2000辆车。 但问题是:你喜欢将数据存储多长时间?

        2
  •  0
  •   O. Jones    6 年前

    一张桌子,不是每辆车一张桌子。当您试图备份或维护一个包含1000个表的数据库时,它将成为一个垃圾箱火灾。

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

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

        3
  •  0
  •   Rick James diyism    6 年前

    这是“冰山一角”。这里和上面大约有5条线dba.堆栈交换关于追踪汽车/卡车。下面是一些进一步的提示。

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