为何使用 PostgreSQL

更新时间:2017-12-19 10:07:11 点击次数:1388次

数据类型,包括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实例读写数据尤其有用。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!