PostgreSQL 9.4 测试版带来了备受期待的“二进制 JSON”类型 JSONB。这种面向文档数据的新的存储格式性能更优,而且带来了索引和用于操作 JSON 数据的函数和操作符。
JSONB 类型融合了 HStore 和 JSON 两个项目。JSONB 拥有 JSON 的一切,但它由于采用二进制表示而存储更高效,由于索引而速度更快。当前所有的 HStore 和 JSON 用户预计最终都将转到 JSONB。
既然 PostgreSQL 的传统客户群一直是需要可靠的关系功能的开发人员,或者是从像 Oracle 这样的企业数据库切换过来的用户,那么为什么 NoSQL 功能对它而言如此重要?Josh Berkus 是团队的核心成员之一,他分享了一些看法:
虽然 Oracle 的市场目前很大,但根本就不增长。Oracle 用户中会转向 PostgreSQL 的人实际数目比那个更少。不管我们增加多少功能,我们永远都无法成为 Oracle,也无法比 Oracle 做的更好。
创新技术之所以会成功是因为他们获得了新用户并扩大了市场。
另外,同一话题中的其它评论明确指出,若干将 PostgreSQL 与 Node、Python、Go 或者 Ruby 技术一起使用的创业公司是如何期待着使用快速 JSON 支持。
考虑到这些问题,很明显,对 JSON 提供一流的性能支持,而又无损于其传统强项,如可靠性,可以帮助 PostgreSQL 增加新的应用场景。
也有一些领域,使用其它的 NoSQL 数据库可能更合适——比如,EnterpriseDB 的核心团队成员和高级数据库架构师 Bruce Momijan 就建议(通过邮件)——
即使 PostgreSQL 扩展了功能和性能,也仍然有一些边缘情况,NoSQL 解决方案可能更适合。对于有大量重复的非结构化数据,如日志文件,列存储的 Cassandra 就很好,它添加新节点更方便。不过,Postgres 将准备好用于既能从 NoSQL 功能受益又需要符合 ACID 的应用程序。
EnterpriseDB 的主要贡献者和高级数据库架构师 Robert Haas 补充道——
一个例子就是,如果你正将 MapReduce 用于高度并发的查询处理,那么,在那种情况下,用像 Hadoop 那样的东西可能更好。另一个例子就是,如果你的数据模型需要对 JSON 大对象做大量小的更改,那么也许有若干 NoSQL 解决方案都能更高效地处理这种情况。
不过,除了特定的应用场景外,对于那些需要在同一个应用程序中针对不同的数据类型灵活地选用无模式存储或关系型存储以及需要保证 ACID 的开发人员而言,Postgres 就开始能够做出令人信服的案例了。
请注意,JSONB 并不是 9.4 中引入的唯一的主要功能,还有其它几项:
- “数据更改流 API(Data Change Streaming API)”允许对复制流进行解码和转换。这为支持高速和更灵活复制的新复制工具和扩展解决方案奠定了基础。
- 带有“refresh concurrently”选项的物化视图
- ALTER SYSTEM SET 允许从 SQL 命令行和远程客户端修改 postgresql.conf,使管理更简单。
另外,它还包含若干小的功能——
- “动态的后台工作进程(Dynamic Background Workers)”
- “复制槽(Replication Slots )”
- 改进了写可扩展性
- 多项性能改进,如聚合、更小的 GIN 索引、减少了预写日志的量
- 可更新的安全屏障视图
- 新的数组操作函数和表函数
- 时滞备用服务器
- 更新 MVCC 系统目录
- 降低部分 ALTER TABLE 命令的锁级别
- 备份节流
- WITHIN GROUP
读者可以从发布说明中查看完整的更新列表。
查看英文原文:**** PostgreSQL Gets Better NoSQL Capabilities
评论