Skip to content

PaginatorWG多线程分页

Tuuz edited this page Nov 6, 2023 · 7 revisions

Paginator in WG

我忘记写功能介绍了,导致新用户可能不知道这个功能

开发介绍

  • 已经过商业项目测试
  • 性能相较默认的Paginator分页将会提高30%-70%
  • 查询性能一定比Paginator好(经过长期商用环境观察)
  • 原理是WaitGroup,所以叫PaginatorWG
  • 因为使用多线程,所以会数据库的负载会有一定提高

调用方法/条件

db.Limit()
db.Page()
db.PaginatorWG()

兼容性

  • db.Paginator() 替换为 db.PaginatorWG() 即可
  • 输出内容方式与原版一致,可以根据环境对性能延迟的需求进行调整

安全性

  • 本功能无输入项安全风险极低

建议使用场景

因为使用的WG是并发查询,所以同一时间将你会有更多的并发指向数据库,所以WG会对数据库本身的并行处理能力有一定要求,如果数据库处理一条查询的速度比同时处理两条的查询速度还快,这里就不推荐你使用WG功能了,另外就是1核的实体数据库服务器,也不建议你使用WG分页,但是单核的RDS还是建议使用WG的,关于负载问题,你可以通过提高数据库的配置和优化语句进而提高性能以降低占用率从而解决高占用载问题,如果还是无法解决你也可以使用“限流”等终极解决方案

稳定性

  • 测试深度
    • 线上小范围测试
    • 线上替换全部Paginator方法
  • 观察时长:5个月+
  • 评价:
    • 线上的项目经过几个月的测试,未发现由PaginatorWG导致的Panic事件或直接由PaginatorWG导致的功能故障,初期问题已全部修复,可放心使用