物联网传感器发送的数据,走 tcp 或者 mqtt ,每秒大概有 10 万条,每条数据大概 20 个字节大小(5 个 int 值) 现在的问题是:服务端如何保存这些数据。
1, 用什么数据库,如何高频插入 2, 服务器选什么样的配置,来配合数据插入。CPU ,内存,硬盘需要多大。
请各位大佬不吝指教
1
asmoker 2 小时 35 分钟前 via Android
ck
|
2
kenneth104 2 小时 35 分钟前
非程序员
加缓冲层,1 层不够再来 1 层 |
3
FanError 2 小时 35 分钟前
|
4
rockxsj 2 小时 32 分钟前
1 、日志服务器收到之后先落地本地文件
2 、fluentbit watch 本地文件然后发送到 kafka 3 、写个程序从 kafka 消费写入到最终数据库 starrocks |
5
hxzhouh1 2 小时 31 分钟前
好像有个国产消息队列 TDengine , 专门应对这种物联网场景的
|
8
saintatgod 2 小时 25 分钟前
1. 使用时序数据库或者 nosql ,或者 pgsql 这样的数据库,使用队列异步去消费这些数据,插入时候可以批量插入,最好在插入前对数据库进行好分区,然后按照分区读写。
2. 服务器的话需要 16 核的 CPU , 内存按照 32-64 来搞,硬盘的话,你这个量级如果没有估算错,至少 1T ,另外就是带宽搞大一点。 基本上就这样。 |
10
morota OP @saintatgod 感谢大佬,算了一下带宽至少需要 10M ,对吗?
|
12
tool2dx 2 小时 23 分钟前
搜了一下,一般正规一点的 E5 服务器( 24 核心+24G 内存),mysql 每秒能支持到 117 万的请求。
当然他测试客户端没那么多,你是物联网,tcp 来源比较碎片化,性能可能要打折。 感觉优先走分布式,一个机房宽带顶不住啊。 |
13
tool2dx 2 小时 20 分钟前
|
14
vkillwucy 2 小时 20 分钟前 via Android
kafka + flink + starrocks 大数据套件搞起来
|
15
KOMA1NIUJUNSHENG 2 小时 16 分钟前 1
搞不懂和大数据有什么关系,这种物联网硬件数据明显用时序数据库啊
|
16
bthulu 2 小时 14 分钟前 1
那就是每秒 50 万个 int, 共 2MB. 就是每秒 2MB, 直接写文件, 一条一行. 这样是个设备就能满足要求.
几十块收个几年前的斐讯盒子, 刷机, 把自己的程序放上去就行了. |
17
standchan 2 小时 10 分钟前
clickhouse ,不要求实时的话,都放在消息队列里面慢慢消费
|
18
songyoucai 2 小时 9 分钟前 2
做过物联网的来回答一下。 首先你的边缘网关,就需要处理这些数据。并不是所有的数据都需要入库的,比如传感器每 5s 上报一次。有一些频率甚至更低。 想想你物联网网关,如果是走的 5g 来上报数据,流量卡吃得消吗
假设你已经是边缘网关清洗过的数据,现在设备几万台,,每秒就是有 10 万条数据. .这时候需要用到时序数据库,消息队列是给物联网后续的指令去消费的。 重点: 边缘网关做数据清洗和心跳,定期上报异常数据和转发指令。这样如果是平常的数据,可以每十分钟发送一次数据包到服务器。异常数据(超过指定阈值。比如温度过高,报警信息)和指令回复可立即上报。 时序数据库存储 来做数据存储,消息队列来消费数据。 进行告警时段统计等信息。 |
19
Curtion 2 小时 8 分钟前
时序数据库直接存问题也不大吧
|
20
ggabc 2 小时 3 分钟前 via Android
缓冲一下分批量写入就行
|
21
bthulu 1 小时 59 分钟前
为啥你们想的这么复杂呢? 就起个服务接收物联网设备请求, 顺序写文件就行了, 什么设备都能满足要求.
你们 BT 下过小姐姐嘛? 每秒几十 M 都毫无压力, 存储数据这块, 就他这个每秒 2M, 随便搞个树莓派都能做到. 唯一难点就是, 这每秒 10 万条数据来自几个设备, 如果是 10 万个设备, 那可能确实需要两三千块钱买个 ryzen 5600 级别的主机. 如果就那么几十个设备, 真的需要花钱吗? |
23
yunpiao111 1 小时 54 分钟前
存的话 怎么样都可以, 存成文件都可以, 你接下来的这部分数据除了保存, 是不是还有读取需求和留存时间要求, 这部分需求也影响选型
- 如果后期要检索, 最好性能好点+大存储的机器搭一个时序数据库, 或者直接用一个云时序数据库 - 如果只是留存, 机器选型成数据压缩后转发->云对象存储 |
24
csys 1 小时 53 分钟前
这种技术方案在遥测领域有很多
粗看下来我的直觉方案是: 缓冲(内存+本地),使用 WAL 批量填入 tsdb 甚至可以不写入 tsdb ,取决于你有多少传感器,如果是有限数量的话,可以直接写入文件,看使用数据的场景来决定是否需要 parquet+bloom filter 如果传感器数量很多又是动态的话,可以使用云对象存储来做 |
25
SoulSleep 1 小时 52 分钟前
@bthulu #16 “几十块收个几年前的斐讯盒子, 刷机, 把自己的程序放上去就行了.”..................你只考虑 1 秒里发生的事+理论数值,实际情况怕是 10 个斐讯盒子也撑不住
———————————————————————————————— 1.10 万/秒+物联网,显然是落库到时序数据库,想要高频那就批量插,持久化之前不要搞太多逻辑,存下来再说处理的事 2.如果每秒 10 万条===每秒 10 万个请求,那你得瓶颈可能在网络、CPU 上,网络比较传统,大力出奇迹,上高带宽,CPU 低频多核,不行就分布式多台扛。 内存没太特殊,硬盘现在很多数据库有压缩技术,你这个数据量不大。 |
26
ymz 1 小时 51 分钟前
InfluxDB
|
27
ymz 1 小时 47 分钟前
@songyoucai 边缘网关是硬件设计好阈值,直接对数据进行清洗后再向服务器上报么
|
28
cus 1 小时 44 分钟前 via iPhone
这个 10w/s 是多少设备呢
|
29
cat007 1 小时 41 分钟前
1, 用什么数据库,如何高频插入 ?用 iotdb ,10w/s 才是这个数据库的起步
2, 服务器选什么样的配置,来配合数据插入。CPU ,内存,硬盘需要多大? 10w/s 级别官方推荐 2-4 核就可以,具体看官网资源规划 链接 https://iotdb.apache.org/zh/ |
30
Jinnrry 1 小时 41 分钟前
kafka 接受数据
ck 或者 sr 存数据 |
31
minoic 1 小时 37 分钟前
时序数据库,例如 InfluxDB
|
33
morota OP 设备倒是不多,大概 50 个,每个发送 2000 条。但是这是最初的一个数据量,后续设备会持续增加。
看了大家的回复,总结一下大概是: 1 ,直接写到文件里 2 ,存到时序数据库里 写到文件里岂不是要出现非常多的文件。跟 BT 下小姐姐一样的技术,感觉难度更大,更不好搞。 还是倾向于写到时序数据库里 那么问题焦点就是内存和带宽需要很大吗,需要分布式吗? |
34
nanrenlei 1 小时 35 分钟前
这玩意要结合具体业务场景具体分析的,比如这些数据是要永久存储还是消费完就不用了,还有实效性,如果用一次就不用了可以不用数据库,如果实效性不要求特别及时的话可以上消息队列,如果要永久存的话可以使用 InfluxDB 、hbase ,mongo 和 mysql 就不建议用了,这么大的数据量查询都是个问题
|
35
Plutooo 1 小时 34 分钟前
消息队列异步消费+1
网传 kafka 吞吐能 17w ,rocketmq 能 11w ,感觉完全没啥问题 |
36
wkong 1 小时 33 分钟前
WAL ,直接写文件
|
37
Outer2048 1 小时 31 分钟前
先放到 kafka ,只要硬盘够大,每秒 10w 问题不大
问题是一天 8,640,000,000 数据量,mysql 肯定是不行了,请楼下的懂王解答 |
38
lqw3030 1 小时 30 分钟前
把数据处理(聚合、筛选)前置,就像楼上老哥提到的边缘设备处理
|
39
songyoucai 1 小时 28 分钟前
@ymz 对的,这只是他众多功能中的一种。
|
40
a67793581 1 小时 28 分钟前
@songyoucai 感谢分享,有一个细节,是请求过来直接丢时序数据库吗? 还是先丢消息队列,然后就是消息队列具体要多大才能扛住这个量级 没有计算过
|
41
meeop 1 小时 27 分钟前
简单啊,你搞 10w 个服务器负载均衡,每个服务器就只需要 1qps 的存储了,随便搞
|
42
wulili 1 小时 27 分钟前 1
看似很多,也就每秒 2mb 左右的数据量,内存能有什么压力,都先丢内存里,把数据整合一下,再慢慢插入数据库或者写入文件都可以吧。
|
43
jimrok 1 小时 26 分钟前
先用日志方式收数据,多台服务器的磁盘写入肯定能保证,放入数据库你要考虑好,单节点吞吐量肯定不够,需要一个群集才能吃下这些数据,还需要分片存储。每个设备你要知道存在那个库,哪个表里,还需要一套元数据管理服务。
|
44
ming159 1 小时 24 分钟前
假设一条消息 1KB. 10W 条 约 100MB 数据.
在这个基础上留出一定的余量, 比如 就按 200MB 算. 关键是 2 处 IO 瓶颈. 1. 你的服务器 SSD 硬盘每秒写入速度是多少? 2. 带宽是多少? 剩下的,写个简单的测试程序,先直接内存生成 200MB 假数据, 循环往测试服务器写. 你会发现,貌似一台单机基本就没压力. 剩下的就是看你们团队技术偏好,数据增长规模多少,来选合适的数据库就行了. 一台不行 2 台. |
45
songyoucai 1 小时 22 分钟前
@a67793581 看你具体需求,一般都是先丢进消息队列,然后时序数据库去消费, 在消费的时候,根据具体的业务逻辑来格式化数据。消息队列只管生产和消费,时序数据库要管查询、计算,统计。
|
46
everhythm 1 小时 10 分钟前
真实需求真的是这样么……相当于 10w 人在线的实时联网游戏了
首先每秒 10w 条,是不是一定分开 10w 条请求,不是的话考虑合并上报,楼上也说了每几分钟合并成文件上传,即合并数据的空间或时间 然后这个高频插入,是插入之后需要实时查询么,不实时那慢慢屯到 MQ 慢慢消化也行?数据插入后如何使用会影响你的设计 |
48
a67793581 1 小时 5 分钟前
@songyoucai 嗯 目前公司用的是 kafka + flink + hive
|
49
pkoukk 1 小时 3 分钟前
楼上都在说啥啊,物联网数据,5 个 int ,这不就是标准时序数据库么? 10W 在时序数据库里算个锤子多
市面上流行的时序数据库都支持百万级写入 |
50
sampeng 1 小时 1 分钟前 via iPhone
就一句,和技术无关。无论如何先落盘。再消费到系统里面做业务存储。不然有锅都没地儿甩。存储随便,这点 metric 数据你是看不起谁呢…
|
51
ytmsdy 1 小时 0 分钟前
kafka+ InfluxDB
|
53
fengemma9 59 分钟前
付费数据库适合你
|
56
JungleZZ 47 分钟前
有个疑问,这些数据是直接落库使用的吗?我也是做物联网的,我们设备的数据都是转到 rocketmq 供下游服务消费后了处理了之后才存表的。举例:计算设备每天的运行时间,那肯定得是第二天统计了头天的数据然后存表。就算是大量的数据要落库,你也可以考虑下他们是否要求实时性,如果不是,那就丢队列慢慢消费。
|
58
fuis 44 分钟前
直接三板斧搞定:Kafka ,Redis ,MySQL 。数据来了之后先存到 mq 里慢慢消费
|
59
reatang 41 分钟前
可不可以在开头过滤一些无所谓的数据,手工降频
|
61
xuanbg 40 分钟前
看你这个 10 万/秒是浪涌还是持续性的。浪涌的一般丢消息队列削峰,后面正常入库就完了。持续性 10 万每秒,那就只能上负载均衡+数据库集群了。单数据库无论如何扛不住 10 万/秒的写入。
|
62
ptaooo 36 分钟前
应该算是典型的时序数据吧
国外的 influxDB 国内的 TDengine 应该都可以满足了 |
63
ala2008 35 分钟前
一定避免直接写数据库,存在瓶颈
|
64
me1onsoda 34 分钟前
seriously ? 60*60*24*100000 不算增量一天就是 9 位数的存储,真的有必要每条消息都要存储吗
|