1
ipwx 2021-09-14 11:13:13 +08:00
加内存,用内存数据结构做。
这可能是最容易的优化方法 |
2
wzq001 2021-09-14 11:39:11 +08:00
传 1 万个“公司 id”去变更记录表都查要十几分钟
|
3
wzq001 2021-09-14 11:40:25 +08:00
??? 业务需要批量变更数据?能不能单独的变更
|
4
yidinghe 2021-09-14 11:40:51 +08:00 via Android
试下 elastic search,将计算负担分流到多个节点
|
5
saberlong 2021-09-14 12:07:20 +08:00 via Android
分片。把两张表拉下来,根据公司 id 分片,存到磁盘上。然后一个一个分片加载到内存中计算。磁盘持久化的 b+树上千万级,性能下降很厉害。
|
6
ericbize 2021-09-14 12:17:03 +08:00 via iPhone
不说说什么硬件么
|
7
zoharSoul 2021-09-14 12:19:34 +08:00
不说说什么硬件么
正常来说 1w 个公司 id 去查记录表应该是秒出 |
8
goobai 2021-09-14 12:51:40 +08:00 via Android
数据同步到 es,然后再查
|
9
qq8331199 OP |
11
feirenK 2021-09-14 14:46:35 +08:00
hbase
|
12
feirenK 2021-09-14 14:47:12 +08:00
ck
|
13
ytmsdy 2021-09-14 14:57:51 +08:00
贴一下执行计划,这样大家可以集思广益的看一看。
|
14
zhengsidao 2021-09-14 15:01:54 +08:00
用 es 去查实际上是比较快,1.5 亿的数据量很少,term query 很快就能找到。
不过就算是用什么来存储 一万个 id 要查十几分钟,你们到底怎么存的,会这么慢 |
15
tulumu 2021-09-14 15:07:27 +08:00
可以试试实时计算行不行
1. 变更表 binlog 实时更新到 kv 存储中(redis/hbase) 2. 接入主表 binlog, flink 实时 lookup 或者 lookup 缓存 来关联变更维表(redis/hbase), do something, 产生你想要的逻辑的新表 |
16
ddkk1112 2021-09-14 15:33:37 +08:00
上 clickhouse
|
17
tiiis 2021-09-14 15:48:28 +08:00
mysql ? 看看索引有没又生效哦,我们几十亿数据 mysql 分好表做好索引也可以毫秒级别的
|
18
aragakiyuii 2021-09-14 16:04:42 +08:00
数据库,表结构,索引都是什么?
这些不知道的话挺难想思路的。。。 |
19
ericbize 2021-09-14 16:36:27 +08:00
什么数据库? mysql 的话 看看 buff pool 是多少啊, 正常 128 G 内存 如果放 两张表 都可以全部进内存了吧
|
20
hongweiliuruige 2021-09-14 16:46:19 +08:00
mysql8.0
|
21
abccccabc 2021-09-14 17:00:31 +08:00
同步一张新的表需要实时吗?不需要的话,走计划任务呗
|
22
qq8331199 OP |
23
qq8331199 OP @zhengsidao
说错了 1W id 我测试的时候应该有人操作数据库,后面再测了一次 只用 2 分钟,但是还是慢 |
24
abccccabc 2021-09-14 17:26:51 +08:00
|
25
qq8331199 OP @zhengsidao
es 也不太行,1.5 亿的数据是全部需要查的,其实我还要 3 张过亿的表需要查,之前试过全部放 es,一起查这 4 张表,速度并没有很快,还很容易超时 |
29
aragakiyuii 2021-09-14 18:54:08 +08:00 via iPhone
1.5 亿表里就算索引生效,读的 block 也太多了
看看这个 https://dev.mysql.com/doc/refman/8.0/en/range-optimization.html#equality-range-optimization |
30
aragakiyuii 2021-09-14 19:01:29 +08:00 via iPhone
再给点信息吧😂字段类型,字段索引,索引类型,还有 explain 的结果
|
31
aragakiyuii 2021-09-14 19:03:16 +08:00 via iPhone
或者不如找个内存大的服务器读到内存里去处理
|
32
ericbize 2021-09-14 20:29:40 +08:00 via iPhone
@qq8331199 先看看是不是 table per file, 如果是的话 你可以试试整理一下? (可能有卡死的风险)你看看是不是 innodb, 不过建议先让 dba 能不能处理一下先
|
33
aru 2021-09-14 20:47:30 +08:00
上 greenplum 吧,只要你的硬盘性能跟得上,上尽量多的 segment,非常快
|
34
qq8331199 OP @aragakiyuii
company_id 普通索引 varchar 类型,上面已经说了,explain 显示是走索引的, 你有试过 1.5 亿里面查 1W 数据要多久吗?不是走主键索引,走普通索引 |