PostgreSQL码农集散地

每天5分钟PG聊通透第16期,基于结果的排序能推就推给开发

参考文档点击文末 阅读原文 打开; 推荐 《最好的PostgreSQL学习镜像 》 ;

每天5分钟PG聊通透第16期,为什么有些排序建议让业务程序来做?

背景

  • 问题说明(现象、环境)
  • 分析原因
  • 结论和解决办法

链接、驱动、SQL

16、为什么说有些排序操作建议让业务来做?

https://www.bilibili.com/video/BV1qi4y1R7Aq/

数据库通常是集中的服务, 有瓶颈的话不容易扩展. 而业务通常是更容易水平扩展的, 所以作为一个整体来看的话建议业务承担更多的计算工作.

1、推荐客户端排序, 以下情况, 除非数据库没有成为瓶颈, 否则建议优化为客户端排序.

  • 排序不能走索引, 那么排序需要额外消耗cpu和内存.
  • 排序走索引, 但是会增加其他条件过滤的开销. 这只是个例子, 像这种SQL可以用rum索引进行优化, 把过滤和排序都放在一个索引里面, 避免CPU运算或者recheck.
select * from a where arr @> array[?] order by x;   
  • 排序走索引, 其他条件也可以通过索引过滤, 但是x不在where过滤条件中, 仅仅用于排序, 所以排序字段x放在索引中增加了索引本身的开销. 而且符合条件的记录数很少完全可以丢给业务自己去排.
select x from a where .... order by x;  -- 符合条件的记录数比较少   
  • 排序走索引, 其他条件也可以通过索引过滤, 符合条件的记录数很多, 返回的记录数很多(几乎全部), 排序字段x放在索引中增加了索引本身的开销, 有条件的话建议让业务排序.
select x from a where .... order by x;  -- 符合条件的记录数比较多, 而且返回几乎全部记录    

2、推荐采用数据库排序

  • 排序走索引, 其他条件也可以通过索引过滤, 符合条件的记录数很多, 返回的记录数很少(top n) . 这种情况就建议数据库排序, 否则要把大量记录传输给客户端浪费带宽和时间.
select x from a where .... order by x limit 10;  -- 符合条件的记录数比较多, 但是返回少量记录  

本期彩蛋 - 数据库生态工具&信创开源数据库

用好周边工具, 数据库管理水平战胜90%老司机

1、管控软件 云猿生开源的 kubeblocks , 如果你要管理很多套并且种类很多的数据库产品, 推荐选择.
  • https://github.com/apecloud/kubeblocks
乘数开源的 clup , 专门用来管理PostgreSQL和PolarDB的集群管理软件, 如果你要管理很多套数据库, 推荐选择. 并且clup还提供了企业版、自研的连接池、分布式存储、一体机、备份平台等, 企业可以关注一下.
  • https://www.csudata.com/
若航开源的 pigsty , 集成了300多个PG插件的PG集群和PolarDB集群管理软件, 如果你要管理很多套数据库, 并且对插件有特别多的需求, 推荐选择.
  • https://pigsty.cc/zh/

2、审计监控诊断优化

海信聚好看的 DBdoctor , 采用ebpf技术, 在对数据库几乎没有影响的情况下实时监控数据库和服务器的各项指标, 发现和诊断问题根因非常方便.
  • https://www.dbdoctor.cn/
Bytebase 的目标非常远大, 是位于您和数据库之间的中间件。它是数据库 DevOps 的 GitLab/GitHub,专为开发人员、DBA 和平台工程师打造。
  • https://bytebase.cc/docs/introduction/what-is-bytebase/
D-Smart , Oracle老前辈白老大他们搞的, 专注企业级市场, 将业界顶级DBA经验的产品化作品, 产品功能包括数据库监控、诊断、优化等.
  • https://www.modb.pro/db/567140

3、数据同步&迁移&备份恢复

NineData , 老领导出去创业做的产品, 产品涵盖了数据同步、迁移、备份、比对、devops、chatDBA等.
  • https://www.ninedata.cloud/home
DSG , 非常老牌的数据库同步迁移企业级产品, 支持各种数据库的异构和同构迁移, 用他们的话说, 没有dsg搞不定的迁移, 比goldengate还牛.
  • https://www.dsgdata.com/

通过信创并且开源的数据库:

PolarDB for PostgreSQL
  • https://github.com/ApsaraDB/PolarDB-for-PostgreSQL
以下 PG系国产数据库也非常值得关注: HaloDB (基于PG兼容PostgreSQL、Oracle、MySQL. http://www.halodbtech.com/ )、 IvorySQL (基于开源PG兼容PG、Oracle. https://www.ivorysql.org/zh-cn/ )、 ProtonBase (云原生分布式数仓. https://protonbase.com/ ). 参考文档点击 阅读原文 获得
感谢关注我的github (https://github.com/digoal/blog) 及视频号:

彩蛋2 : 全国大学生数据库创新设计赛  点击报名