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
分类: pg
浙公网安备 33010602011771号