暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL SaaS 行业特性以及使用注意

digoal 2021-01-04
1068

作者

digoal

日期

2021-04-15

标签

PostgreSQL , SaaS


背景

SaaS 行业需要什么特性?

  • ORM生成的SQL复杂, 无法干预SQL写法
    • 10个表以上JOIN的优化器增强(cbo,geqo,aqo,hint,outline) (PostgreSQL 已支持)
  • SQL 计算量大
    • 并行计算, 高级优化器, 高级索引, 高级存储引擎 (PostgreSQL 已支持, 列存储需要增强: citus, zedstore)
  • 结构复杂
    • 大宽表 (PostgreSQL 已支持)
  • 关系复杂(一对多、多对一、多对多)
    • 数组类型、倒排索引 (PostgreSQL 已支持)
  • 敏捷开发, 租户个性化需求增多, 单一结构无法满足需求
    • schema less(JSON, XML), 在线修改结构, 在线修改字段长度 (PostgreSQL 已支持, 大部分结构长度修改仅需要毫秒(仅仅需要元数据修改))
  • 存储超长内容或二进制文件、图片
    • 大对象类型 (PostgreSQL 已支持)
  • 文本搜索性能差, 依赖搜索引擎, 数据同步延迟高, 数据查询不一致,同步异常问题多. 开发、维护成本高.
    • 文本搜索、倒排索引. %xxx%, *xxx*的模糊查询、全文检索、中文分词 (PostgreSQL 已支持)
  • 租户多, 数据量大
    • 基于租户的数据库sharding, 租户的无缝迁移, rebalance能力 (PostgreSQL 已支持. citus)
  • 租户多, 会话并发量大, 每个租户一套结构, 表特别多, 租户结构变更发布麻烦
    • 读写分离、线程池、内存使用优化, 一个实例支持上千万个表, 并方便一键发布DDL. (PostgreSQL 内置未支持线程池, postgrespro已支持)
  • 租户多, 租户之间的数据访问不安全
    • RLS, 租户级别TDE (PostgreSQL 已支持RLS. 租户级别TDE未支持, PG14有TDE cluster级别patch)
  • 租户多, 相互抢资源, 性能不稳定
    • 租户级别quota(计算、存储)、表空间 (PostgreSQL 已支持. quota未支持, 可结合进程模型和cgroup来支持)
  • 租户多, 很难快速定位捣蛋租户
    • 租户级别资源监控 (PostgreSQL 14开始逐渐在增加PID级别的统计信息)
  • 租户多, 全隔离资源利用率低下
    • 租户级别资源quota自动化弹性, 发挥资源池化作用
  • 租户级别的误操作, 要回滚整个实例
    • 闪回, 租户级别的PITR (PostgreSQL 不支持闪回query, 可以结合使用zfs来闪回整个实例)
  • 过期租户占用资源, 如果删除后续费重建流程复杂
    • 灵活的租户数据冷冻和数据加热, 过期租户不占资源, 续费快速加热 (阿里云PostgreSQL 已支持oss_fdw)
  • 数据流动需求多, DB到DB, DB到MQ到大数据
    • 单向、多向的数据订阅功能 (PostgreSQL 已支持, 同一条记录如果需要多向同步需要考虑数据冲突问题, 建议架构设计时避免同样的数据需要多向, 可以考虑不同的数据多向)
  • 租户GIS需求增多, 存储、计算、速度要求高
    • 专业的GIS数据类型、索引、计算函数、操作符功能 (PostgreSQL 已支持)
  • 租户数据挖掘需求增多: 图计算
    • 基于图的搜索、推荐能力 (PostgreSQL 已支持)
  • 租户数据挖掘需求增多: 机器学习
    • 内置ML算法和可扩展ML算法的能力 (PostgreSQL 已支持)
  • 租户数据挖掘需求增多: 行列变换
    • 行列变换函数接口 (PostgreSQL 已支持)
  • SaaS行业丰富, 各个行业的需求丰富无法穷尽
    • 行业定制化存储、索引、OP、FUNC的扩展插件能力 (PostgreSQL 已支持)
    • 供应链SaaS: 递归,溯源,区块链技术
    • ERP: 复杂SQL动态规划能力(aqo),图像识别 (阿里云PG 支持pase插件向量搜索)
    • CRM: 关系图谱能力
    • 文档协作: 文本AI分析、推荐、打标能力
    • 电子签名: 安全,区块链技术
    • 协同办公: 社交关系处理

使用注意:
- 在PG支持线程池之前, 为了避免连接数过多, 可以考虑使用同一个database的不同schema来隔离租户, 并使用同一个database user. 因为使用database时不同database的connection是无法复用的.
- 租户的冷冻和加热可以使用schema级别数据dump和restore - 尽量避免OOM, 参考如下文档 - 《PostgreSQL 减少 (内存耗尽) OOM 导致的数据库崩溃恢复问题最佳实践》

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论