digoal
2022-09-30
PostgreSQL , plxxx , C , python , julia , perl , java , rust , go
视频回放: https://www.bilibili.com/video/BV1p14y1a7Xc/
场景:
- 业务层逻辑流程长, 与数据库交互次数多, 例如ERP、银行开账修改等业务.
- 计算和渲染场景, 需要拖取大量数据到本地进行计算, 少量结果进行渲染
- CS结构的应用, 需要将数据从集中数据库存储拖取到本地后进行计算得到少量结果. 例如气象、地震分析.
总结起来就是2种场景:
- 频繁交互
- 计算要的数据量大, 结果数据集少.
挑战:
- 频繁的网络交互导致网络延迟在整个过程的占比变高, 处理吞吐必然降低.
- 每次计算都要拖取大量数据, 容易触发网络带宽瓶颈, 同时拖拽耗时也很长. 变化条件又要重新拖取数据,效率低.
PG解决方案:
- PL接口, 可以在PG内安装编程语言, 例如java, python, C, lua, perl, julia, rust ... 支持很多语言.
通过搬运代码而不是搬运数据的形式, 提高整体运行效率.
如果你认为计算量不行, 我告诉你, PG可以支持低延迟的物理流复制, 增加只读节点即可. 如果你认为只读节点会导致数据存储多分, 我告诉你可以选择计算存储分离架构的PolarDB(此计算支持pushdown), 一份存储多份计算, 而且已经开源了.
在业界, 我们可以看到很多让数据和计算尽量靠近来提升性能的例子, 例如sqlite3, duckdb, 都集成到程序lib了, 程序和库完美融合.