有一个需求,是从 kafka 读取数据入 mysql,数据要保证实时性,要及时入库和查询, 现在是的数据量大概每天 30 万,基本是每秒 4 条的频率 现在的问题是在写入的同时再去查库,会导致查询变慢,有什么好的方案吗?
由于硬件限制,只有台 8g 的机器,没有办法分布式多节点
![]() | 1 netnr 2019-12-31 13:10:19 +08:00 当天 30 万的数据用内存,隔天(半天、小时)入库 |
2 wsldl123292 OP @netnr 我要实时查询的 |
3 wsldl123292 OP 一台机器,8g 内存,要部署 kafka,mysql,web 应用 |
![]() | 4 opengps 2019-12-31 13:16:22 +08:00 每秒 4 条,写入压力并不大,但是大量读取,你得从库了 |
![]() | 5 opengps 2019-12-31 13:16:54 +08:00 ![]() 缓存解决,把最新数据留在内存里,查询时候不用去硬盘 |
![]() | 6 kop1989 2019-12-31 13:18:30 +08:00 写库 30 万条还算可以,关键是查询压力如何?查询跨度如何?得说明白才好分析。 |
7 widdy 2019-12-31 13:22:05 +08:00 内存表。 |
8 wsldl123292 OP @kop1989 做了分表处理,主表基本会保持在 2000w 左右的数据,查询是跨 3 到 4 张表 |
![]() | 9 lhx2008 2019-12-31 13:25:45 +08:00 via Android 一次拿多条,一条语句插完全没有问题,查询看你是索引还是文本,查的量有多少,我建议写多一份 redis 或者是 LSM Tree 的数据库。kafka 的数据等 mysql 落库再删。 |
10 wsldl123292 OP @lhx2008 数据还有各种查询条件,还要做到实时展示,不好弄 redis |
11 optional 2019-12-31 13:33:51 +08:00 每秒 4 条并不算高,看过查询计划哪一步比较慢吗?理论上并不会慢,调个参数试试? |
![]() | 12 encro 2019-12-31 13:36:10 +08:00 查询慢 explain 看看结果? 确定查询满是因为写导致的吗? |
![]() | 13 encro 2019-12-31 13:37:56 +08:00 每天 30 万真的不多。 阿里云最便宜的 rds,也可以支持每天 30 万订单(订单明细,日志等加起来肯定不止 30 万)。 |
14 wsldl123292 OP @encro 大部分的 sql 都看过了,都走了索引,把写停掉就能快不少 |
15 p23XnFNH1Wq953rV 2019-12-31 13:40:11 +08:00 读写分离 |
![]() | 16 encro 2019-12-31 13:43:03 +08:00 |
![]() | 17 authony2020 2019-12-31 13:51:39 +08:00 30 万不大吧,配置确实有点低 |
18 sudoz 2019-12-31 13:52:49 +08:00 每秒 4 条插入,不是常规理解的“高频写” |
19 wsldl123292 OP @encro 应该是,主键是 uuid |
![]() | 20 encro 2019-12-31 14:08:53 +08:00 @wsldl123292 主键不能是 UUID,会导致索引重排(除非你 UUID 是递增的参考另外一个帖子使用 SnowFlake ) |
![]() | 21 wangyzj 2019-12-31 14:20:33 +08:00 这个配置,每天 30w,如果你不是一次读这么多的话应该足以 |
![]() | 22 zunceng 2019-12-31 14:30:25 +08:00 |
23 wsldl123292 OP @wangyzj 就是每次读一天的,当然是分页 |
![]() | 24 fancy111 2019-12-31 14:57:09 +08:00 我有台 1H2G 的机器也想这么做。。。 |
![]() | 25 aloyuu 2019-12-31 15:11:57 +08:00 via Android 内存临时存储数据,宕机时,内存数据如何挽救? |
![]() | 26 wysnylc 2019-12-31 16:02:48 +08:00 让你客户去屎吧 |
![]() | 27 wangyzj 2019-12-31 16:19:29 +08:00 @wsldl123292 spa 全读出来然后前端分页? |
28 luozic 2019-12-31 16:47:07 +08:00 读取的是啥内容? |
![]() | 29 jimrok 2019-12-31 18:25:05 +08:00 分表,因为更新的时候,会加锁限制读到脏数据,分表可以避免不相关的加锁,同时索引更新会更快。或者你允许客户脏读。 |