富士通路线图
富士通正在为 PostgreSQL 开发许多功能,以提高其在企业中的采用率。 特别是在对高频交易处理有要求的超大型企业。
以下是我们向社区开源的一些功能。 我们欢迎对这些功能的实现提出任何意见、想法和建议。
服务器
垂直聚簇索引(列存储扩展)
一个扩展,它支持以列格式存储数据,而无需对 PostgreSQL 核心进行任何重大更改。 列存储在磁盘上和内存中都得以保留,从而提供容错和更高的性能。
列存储的实现是通过垂直聚簇索引(VCI)实现的。 索引访问方法用于创建一种新的索引类型,它以两种形式存储数据,以提供高性能的 OLAP 和 OLTP。 这些存储是:1) 写入优化存储 (WOS) 2) 读取优化存储 (ROS)。
多模型数据库
大数据通常用三个词来描述——多样性、速度和体量。 这主要关注数据多样性,这意味着要解决关系模型之外的各种数据库模型。 不用说,速度和体量也并非无关紧要。
多模型将是许多数据库的未来。 通过这样做,我们希望使 PostgreSQL 更受欢迎,并使其适用于更多用例。 PostgreSQL 处于有利位置; 在 DB-Engines.com 的 DBMS 流行度排名中排名第四。
首先,在 11 版中,我们将解决以下问题
- 键值:提供专用 API,绕过 SQL 层以实现最低延迟和最高并发,这类似于 MySQL 的 Memcached API。
- 文档:标准合规性。 帮助审查和测试 Oleg 提交的 SQL/JSON 修补程序。
- 宽列:不打算采用“一行中的数百万列”数据模型,而是累积大量数据的速度(针对物联网的传感器数据)。 研究日志结构合并树如何加速 INSERT。
- 图形:原生支持图形数据模型。 通过 UDF 实现 Cypher 和/或 Gremlin 作为查询语言。
将来,我们还将研究拥抱 RDF、多维数组、时间序列、事件存储和搜索引擎。
主要是 Tsunakawa Takayuki 将开始着手多模型的工作。 他将在另一个维基页面上发布想法,并从这里链接到它。 但数据多样性可能会超出一个人所能做的范围。 因此,人们的合作将受到赞赏。 他将创建一个包含更多详细信息的维基页面,并从这里链接到它。
存储过程中的事务控制
目前,PL/pgSQL 不允许在用户定义函数中提交或回滚事务。 这往往是将其他 DBMS 迁移到 PostgreSQL 的障碍。 其他 DBMS 的用户编写了包含多个事务的冗长而复杂的存储程序(例如,在 PL/SQL 中)。
Tsunakawa Takayuki 将致力于使存储程序能够提交/回滚正在运行的事务并开始一个新的事务。 社区建议,这需要存储过程功能,而不是存储函数。
语句级回滚
与存储过程中的事务控制类似,这有时是尝试从其他 DBMS 迁移的人面临的另一个障碍。 他们期望一个 SQL 语句的失败不应中止整个事务,并且他们的应用程序(客户端程序和存储过程)可以继续使用不同的 SQL 语句进行事务。
psqlODBC 有一个连接参数来模拟语句级回滚。 但这并不好用,因为驱动程序在应用程序执行的每个 SQL 语句之前和之后都会发出 SAVEPOINT 和 RELEASE SAVEPOINT 语句。 也就是说,它需要对每个 SQL 语句进行三次往返服务器。
Tsunakawa Takayuki 正在通过提供 START TRANSACTION 选项和一个新的 GUC 参数来实现语句级回滚,该参数控制 SQL 语句失败时的回滚范围。
监控
SQL 语句统计计数器视图 (pg_stat_sql)
一个视图,用于显示在运行的 PostgreSQL 实例中执行命令或一组命令的次数。 可以随时重置此视图,以便在任何给定的时间段内获得 SQL 命令执行时间的视图。 对于 DBA 而言,此功能非常有用,因为它可以了解休眠数据库的配置文件。
WAL 写入统计视图 (pg_stat_walwrites)
此视图显示 WAL 写入操作的详细信息,例如写入 I/O 的块数、写入这些块所花费的时间等。 了解此信息对于 DBA 有效地调整 WAL 相关的 GUC 变量非常有用。
可插拔存储
此功能为扩展提供了一种通过使用存储访问方法来加载自己的存储的工具。 这将从代码的其他部分中删除所有 HeapTuple 和 HeapScanDesc 以及依赖结构和函数的引用,并通过访问方法函数使用它们。
并行查询
PostgreSQL 中现有的并行框架只支持读取查询。 此功能将当前的并行框架扩展到也支持写入查询。
实用语句支持
此功能允许在内部包含查询的实用语句,例如 CREATE TABLE AS、CREATE MATERIALIZED VIEW 和 REFRESH,从并行计划中受益。
DML 操作(插入、删除和更新)支持
此功能允许包含查询/扫描的 DML 语句从使用并行计划中受益。
实用命令
触发器可选子句 'AS' 和 'OR REPLACE'
此功能为 CREATE TRIGGER 提供可选子句 'AS' 和 'OR REPLACE' 语法。 通过此实现,可以将创建触发器作为单个命令有效地使用。
客户端应用程序
重构 pg_dump 和 pg_dumpall 之间数据库属性的处理
此功能添加了对使用 pg_dump --create 选项转储数据库 ACL 和其他配置设置的支持。 此更改将消除 pg_dump 和 pg_dumpall 之间的重复代码
客户端接口
Libpq 批处理流水线
允许 libpq 客户端通过将多个命令流水线化为批处理来避免过度往返。 仅在批处理结束时发送同步。 批处理中的命令一起成功或失败。
“DECLARE STATEMENT”语法在 ECPG 中
此功能为用户提供了一个连接到非默认目标服务器的选项。 “AT” 子句可以在“DECLARE STATEMENT”中使用一次,此后,所有动态 SQL 语句都将在指定的 target server 上执行。
在 ECPG 中保留注释
当前的 ECPG 预处理器会删除 ECPG 应用程序中存在的 SQL 语句中的注释。 但这些注释对于数据库管理员识别正在执行这些查询的 ECPG 应用程序非常有用,因此它们可以轻松地识别用于各种目的。
ECPG 的批量插入支持
此功能使用 libpq 的批处理流水线支持,为 ECPG 中使用数组的批量插入操作添加了支持。