每天新增8640w数据,怎么存储比较好

客户端每10秒产生一条数据(包含客户端的唯一ID/时间/业务数据),每个客户端每天生成8640条数据。
共10000个客户端,每天新增8640w条数据


数据示例:

client_id start_time finish_time video_id
1 2021-12-27 11:05:21 2021-12-27 11:05:31 11
2 2021-12-27 11:05:25 2021-12-27 11:05:35 11
2 2021-12-27 11:05:35 2021-12-27 11:05:45 12

后期查询需求

需要按客户端,指定时间范围查询,比如:

SELECT client_id,COUNT(video_id) FROM table WHERE video_id=11 start_time > 'xxxx' AND finish_time < 'xxx' GROUP BY client_id

也需要按业务数据查询,比如:

SELECT video_id, COUNT(client_id) FROM table WHERE  start_time > 'xxxx' AND finish_time < 'xxx' GROUP BY video_id

请问这种情况,数据应该怎么存储比较好?

本帖已被设为精华帖!
本帖由系统于 2年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 50

可以补充个数据结构出来。从现在的文字描述没办法理解你这个业务数据 指的是枚举字段还是一种数据结构。

2年前 评论
张三 (楼主) 2年前

TIDB是你的不二选择

2年前 评论
张三 (楼主) 2年前
kolin 2年前
Sunn 2年前

如果不需要修改或删除数据,可以考虑第三方日志服务

2年前 评论
张三 (楼主) 2年前
liaosp 2年前

这个数据量有点大,可以考虑一下使用mongodb来存储日志类的数据,设置保存一段时间数据,之前的数据做一个或者多个统计表,然后定期删除已经做过统计表的数据,减少数据存储的量。

2年前 评论
张三 (楼主) 2年前
pi_phq 2年前
她来听我的演唱会 (作者) 2年前

hbase?

2年前 评论
张三 (楼主) 2年前

物联网行业? 使用mongodb吧 这种日志一般也只是查,甚至只是存档而已

2年前 评论
张三 (楼主) 2年前
她来听我的演唱会 2年前
张三 (楼主) 2年前

不知道楼主知道,时序性数据库不?这个是针对物联网海量数据设计的查询数据库。不过需要一定的学习难度。

2年前 评论
张三 (楼主) 2年前
fatrbaby

clickhouse

2年前 评论
梦想星辰大海

楼主关注一下这个:www.taosdata.com/cn/ php的连接器是这个:github.com/Yurunsoft/php-tdengine

2年前 评论
张三 (楼主) 2年前

es 或者阿里云sls 腾讯云日志服务

2年前 评论
游离不2

怎么存不是问题,怎么用才是你的问题

2年前 评论

只存不改的话,可以考虑下MySQL的Archive存储引擎

不过最终还是要看你要拿这些数据做什么

2年前 评论

elk或者mongodb

2年前 评论
陈先生

按照你这个数据量,不要使用关系型数据库,使用时序数据库吧。类似数据上报一样了

2年前 评论
Rytia

1、楼上说时序性数据库可以,你可以试试 2、目前我自己在从事广告数据开发方向。这种场景下,如果数据只增不减,可以考虑直接采用 OLAP 列式的数据库,这点数据量还是很轻松的。楼上举得 clickhouse 就是个不错的选择,擅长做日志等明细数据

2年前 评论
张三 (楼主) 2年前

单客户端一天8640条数据,目前1w台客户端,一天8640*1w=8640w条数据,一年大概315亿条数据。

TDengine的超级表感觉很不错,可以按客户端存到子表里,但是TDengine的查询功能好像不如clickhouse支持的好。

但是不知道clickhouse单表(大概10列,都是id,datetime类型)存几百亿数据数据会不会有啥问题。

昨天自己的电脑测试了下clickhouse单表三列(id UInt32, name String, created Datetime)mergeTree引擎,10亿数据查询速度挺快(机器配置 AMD 2400G / 16G DDR4 3200 / 海康c2000pro NVME硬盘)

@Rytia @laravelcc @fatrbaby @梦想星辰大海

2年前 评论
张三 (作者) (楼主) 2年前
nion 2年前
梦想星辰大海 2年前

看了 TDengine 官网贴出的性能对比图,为啥 说性能远超 clickhouse ?

2年前 评论

有很多人推荐clickhouse类分析数据库,此类数据库适合多写少读,我认为这个场景作为多写多读的场景,更适合使用MongoDB分片实例,再根据读场景进行分表,比如说取某个视频下的开始结束时间,就根据视频id分表,然后记录开始,结束时间.用户id,极大减少每个表的数据量,根据用户id做一个索引,并且不用担心video_id增长带来的表过大问题,另外可以考虑删除过期数据,或者定期搬运数据到冷数据表

2年前 评论
张三 (楼主) 2年前
梦想星辰大海

试试用bitmap存储你的数据,比如搜索条件作为key,业务数据作为value,这个value是个bitmap。 这样做的前提是你的value部分的值必须是int

2年前 评论
张三 (楼主) 2年前
SanXiao

一天百万数据 目前再用 influxdb

2年前 评论

一天3亿数据。存mysql没问题、但是会定时清理、
分rds 分表 分库 没问题

1年前 评论

这种 应该上时序数据了吧.. 搜索下吧

1年前 评论

如果都是这样的查询的话:

SELECT client_id,COUNT(video_id) FROM table WHERE video_id=11 start_time > 'xxxx' AND finish_time < 'xxx' GROUP BY client_id;
SELECT video_id, COUNT(client_id) FROM table WHERE  start_time > 'xxxx' AND finish_time < 'xxx' GROUP BY video_id;

是不是可以考虑按时间查询颗粒精确度建立一个汇总表,类似于

    insert into(client_id,log_day,log_hour,log_count) values (1,2022-12-29,10,100);

这样算一下能否提高效率

1年前 评论

楼主,您好,我目前也在ClickHouse、TDengine中选型,想问下,您当时为什么选择了前者?

11个月前 评论
张三 (楼主) 11个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!