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

2022-03-18 01:25:03 +08:00
 wxt

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

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

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

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

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

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

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

其他的都大概有点缺点
banmuyutian
2022-03-18 09:03:38 +08:00
我司用 InfluxDB
cco
2022-03-18 09:10:24 +08:00
监控基本上都是无脑时序吧。opentsdb,influxDB 都可以。
spacezip
2022-03-18 09:10:36 +08:00
偶然点进来不太懂开发 我觉得存储性能够一般问题不大
朋友公司 全国四五十万个仪表 双机 1u 双路 32 核心 256 内存 只不过数据量很小每天几个 g 存储目前是 8t nvme 固态
youngce
2022-03-18 09:27:47 +08:00
InfluxDB 性能好但是单机、mongodb 性能差一点但是分布式方案成熟
v2orz
2022-03-18 09:53:01 +08:00
借楼问一下 用 influxDB 的大佬们是怎么做高可用的啊?
blackshadow
2022-03-18 09:57:11 +08:00
@v2orz 高可用要商业版把。 开源的只支持单机模式。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX