6

3 亿 mysql 分表数据根据条件分页查询

 2 years ago
source link: https://www.v2ex.com/t/816213
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  MySQL

3 亿 mysql 分表数据根据条件分页查询

  james2013 · 12 小时 34 分钟前 · 1904 次点击

考勤数据有 3 亿条, 根据公司 id 在 mysql 已经进行分表,分了 100 张表,以后还在增加不少数据 现在有 1 个需求:根据公司所在的省份 /城市,公司名称关键字,打卡人姓名关键字进行分页查询考勤,3 个条件可以同时存在,有没有好的解决方法?

19 条回复    2021-11-18 18:07:31 +08:00

dilu

dilu   12 小时 34 分钟前

Exdui

Exdui   12 小时 22 分钟前

sunjiayao

sunjiayao   12 小时 20 分钟前

分库如果用的中间件。「根据公司所在的省份 /城市,公司名称关键字」这两个条件可以转成公司 id 。然后用 in 保证分片命中率。「打卡人姓名关键字」这个目前看没什么特别好的办法,不过也可以先根据姓名模糊匹配到所有公司 id 。具体得看匹配到的公司 id 多不多,要是太多的话也没啥提速。
(题外话:考勤数据是不是按时间分库比较好,查询时把时间作为必选值)

meeop

meeop   12 小时 16 分钟前

最简单粗暴的办法就是 3 个字段排列组合加 7 个索引
应该是最经济最简单最省事的方法了

考勤表反正也不关心什么高并发高性能

james2013

james2013   12 小时 0 分钟前

@dilu @Exdui 谢谢,我准备自己试下 es 效果

james2013

james2013   11 小时 53 分钟前

@sunjiayao 分表用的是中间件查询,这两个条件可以转成公司 id,我也有这个想法,试过了,发现 100 张表全中了,聚合返回结果时卡住了.由于根据公司 id 查询考勤记录的语句比较多,所以只能按公司 id 分表.
可能还得用 es 等其它的才好解决

sunjiayao

sunjiayao   11 小时 41 分钟前

@james2013 感觉 es 唯一的问题就是多了套运维成本,如果考勤数据涉及更新的话也要做两套数据维护。「由于根据公司 id 查询考勤记录的语句比较多」这个条件我觉得可以看时间维度,比如说按月分表,月表里在按公司 id 查询。可以根据你们的表结构和常用 sql 做下单表压测。来确定按时间分表的颗粒度。我理解考勤这种数据时间跨度最长不会超过一年,也就是说如果按月分表的话最多也就广播 12 个库。理论上是可以接受的

Saxton

Saxton   11 小时 10 分钟前

放过 mysql 吧 他已经超出他能承受的范围了 直接全部同步到 es 做成宽表都比这个来得快

liuhan907

liuhan907   11 小时 8 分钟前

我觉得最经济的按你的需求,应该是换分布式库了。

Erroad

Erroad   10 小时 51 分钟前 via iPhone

感觉这个分表好像按日期分合理些啊

lavanil

lavanil   10 小时 49 分钟前

1.mysql 冷热分离
2.搜索用 es
3.统计用 clickhouse

guanhui07

guanhui07   10 小时 0 分钟前 via iPhone

yRebelHero

yRebelHero   9 小时 45 分钟前   ❤️ 1

@Saxton 你说的这个放过 MySQL 戳我笑点了,大哥是个幽默人。

chenbojian

chenbojian   9 小时 39 分钟前 via Android

@Saxton mysql 同步到 es 的方案有哪些呢?

Saxton

Saxton   9 小时 19 分钟前

@chenbojian 1. canal 2. Debezium

c88155745

c88155745   6 小时 57 分钟前

建统计库?

nekoneko

nekoneko   5 小时 10 分钟前

trino,presto

icchux

icchux   4 小时 49 分钟前

es 搜索 clickhouse 做聚合统计 同步有 flink cdc canal 等

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK