每一分钟写入 10 万行数据,有啥好的方案吗?
当然 db 是 mysql,应用是 spring boot
当然 db 是 mysql,应用是 spring boot
先写到 redis,然后处理也在 redis 处理,然后不忙了再慢慢处理就好了。
当然我不相信这个是真是需求,大概率是设了一个理想上限,实际运行起来平均每分钟百十来条。
主我和你说,像你这样的数据,能不 update 就不 update,另外你的 update 让大数据团队也难干活。我建议你是走流水一样的操作,这样主库不开索引 ,只管写。后面弄个几个从库只读,用来做业务查询 ,读写分离。
另外你这量级的话,计算一下数据量,我建议走 DRDS 或者类似的 mysql 集群方案,因为你要考虑到将来你的数据总量实在是太大了。
如果考虑未来增长什么的,最好直接上类 oracle 或者 microsfot sqlserver 方案。数据库成熟 ,能力强尽,只要无脑堆机器 就行。(事实证明自己上 Oracle 在五年成本里和阿里的 DRDS 相比并不贵到哪里去,你看一下 DRDS 的报价就知道了)。
同时可以测一下 Microsoft sqlserver 和 mysql 集群的能力。Sqlserver 能力非常强的。
两个点优化下来,每秒只用写 10 行。
本来的方案是按需生成的,用户进来页面才生成。
但是最近想上一个版本,用户不在界面也要生成(主要他选择了他想定时生成)。
然后他还能看到前 100 条记录。
timescale 缺点是硬盘空间占用大,有点是内存占用小,没有不必要的多维度索引开销(表尽量简单),历史数据也可以压缩
influxdb 优点是实时压缩率高,缺点是内存占用多,启动慢,go 写的
不推荐其他监控用的数据库,性能差或者为 k8s 监控特化太多。
也可以去买按次付费的时序存储,不会很贵。
阿里的 DRDS 方案是可以行,前面开 32G DRDS,后面开 20 个数据库。百库百表。一年烧掉 100 万在数据库上,保他平安。
我不是吹牛,物流企业都这么干的。结果一算 TCO,5 年 TCO 还是 Oracle 便宜了。
所以我觉得你这个数据量扩大个十倍, 应该也不需要系统优化, 换个 4 核的机器就够了.
这种业务通常不那么重要,数据不一定非要落库。落库也可以,当个备份。
直接用 Redis 的 list,还能保证每人 100 条数据。
MYSQL 至少在 5.x 版本的时候索引扫描一旦超过好像 1000 个就会转为全表扫描。这个坑 之酸爽。
其实看主的描述,这个场景并不清楚
首先,DB 写入 1 分钟 10W 问题不大
然后,每个用户就取 100 条,那么 100 条前面的数据怎么处理
其次,还有 update 的场景又是啥
比如说,数据不需要完全的持久化,历史数据不会再使用,我走 redis 的 zset 就能搞定
再比如说,更新计数的场景,那么你先做一下聚合,然后再去更新,这样就可以降低 DB 的写
如果是全量数据都会用到的话,估计就得做分库分表了
总而言之,在主一个模棱两可的需求面前,你是没法给出合适的方案的
应该不是固定超过 1000 个转全表扫描,而是因为索引扫描成本比全表扫描高。
查询优化器根据成本计算选择执行计划的时候,如果你不走索引覆盖或者聚簇索引,需要获取的数据比较多,每次获取都需要根据指针再去做磁盘找数据,导致索引扫描的 cost 比全表扫描的 cost 还高。所以查询优化器选用全表扫描作为执行计划。
你可以用 optimizer trace 对比不同方案的 cost 计算。
比如用时序数据库,改造查询报表部分,反正就 100 条数据,不要依赖 SQL 语法,直接取出全部数据用算法去计算汇总
用 KV 替代时序数据库也可以,同样改造报表部分
如果保留 MYSQL 本身,可以改变入库操作,采用 UPDATE 式入库替换掉 INSERT 入库(类似用逻辑实现 MYSQL 模拟时序库,代码方便改用代码,代码不方便处理用触发器) ,然后存储设备用高 IOPS 的 NVME 盘,或者干脆引擎用 TiDB,三副本全用 NVME 盘
方案多得是,但是更细节的东西,以及生产数据,就不是随便上网问一嘴就可以白给的了
数据应该是每个客户定制生成的吧,客户和客户之间的数据应该不是共享的吧。 这种需求一般就不写库,根据每个客户的 ID 对应一个缓存文件(你这个 1 分钟 1 条数据,1 天也就 60*24 很少的数据量), 直接写缓存文件, 取的时候根据用户 ID 取对应文件。 写数据 /更新业务直接微服务上容器,自动扩展,如果 1 个容器可以同时更新 5W 个用户数据,后续用户大了,动态部署这个微服务。文件直接用企业级的 NAS 也可以用云运营商的云盘文件也可以。这个开发完,直接加钱买机器就可以扩容。
存谁都敢,查一下试试看,特别刺激。你这应用和 zabbix 一样。zabbix 就是出了名的写优化读等死。
https://imgur.com/Zu24WLu
自己拼的垃圾服务器 从我机房堆里翻出来的
读写密集的数据库是全 int 表,不存在字符串,字段数极多
主要业务场景是 INSERT 进来,受限于数据不是本机软件生成,一个 INSERT 只有一条记录一次 commit,所以写查询比 delete 查询数量多,delete 都是按有效期一次删一片
基本 insert 进来的数据有效期是一天,大量分表,没分库。分表依据是基于应用逻辑的,而不是基于数据的算法分表,所
以表行数不均匀,比较少的表几十万行,比较多的 800 万行左右。
数据每天增加的量大致差不多,insert 时间不分散到每个小时,而是按一定逻辑分散。
insert 进来的数据要保存 72 天,之后删除,删旧的,保持数据库内基本保存 73 天的有效数据
删除是我自己写的分布式删除脚本,分散到一天 24 小时除了备份数据时间段的每时每刻
update 是表内数据的主要逻辑,基本主要操作都是 update 一条表记录为一个临时状态值占用,而不是用事务行锁。
过份的谦虚是对人的藐视。
8 NVME 盘 RAID10 高性能的数据中心级 NVME,二代 E5 双路,配 1.5TB RAM 。这配置叫垃圾?
我别的不说你这配置,按照 DELL R730 计价,少说 10 万一台。按照阿里云计价。没有。
从数据层面 来看也就是说你的表最多的一个也就 800 万行。在你的超强配置下并且充分 的利用了优化,撑住。
同时我也很好奇你的备份方案是什么样的。
大数据团队是怎么和你对接数据的。你这么频繁的加库加表,大数据团队也撑的住折腾。
请教请教。
另外我还是很好奇你怎么做备份怎么和大数据团队对接,以二代 E5 的寿命来看,你简直是在玩火。如果一理有问题挂了,你又找不出同样的洋垃圾,你带给公司的灾难身为前运维总监我是不敢想象的。
@594duck #83
公司是数据中心啊
都是按需买的
机房里扣除形象项目 政府项目啥的 90%是垃圾服务器在跑应用……
@594duck #83
大数据团队?不存在的。这只是我的一个自己的小私活而已。
备份方案?应用层备份。每时每刻分布式备份,以及后半夜备份。因为应用特性导致非工作时间的直接操作性业务压力极低极低,不是关闭服务,是没啥人用了,加班的以及圈子开源部分测试 /研发团队在实际使用。后半夜有 2 小时,所有分布式任务全部停止,只保留对零星用户的服务,同时 MYSQLDUMP
@594duck #89
找不出洋垃圾?我机房现在 E5 二代 /一代的服务器大概有六千多台,每个月还新采购 100 台左右
腾讯什么的 CDN 转包那边甚至全是 1366 平台居多,2019 年 6 月份以后新增加节点才大肆上 2011 的机器
1366 的机器而论,大部分出厂日期是 2009-2010 年,我这边 2016-2017 左右采垃圾然后用于生产环境,这批机器,基本到 2020 年左右才开始逐渐影响应用的故障率稍微多一点,所以开始演进往 2011 平台走,现在新采购以 2011 为主,偶尔赶上大批量极其便宜的 1366 还会搞一些,反正自己应用很多用得上的地方
至于你说的寿命,你对硬件寿命真的,一无所知……而且你对捡垃圾这个行业也一无所知。
用 E5 二代平台的原因,主要是内存便宜。1.5TB 是这一代的内存极限,低于这个的也满地,因为廉价内存而已。
DELL 的十三代平台,垃圾渠道已经开始流通了,最大的阻碍是 D4REG 和 D4LRDIMM 内存太贵而已
比如吧 你现在天天看的国内大视频网站,他们最大的分发是廉价采购的多重转包的资源回收,这部分,基本全是在用 1366 的机器在跑(因为成本低)。
比如,我现在机房有一个小项目,某知名视频站的大概 80Gbps 的分发,16 个机柜,每个机柜 12 台服务器,共计 192 台服务器。
因为这个项目是最近谈的,直接从备用机里提了 192 台 R720xd,客户对 CPU 和内存要求不高,所以上的 2640v2 双路,64G/128G 内存,每台机器 12 块 2TB 垃圾 SSD+魔改 H710 为 HBA 。没几个成本。
如果这个项目要是 2018 年接的,那么基本上当时就是配 R510/C2100 这种机器+双路 L5640+48GRAM+2TB*10 了
另外根据自己使用经验,DELL R 系列服务器在 3 年后的故障率极高 5 年后主板故障率也极高,你跑的业务是 CDN 7×24 小时高负载,2009 年的服务器你说要到你说要到 2020 年才出现 高故障率.以我自身的经验是超出的。
有特例么,肯定有的,什么跑 7 年的 DELL 服务器我也见过。但是 DELL 自己认可也就 5 年,从 DELL 的续保策略上是可以看出来的。
另外我确实不捡垃圾,以我们正规业务来讲,SLA 99.94%是最低要求,捡垃圾带来的收益 根本没必要。所以我明白你的业务场景是 CDN,不需要稳定只需堆量和便宜。
这和企业业务场景一致么,和企业 SLA 业务场景一致么?
而且,大量的业务可用性是用 HA 机制保障的
我不知道你经手管理过多少物理环境在标准内的大批量设备
硬件故障率,不含硬盘,远没有你想象的那么高
这里边牵扯到数据部分归档的问题。
你知道 4 个 9 是什么概念的。