首页 新闻 会员 周边

大数据分页逻辑优化问题

-2
悬赏园豆:50 [已解决问题] 解决于 2017-03-27 14:05

需求:根据用户Id与文章Id获取文章数据并按时间倒序分页(文章数据通过web API获取)

其中每个用户Id对应用户发表的多篇文章(数量不确定),每个文章Id对应一篇文章
假设用户Id数量为100+,文章Id为5000+(指数不断增长中)

问题:一次性通过用户Id与文章Id分页获取数据导致数据库执行超时

由于业务特殊性,必须通过用户Id与文章Id才能取得完整数据,请问在不改动数据提供者的情况下,如何优化获取数据的逻辑且保证取得的文章列表能以时间(文章发表时间)倒序分页?

JoiWilliam的主页 JoiWilliam | 小虾三级 | 园豆:546
提问于:2017-03-25 10:27
< >
分享
最佳答案
1

1单表场景下

因为你这里userid过滤度相当高,结合你实际需求,你可以在userid,articleid上加一个复合索引即可,这种情况下如果不是极高的并发或者写入量太大扛千万到亿是没问题的

2分表

根据userid做hash后分片,索引依然如上,这样在正常高并发或数据量很大的情况下一般是没什么问题的,如果数据增量大则考虑一致性hash

收获园豆:30
Daniel Cai | 专家六级 |园豆:10424 | 2017-03-25 11:37

复合索引+覆盖索引效果会更好(include所有SELECT的列)

dudu | 园豆:31007 (高人七级) | 2017-03-25 17:42
其他回答(1)
0

是一个文章表.一个用户表.文章表有userid.然后要根据userid查询取文章表分页?

收获园豆:20
吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-25 10:52

查询不涉及用户表,直接从文章表获取数据的

支持(0) 反对(0) JoiWilliam | 园豆:546 (小虾三级) | 2017-03-25 11:03

@JoiWilliam: 我也没说用户表啊..

文章表根据userid查询取分页?

一次性通过用户Id与文章Id分页获取数据..我都看不懂这句话是什么意思

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-25 11:28

@吴瑞祥: 就是通过全部的用户Id与文章Id做分页查询

支持(0) 反对(0) JoiWilliam | 园豆:546 (小虾三级) | 2017-03-25 11:44

@JoiWilliam: 如果是全部用户id了.那还传他干嘛.不就不用传了.

你的需求是用户列表展示每个用户的几篇文章?

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-25 11:55

@吴瑞祥: 需求要展示部分用户的所有文章(用户Id)和其他指定文章(文章Id)

支持(0) 反对(0) JoiWilliam | 园豆:546 (小虾三级) | 2017-03-25 12:08

@JoiWilliam: 用union吧.

select*from wenzhang where userid in (ids)

union select*from wenzhang where id in (ids)

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-03-25 13:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册