首页
学习
活动
专区
工具
TVP
发布

2018,为何你应该使用 PostgreSQL,这几个也许就是理由了

作者 |Craig Kerstiens

翻译 |PostgreSQL 中文社区 / doudou586

转自 | PostgreSQL 中文社区

五年以前,我写了一个《为何你应使用 PostgreSQL》的岾子,引起了广泛的关注。一年以后,我增加了一些我漏写的内容,这些内容我会在这篇文章的后半部分重述一下要点。但是在最近的 4-5 年,PostgreSQL 有了很多的改进和提高,也就有了更多的理由我们为何要使用它。现在这里是一个新的总结,为何你应使用 PostgreSQL 这一特别棒的数据库。

数据类型,包括 JSONB 和范围(Range)类型

Postgres 一直以来对新增数据类型都是开放和友好的系统。 它有数组、空间地理以及很多时间相关的数据类型。几年前它又增加了两种值得我们关注和使用的新类型:

JSONB 类型

JSONB 是一个二进制的 JSON 数据类型。它可以使用 GIN 和 GIST 格式进行索引。你也可以快速查询完整的 JSON 文档。

Range 范围类型

这个数据类型现在还没有 JSONB 有名,范围类型当它是你需要的类型时,它才会特别地有用。 对时间范围来说,使用一列字段来表达从一个值到另一个值的范围特别方便。如果你创建一个日历应用,或者总是有一个从哪个时间到另一个时间的参数,那范围类型可以让你只需使用一个字段值即可。更大的好处还有你可以指定一定的时间范围不能相互覆盖、交叉,或是其他对你的应用有用的约束。

Extensions 扩展功能

谈到 Postgres 就很难不提到围绕它存在的生态系统。扩展模块的使用对社区来说很关键,同时也促使 Postgres 快速发展。扩展使用户可以让用户使用原生的系统连接 Postgres 核心,而不必是将需求提交给 Postgres 的核心开发。这也意谓着用户可以增加丰富的功能而不必与 Postgres 内核的发布和审核循环连在一起。一些特别有名的重磅扩展有:

Citus 扩展

Citus (这也是我工作的内容) 扩展让 Postgres 成为了一个分布式数据库,它允许用户很容易地将数据库进行跨节点的分发。 而对你的应用来说,它仍然像是一个单节点的数据库,而在后台,Citus 会将数据传给多个不同的物理设备和多个 Postgres 的实例。

HyperLogLog 扩展

这是一个我个人最为喜欢的扩展,它允许用户对大量数据的聚集的唯一计数有一个很容易获得且非常接接近理论值的结果,当然也可以对跨时间联合、相交等各种操作进行 处理。HyperLogLog 和其他的概要逻辑对处理大数据集和分布式数据库很常用,并且是可以很方便地嵌入 Postgres 内部使用。

PostGIS 扩展

PostGIS 不是一个新的扩展,但它是一个值得重提亮点。它通常都是被认为是最先进的地理数据库。PostGIS 增加了新的高级的地理空间数据类型、操作符,使得很多与位置有关的地图类或是路由类的操作变得很容易。

逻辑复制

多年以来,大家要求最多的就是解决 Postgres 中设置数据复制的易用性。最早时我们也有基本的复制方案,然后我们有了流复制技术(即二进制的 WAL 或称之为预写日志)。 对类似 wal-e 这样的工具,帮助提升了 Postgres 在灾难恢复方面的能力。

现在最近的版本里,我们有了逻辑复制,虽然现在还是需要一个扩展,不是 100% 内核功能,但最终我们还是有了一个完整的逻辑复制方案。逻辑复制允许用户发送不同数量的指令,这也意谓着我们可以复制指定的内容或表。

系统扩展性

除了我们见到的 Postgres 在持续对功能和性能的改进,最近也是特别地增加了并行查询功能以获取更好的性能。如果用户需要超出单个 Postgres 节点的扩展,我们可以使用前面提到的 Citus 进行横向扩展。

丰富的索引

Postgres 现在有很多种强大的索引,像 GIN 和 GiST 索引,它们对 JSONB 数据特别有用。我们现在也有了 KNN 和 Sp-GiST 索引格式,并且还在增加中。

Upsert 功能

Upsert 在 Progress 已开发和演变有好几年了。当然,一些用户可以通过变通使用 CTE 功能来实现类似功能,但可能会产生一些条件冲突。这个特性曾是 MySQL 有但 Postgres 没有的功能,现在 1 年多前,Postgres 也有了正式的支持。

外部数据源封装

当然,还有几年前就有的外部数据源封装功能。它允许你映射外部数据系统至 Postgres 中的表。这就意谓着,比如,我们可以在 Postgres 中查询 Redis 的数据库。这项功能 5 年前就一直在不断地改进和提高,尤其是现在我们已支持可写的外部数据源处理,即我们在 Postgres 直接写入数据至外部数据库。现在官方的 Postgres 发布版本中至少带有 Postgres 的 FDW,它对跨 Postgres 实例读写数据尤其有用。

更多其他的功能

如果你对以前的 PG 版本不是太熟,在以前的版本中一些应了解的功能还包括:

窗口函数

一般函数

可定制的语言

NoSQL 数据类型

定制函数

CTE 表达式

并行索引创建

事务 DDL

外部数据封装

条件或函数式索引

事件侦听 / 提醒

表继承

事务级的同步复制

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180105B096K000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券