pg海量数据分页

1.精准分页问题

1)传统的精准分页(能获取到总页数并且任意跳转页码)在需要符合条件的记录总数目,pg在这个地方是一个大坑,pg的count查询性能不行(目测不如mysql,sqlserver,mongodb,这些当然项目当中全用过).pg官网wiki给了个count estimate(https://wiki.postgresql.org/wiki/Count_estimate)的解决方案,通过explain select ...方式返回rows作为近似数目。实测下来数目偏差很大用户体验不好。

2)limit+offset在页码大的时候对cpu,内存,磁盘io开销太大直接不响应

 

2.非精准分页方案

1)产品层面+技术层面共同解决,例如baidu只能搜到76页,google只能搜索到后面几页,github只能到100页.

2)避免count查询

3)避免limit+offset

具体思路可以有很多种:)

 

3.项目背景

1)企业终端上报审计(上网、文件使用...)数据,日志表已经水平拆分,控制单表数据量百万级别(count已经很慢),3000终端月数据量2亿+,定时做数据归档。

2)elasticsearch方案更合理

优点:无count问题;且天生分布式,不像pg要自己做分布式方案;天生支持文本搜索,不像pg要用pg_trgm模块

缺点:不适合join(可用siren插件https://siren.solutions/relational-joins-for-elasticsearch-the-siren-join-plugin/,未实测)

方案:from+size不适合做深度分页,可用在前面几页,后面的页用scroll+scan方案,应用层解决join

posted on 2016-10-21 16:54  pianowh  阅读(1512)  评论(0)    收藏  举报