一个程序开发问题请教各位 V 友大佬,每秒 10 万条数据需要存储,怎样选择技术方案

250 天前
 morota

物联网传感器发送的数据,走 tcp 或者 mqtt ,每秒大概有 10 万条,每条数据大概 20 个字节大小(5 个 int 值) 现在的问题是:服务端如何保存这些数据。

1, 用什么数据库,如何高频插入 2, 服务器选什么样的配置,来配合数据插入。CPU ,内存,硬盘需要多大。

请各位大佬不吝指教

12323 次点击
所在节点    数据库
122 条回复
bthulu
250 天前
为啥你们想的这么复杂呢? 就起个服务接收物联网设备请求, 顺序写文件就行了, 什么设备都能满足要求.

你们 BT 下过小姐姐嘛? 每秒几十 M 都毫无压力, 存储数据这块, 就他这个每秒 2M, 随便搞个树莓派都能做到.

唯一难点就是, 这每秒 10 万条数据来自几个设备, 如果是 10 万个设备, 那可能确实需要两三千块钱买个 ryzen 5600 级别的主机.

如果就那么几十个设备, 真的需要花钱吗?
a33291
250 天前
@bthulu +1 tcp 收先存内存,然后分块落盘,即使 hdd 也至少几十 M 的写入,另外一侧读做业务完事
只要磁盘够就行
yunpiao111
250 天前
存的话 怎么样都可以, 存成文件都可以, 你接下来的这部分数据除了保存, 是不是还有读取需求和留存时间要求, 这部分需求也影响选型
- 如果后期要检索, 最好性能好点+大存储的机器搭一个时序数据库, 或者直接用一个云时序数据库
- 如果只是留存, 机器选型成数据压缩后转发->云对象存储
csys
250 天前
这种技术方案在遥测领域有很多
粗看下来我的直觉方案是:
缓冲(内存+本地),使用 WAL
批量填入 tsdb
甚至可以不写入 tsdb ,取决于你有多少传感器,如果是有限数量的话,可以直接写入文件,看使用数据的场景来决定是否需要 parquet+bloom filter
如果传感器数量很多又是动态的话,可以使用云对象存储来做
SoulSleep
250 天前
@bthulu #16 “几十块收个几年前的斐讯盒子, 刷机, 把自己的程序放上去就行了.”..................你只考虑 1 秒里发生的事+理论数值,实际情况怕是 10 个斐讯盒子也撑不住
————————————————————————————————
1.10 万/秒+物联网,显然是落库到时序数据库,想要高频那就批量插,持久化之前不要搞太多逻辑,存下来再说处理的事
2.如果每秒 10 万条===每秒 10 万个请求,那你得瓶颈可能在网络、CPU 上,网络比较传统,大力出奇迹,上高带宽,CPU 低频多核,不行就分布式多台扛。
内存没太特殊,硬盘现在很多数据库有压缩技术,你这个数据量不大。
ymz
250 天前
InfluxDB
ymz
250 天前
@songyoucai 边缘网关是硬件设计好阈值,直接对数据进行清洗后再向服务器上报么
cus
250 天前
这个 10w/s 是多少设备呢
cat007
250 天前
1, 用什么数据库,如何高频插入 ?用 iotdb ,10w/s 才是这个数据库的起步
2, 服务器选什么样的配置,来配合数据插入。CPU ,内存,硬盘需要多大? 10w/s 级别官方推荐 2-4 核就可以,具体看官网资源规划
链接 https://iotdb.apache.org/zh/
Jinnrry
250 天前
kafka 接受数据
ck 或者 sr 存数据
minoic
250 天前
时序数据库,例如 InfluxDB
qiyilai
250 天前
@hxzhouh1 得花钱买企业版的,要不然一言难尽
morota
250 天前
设备倒是不多,大概 50 个,每个发送 2000 条。但是这是最初的一个数据量,后续设备会持续增加。
看了大家的回复,总结一下大概是:
1 ,直接写到文件里
2 ,存到时序数据库里

写到文件里岂不是要出现非常多的文件。跟 BT 下小姐姐一样的技术,感觉难度更大,更不好搞。
还是倾向于写到时序数据库里

那么问题焦点就是内存和带宽需要很大吗,需要分布式吗?
nanrenlei
250 天前
这玩意要结合具体业务场景具体分析的,比如这些数据是要永久存储还是消费完就不用了,还有实效性,如果用一次就不用了可以不用数据库,如果实效性不要求特别及时的话可以上消息队列,如果要永久存的话可以使用 InfluxDB 、hbase ,mongo 和 mysql 就不建议用了,这么大的数据量查询都是个问题
Plutooo
250 天前
消息队列异步消费+1
网传 kafka 吞吐能 17w ,rocketmq 能 11w ,感觉完全没啥问题
wkong
250 天前
WAL ,直接写文件
Outer2048
250 天前
先放到 kafka ,只要硬盘够大,每秒 10w 问题不大
问题是一天 8,640,000,000 数据量,mysql 肯定是不行了,请楼下的懂王解答
lqw3030
250 天前
把数据处理(聚合、筛选)前置,就像楼上老哥提到的边缘设备处理
songyoucai
250 天前
@ymz 对的,这只是他众多功能中的一种。
a67793581
250 天前
@songyoucai 感谢分享,有一个细节,是请求过来直接丢时序数据库吗? 还是先丢消息队列,然后就是消息队列具体要多大才能扛住这个量级 没有计算过

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

https://ex.noerr.eu.org/t/1093560

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

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

© 2021 V2EX