V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wxt
V2EX  ›  程序员

关于物联网系统的数据库设计和选型

  •  
  •   wxt · 2022-03-18 01:25:03 +08:00 via Android · 4471 次点击
    这是一个创建于 980 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前做能耗监测类的项目,因为有个集中器主控,所以一般一个集中器连接几百块仪表,一个项目也就几十个集中器。当时系统数据库用的 mysql 按月和设备编号分表。也就是一个月一个设备一张数据表。

    最近做了一个项目,但是量大了,可以理解为有一万个集中器了,每个集中器固定有二十多个仪表,沿用原来代码发现 mysql 一个月就要建一万多个数据表,这个很明显不合理了。目前看一个设备一个月也就一百万到四百万条记录吧。

    只有一台 32 核,64g ,19t 硬盘的服务器的话大家有什么更好的方案和技术选型,是不是要放弃 mysql 数据库。

    甲方说年底可能要到三万个设备,明年要五万个。

    39 条回复    2023-02-20 17:56:22 +08:00
    nebkad
        1
    nebkad  
       2022-03-18 01:37:00 +08:00   ❤️ 1
    https://www.infoq.cn/article/2017/07/why-time-series-database
    《我们为什么需要一个时序数据库?》
    wxt
        2
    wxt  
    OP
       2022-03-18 01:47:06 +08:00 via Android
    @nebkad 多谢,有什么好的开源稳定的时序库推荐吗
    duke807
        3
    duke807  
       2022-03-18 01:58:22 +08:00
    我喜歡直接用目錄和文件,按照子項目分不同目錄,每個設備再搞一個子目錄,目錄中有設備的 info 文件,數據直接用固定的二進制格式追加到目錄下的數據文件中,單個設備數據量大的話可按時間段或文件大小用多個文件儲存。
    (二進制格式可以是 C 語言 struct 數據結構,或者是 MessagePack 這樣的動態結構,或者直接用字符串。)
    全程不需要類似 PostgreSQL MongoDB 這樣的專用數據庫。
    CEBBCAT
        4
    CEBBCAT  
       2022-03-18 02:09:20 +08:00
    诶?怎么没提数据备份的事情?不用担心数据丢失吗?
    dayeye2006199
        5
    dayeye2006199  
       2022-03-18 02:18:39 +08:00   ❤️ 1
    可以一张表,但是指定一个 partition key (月份+设备)。https://dev.mysql.com/doc/refman/8.0/en/partitioning-overview.html

    其实就是系统帮你做分表。查询的时候只会扫有你目标数据的 partition 。例如指定一个设备号,就只会看 partition key 里面包含这个设备号的分区,所以性能会很高。

    这么做的好处是你现有数据库设计和下游的查询代码基本不需要怎么改动。
    查询性能和你目前的方案性能基本一致:找 parition + 找到表之后查询。查询 partition 设计合理就是个 log n 的复杂度。
    twing37
        6
    twing37  
       2022-03-18 03:48:55 +08:00
    - clickhouse
    - cassandra / scylladb
    singerll
        7
    singerll  
       2022-03-18 05:00:16 +08:00 via Android
    淘思,我觉得挺不错的一个公司
    aragakiyuii
        8
    aragakiyuii  
       2022-03-18 07:06:20 +08:00 via iPhone
    clickhouse
    opengps
        9
    opengps  
       2022-03-18 07:39:28 +08:00 via Android
    我做过类似的,如果不能使用时序数据库的话,mysql 要设计成无主键超简逻辑超大容量的结构,我博客有分享
    opengps
        10
    opengps  
       2022-03-18 08:02:49 +08:00 via Android
    bthulu
        11
    bthulu  
       2022-03-18 08:13:45 +08:00
    mariadb 啊, 无缝兼容 mysql 还自带时序数据库
    wangtian2020
        12
    wangtian2020  
       2022-03-18 08:27:18 +08:00
    是跟 plc 什么相关的吗,我们公司用的 PostgreSQL 。不过我是前端,其他不懂
    joesonw
        13
    joesonw  
       2022-03-18 08:29:56 +08:00 via iPhone
    influxdb
    masterclock
        14
    masterclock  
       2022-03-18 08:31:50 +08:00
    从时序数据库里挑一个
    TimescaleDB 基于 PG ,没啥缺点
    InfluxDB 排名第一,除单机外没啥缺点

    其他的都大概有点缺点
    banmuyutian
        15
    banmuyutian  
       2022-03-18 09:03:38 +08:00
    我司用 InfluxDB
    cco
        16
    cco  
       2022-03-18 09:10:24 +08:00
    监控基本上都是无脑时序吧。opentsdb,influxDB 都可以。
    spacezip
        17
    spacezip  
       2022-03-18 09:10:36 +08:00
    偶然点进来不太懂开发 我觉得存储性能够一般问题不大
    朋友公司 全国四五十万个仪表 双机 1u 双路 32 核心 256 内存 只不过数据量很小每天几个 g 存储目前是 8t nvme 固态
    youngce
        18
    youngce  
       2022-03-18 09:27:47 +08:00
    InfluxDB 性能好但是单机、mongodb 性能差一点但是分布式方案成熟
    v2orz
        19
    v2orz  
       2022-03-18 09:53:01 +08:00
    借楼问一下 用 influxDB 的大佬们是怎么做高可用的啊?
    blackshadow
        20
    blackshadow  
       2022-03-18 09:57:11 +08:00
    @v2orz 高可用要商业版把。 开源的只支持单机模式。
    MoYi123
        21
    MoYi123  
       2022-03-18 09:57:47 +08:00
    @singerll 2 年前用过, bug 还挺多的.
    winnie2012
        22
    winnie2012  
       2022-03-18 09:59:50 +08:00
    cshlxm
        23
    cshlxm  
       2022-03-18 10:01:45 +08:00
    支持下国产,tdengine ,涛思,用下来感觉不错
    singerll
        24
    singerll  
       2022-03-18 10:43:49 +08:00
    @MoYi123 2019 年 7 月 12 日,涛思数据宣布 TDengine 正式开源。
    开源后发展的还挺好的,我见过他们商务,这个公司搞笑的就是没有专职商务人员,商务都是技术人员兼职的,跟我们公司的技术交流群里,提的技术问题商务是解答最快的。。。。。
    实话说我觉得他们真的是一个想做技术的公司,跟拿开源改文件名骗钱的完全不一样。
    pengtdyd
        25
    pengtdyd  
       2022-03-18 11:21:14 +08:00
    只要是单机的不能用于生产环境!!!
    wxt
        26
    wxt  
    OP
       2022-03-18 13:30:47 +08:00 via Android
    @pengtdyd 没办法,甲方只能提供一台服务器,情况该说的也都说了,服务器带了个磁盘阵列。
    wxt
        27
    wxt  
    OP
       2022-03-18 13:32:24 +08:00 via Android
    @dayeye2006199 这种方式目前看可能是优选了,改动最小。
    wxt
        28
    wxt  
    OP
       2022-03-18 13:33:55 +08:00 via Android
    @opengps 多谢
    wxt
        29
    wxt  
    OP
       2022-03-18 13:37:00 +08:00 via Android
    @spacezip 我们最初计算大概是一万个设备一个月大概是 1T,目前看可能没那么大。
    wxt
        30
    wxt  
    OP
       2022-03-18 13:40:28 +08:00 via Android
    @CEBBCAT 甲方认为数据存储一个月就行,做了个磁盘阵列。
    leonhao
        31
    leonhao  
       2022-03-18 13:44:44 +08:00
    IOT 这块做过几个项目,推荐 timescaledb ,简单好用,没有坑。clikchouse 一生黑,各种 bug ,浪费时间。
    moen
        32
    moen  
       2022-03-18 13:46:50 +08:00
    关系型的话用 TimescaleDB ,起码能自动分表还能对历史数据做压缩
    PopRain
        33
    PopRain  
       2022-03-18 15:47:14 +08:00
    发现很多搞 IOT 的都喜欢按设备建表,为什么不把设备 ID 作为数据库的一个字段? 既然数据仅仅保留一个月,这点数据对于数据库来说实在是小 case 了。(可以按时间分区,删除起来也不影响当前工作表)
    wxt
        34
    wxt  
    OP
       2022-03-18 16:02:41 +08:00
    @duke807 感觉这种方式不太适合我们 这个数据回头还得查询 计算处理什么的 感觉操作文件弄起来有点麻烦。
    zhangrenjie
        35
    zhangrenjie  
       2022-03-18 19:51:59 +08:00
    刚开始是使用 influxdb ,后面转到了 hbase,慢慢堆起来之后发现 Hbase 磁盘占用太多了,现在在踩坑 clickhouse 。
    liveej
        36
    liveej  
       2022-03-19 08:55:21 +08:00
    也推荐 TDengine ,省资源,技术支持方便
    ljhskyso7
        37
    ljhskyso7  
       2022-03-19 15:08:26 +08:00 via iPhone
    @wxt 可以试试这个: http://iotbase.io/

    第一个真正意义上的物联网数据库,特点已经在官网有说明。总结一下:MQTT 消息直写(也兼容 pg 线协议),顶级的写入性能,顶级的分析查询性能(引擎内部对标 ClickHouse ,比 ClickHouse 快;外部对标 Timescale ,比 Timescale 快的 2-3 个数量级),免运维设计,极好的工程稳定性,完整地支持常用 SQL 函数。有待改进的是,目前只支持单机(但支持 HA ),复杂的 SQL 分析函数和 JOIN 还在进行中。

    目前团队正在进行一些上云的工作,所以 SQL 方面的功能性增强会稍微放几天。

    团队正在对有真实需求的企业用户提供免费内测,CEO 直接提供企业级支持,欢迎申请:
    [email protected]
    wxt
        38
    wxt  
    OP
       2022-03-28 11:14:55 +08:00 via Android
    @ljhskyso7 多谢 抱拳
    wxt
        39
    wxt  
    OP
       2023-02-20 17:56:22 +08:00   ❤️ 2
    回顾一下,最后我们选用的涛思,大概运行半年多了,目前看没什么毛病很稳定,速度也还可以,也兼容很多之前的 mysql 语句,所以程序改动相对比较小。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5541 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 06:37 · PVG 14:37 · LAX 22:37 · JFK 01:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.