700W 数据的表,如何做分页查询,速度不低于 1s

2021-07-14 12:15:41 +08:00
 kikione

mysql ,700W 数据的表,如何做分页查询,速度不低于 1s

7085 次点击
所在节点    程序员
45 条回复
akira
2021-07-14 20:59:44 +08:00
分页查询在大数据量,多种复合条件查询 的时候 , 确实都比较麻烦 ,没有什么太好的办法
2kCS5c0b0ITXE5k2
2021-07-14 21:01:08 +08:00
700W 真的不带条件查询的吗..
LING97
2021-07-14 23:49:16 +08:00
我们是 40 亿条数据,不过查询用的 es,速度远小于 1 秒,而且大数据的分页这个需求有点没必要把,肯定要带条件。就像上面那个老哥说的,谁会去看第 6w 页的数据。
young1lin
2021-07-14 23:53:27 +08:00
我用 HBase,几亿数据(浙江农业银行),分页也是秒返回。根据不同业务,将 RowKey 拼接好就行了,上 Es 表也是可以的。
yagamil
2021-07-15 07:50:05 +08:00
做那么多分页,人是不会去看 100 页后面的了, 反而给了机会给那些爬虫的程序,分分钟拖垮你数据库.
要么是有查询条件.
huang119412
2021-07-15 08:53:37 +08:00
使用内存数据库,或者傲腾 p5800X 级别固态。
wowbaby
2021-07-15 09:12:23 +08:00
单表 2k 多万,id 是自增,非自增情况,可用雪花算法支持排序,这个我没实际用过,我都是用自增
SELECT * FROM `ht` LIMIT 20049925, 30; // 9.283s
SELECT * FROM `hanting` WHERE id>20049925 LIMIT 30; // 0.001s

前一页的最大行 id,根据 id 来限制起点,微信粉丝列表接口中要传 openid 估计就是这么个理
wowbaby
2021-07-15 09:20:00 +08:00
加条件估计做不到吧,上 elasticsearch
ZeroDu
2021-07-15 09:25:34 +08:00
HBase 直接干,TB 级别
linbiaye
2021-07-15 09:33:35 +08:00
一般都是通过自增 id 解决,搜索条件带上 id
ebony0319
2021-07-15 09:37:26 +08:00
700W 如果只是单表查询感觉还是比较 ok.
分页查询主要查了两次 第一次查 count(1),第二次具体分页,大数据可以采用 more 的策略,比如你要查 20 条的数据,你可以查 21 条,返回 20 条,然后告诉前端还有更多,这样就节省一次 count 查询.
ruanimal
2021-07-15 10:06:15 +08:00
@3dwelcome leveldb 能分页??
echoZero
2021-07-15 10:12:25 +08:00
如果底层使用 mysql 不变的情况,可以采用瀑布流的,使用最大 id 来查询分页,这样效率不会低
xiaowei7777
2021-07-15 10:26:25 +08:00
用 es 吧
pkwenda
2021-07-15 10:32:09 +08:00
@xiaowei7777 #34 es 也不行,es 只能考虑游标,且 es 默认限制只能 Limit 10000
KouShuiYu
2021-07-15 10:32:20 +08:00
加上索引,去掉 order,
wangyzj
2021-07-15 10:35:02 +08:00
别用 limit
用 where id>
或者 redis zset 分页
leqoqo
2021-07-15 10:40:18 +08:00
QQ 群关系数据库 几十亿条数据 group 是按 qq 号分的表 QQ 号 /100000 向下取整 为一张表 这样你通过 QQ 号查找 动态拼接表名 就能缩小范围
3dwelcome
2021-07-15 11:32:32 +08:00
@ruanimal " leveldb 能分页??"

弄个自增长 ID 当 KEY,粗略分页呗,chrome 的 indexedDB 就是这样做的。

主要是 key-value 数据库查询快啊。
zhouyou457
2021-07-15 11:36:13 +08:00
用 mysql 做过亿级订单数据分页,先用订单时间做数据库分区检索再做分页,结果效果一般,特别是碰到跨区的时候。。更别说加上一些复杂的筛选条件了。。

最后在掐死产品之前,把订单数据迁移到了 Hbase 。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789448

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX