当前位置: 首页 > 科技观察

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

时间:2023-03-12 06:24:49 科技观察

2018年,为什么要用PostgreSQL,可能就是这些原因。一年后,我添加了一些我遗漏的东西,我将在这篇文章的后半部分回顾一下。但是在最近的4-5年里,PostgreSQL已经有了很大的改进和提高,我们应该使用它的理由也更多了。现在这里是关于为什么你应该使用PostgreSQL的一个新的总结,它是一个很棒的数据库。数据类型,包括JSONB和范围(Range)类型Postgres一直是一个开放友好的新数据类型系统。它有数组、地理空间和许多与时间相关的数据类型。几年前它增加了两个值得我们关注和使用的新类型:JSONB类型JSONB是一种二进制JSON数据类型。它可以使用GIN和GIST格式进行索引。您还可以快速查询完整的JSON文档。范围类型这种数据类型还没有JSONB那么有名,范围类型在你需要的类型的时候特别有用。对于时间范围,使用一列字段来表示从一个值到另一个值的范围特别方便。如果你创建一个日历应用程序,或者总是有一个参数从哪个时间到另一个时间,范围类型允许你只使用一个字段值。一个额外的好处是您可以指定某些时间范围不得重叠、交叉或以其他方式成为您应用程序的有用约束。扩展谈论Postgres就很难不提及围绕它存在的生态系统。扩展模块的使用是社区的关键,可以促进Postgres的快速发展。扩展允许用户使用本机系统与Postgres核心接口,而不是将需求提交给Postgres核心开发。这也意味着用户可以添加丰富的功能,而不必受Postgres核心发布和审查周期的束缚。一些特别著名的重磅炸弹扩展是:Citus扩展Citus(这是我的工作)扩展使Postgres成为分布式数据库,允许用户轻松地跨节点分布数据库。对于你的应用程序来说,它仍然看起来像一个单节点数据库,而在后台,Citus会将数据传递给多个不同的物理设备和多个Postgres实例。HyperLogLogextension这是我个人最喜欢的扩展,它可以让用户拥有一个非常容易获得并且非常接近理论值的唯一计数的大量数据的聚合,当然它也可以执行各种操作比如作为跨时间处理的并集和交集。HyperLogLog等抽象逻辑常用于处理大型数据集和分布式数据库,可以方便地嵌入到Postgres内部使用。PostGIS扩展PostGIS不是一个新的扩展,但它值得重新访问。它通常被认为是最先进的地理数据库。PostGIS添加了新的高级地理空间数据类型和运算符,可以轻松操作许多与位置相关的地图类或路由类。逻辑复制多年来请求最多的问题之一是在Postgres中轻松设置数据复制。最早我们也有基本的复制方案,后来有了流复制技术(也就是二进制WAL或者write-aheadlog)。wal-e等工具有助于提高Postgres的灾难恢复能力。现在最新的版本,我们有了逻辑复制,虽然我们还需要一个扩展,不是100%的内核功能,但是总算我们还是有了一个完整的逻辑复制方案。逻辑复制允许用户发送不同数量的命令,这也意味着我们可以复制指定的内容或表。系统可扩展性除了我们看到的Postgres在功能和性能上的不断提升之外,最近还专门加入了并行查询功能,以获得更好的性能。如果用户需要扩展到单个Postgres节点之外,我们可以使用前面提到的Citus进行水平扩展。丰富的索引Postgres现在拥有各种强大的索引,例如GIN和GiST索引,这些索引对于JSONB数据尤其有用。我们现在还有KNN和Sp-GiST索引格式,并且还在增加。Upsert功能Upsert已在Progress开发和发展了数年。当然,有些用户可以使用CTE函数来实现类似的功能,但是可能会出现一些条件冲突。这个特性曾经是MySQL的特性而不是Postgres的特性,现在Postgres在1年多以前就已经正式支持了。外部数据源封装当然还有几年前就有的外部数据源封装功能。它允许您将外部数据系统映射到Postgres中的表。这意味着,例如,我们可以从Postgres中查询Redis数据库。这个特性在5年前就一直在不断完善和改进,尤其是现在我们已经支持可写的外部数据源处理,也就是我们在Postgres中直接向外部数据库写入数据。官方Postgres发行版现在至少附带了FDWforPostgres,这对于跨Postgres实例读写数据特别有用。更多其他功能如果你不熟悉以前的PG版本,你应该知道以前版本的一些功能包括:窗口函数通用函数可定制的语言NoSQL数据类型自定义函数CTE表达式并行索引创建事务DDL外部数据封装条件或函数索引事件监听/告警表继承事务级同步复制