数据库 It's never too late to learn Postgres

hooopo · November 24, 2018 · Last by torvaldsdb replied at February 28, 2019 · 14995 hits
Topic has been selected as the excellent topic by the admin.

最近,TimescaleDBPipelineDBCitusDB相继都成为了 postgres extension,并且都达到了 production ready 状态。这让 Postgres 在各个应用领域都有着难以替代的位置,无论是 OLTP 还是 OLAP,无论什么样的应用场景。Postgres 不仅仅是一个数据库,更是一个生态系统,其中包括 SQL 生态,extension 生态,还有各种 fork 等。

Extension Ecosystem

  • 流式系统:Pipelinedb,reporting dashboards and realtime monitoring 的最佳选择,出自 Adroll,据说 12306 有在使用。
  • 并行处理:CitusDB,让 postgres 不再有 scale out 烦恼,OLAP 和 OLTP 双核模式,无论你是 SaaS 服务还是海量数据分析场景
  • 时序数据:TimescaleDB,时序分析
  • 空间数据:Postgis + pgrouting,LBS 类应用和导航类应用杀手级解决方案
  • 数据科学:MADlib,相当于 Python 的 scikit-learn

当然除了上面这些重量级的插件,postgres 也有很多轻量级但超级好用的插件,比如:

  • 用于中文分词的 zhparser 和 pg_jieba
  • ETL 的好帮手:各种 FDW
  • 各种相似度算法包:fuzzystrmatch 和 pg_similarity
  • 让 Postgres 秒变列存储数据库的:cstore_fdw
  • 让 Postgres 秒变 API 接口的:postgrest(REST API)和 hasura(graphql API)

SQL & Data

如果说,做 Web 开发还可以使用 ORM 工具,不懂 SQL 语句也可以写出不错的项目。在数据分析挖掘领域,如果不懂 SQL 是很难的。SQL 作为一个存在了几十年的工具,不断进化和完善,有着相当优秀的表达能力和社区沉淀。

技术潮流像钟摆,从 SQL 到 NoSQL,从 NoSQL 到 NewSQL,甚至 No, SQL!如今大数据工具也都倾向于使用 SQL 作为统一的接口层,像 Spark SQL、Kalfka SQL、新版 Elasticsearch 也支持了 SQL。

SQL 之于数据领域就是 Javascript 之于 Web。Least Power 原则说:

Any application that can be written in JavaScript, will eventually be written in JavaScript

对于数据领域就是:

Any application that can be written in SQL, will eventually be written in SQL

Postgres & MySQL

相比 mysql,postgres 的特性多的有点数不过来:LATERAL JOIN、Window Function、CTE、Materialized View、Array、FDW、Gist Gin Index 等,更多请移步 https://modern-sql.com/

如果勉强还可以说 postgres 和 mysql 在 OLTP 领域分别是北乔峰,南慕容;然而在 OLAP 领域,mysql 已经完全被 postgres 碾压。postgres 凭借独特的 extension 架构,成为一个几乎没有短板的数据库。

Postgres forks & variants

  • Greenplum,PB 级并行分析数据库,BI 工具,可以合 MADlib 一起做挖掘分析,最新版兼容 postgresql 9.2
  • Postgres-X2, pg cluster
  • Cockroachdb,Autoscaling DB,TiDB 的竞品,不过是兼容 Postgres 协议和语法
  • Redshift,亚马逊的 Cloud db,一般用于数据仓库,fork 的 fork,兼容 postgresql 8.2 语法

更多:https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases

Learn Postgres

之前看到过一段话(并没有故意黑 MongoDB):

刚入职场的年轻工程师如何判断他/她所要投资的技术是像 2006 年左右的 Rails、2007 年左右的 Hadoop、还是更像 2010 年前后的 MongoDB?有点像投资创业公司,如何押对宝?还是尽量选择无聊的成熟的老技术、专注于解决实际问题、白猫黑猫抓到老鼠就是好猫?

个人认为,Postgres 应该是 2019 最值得投资的一项技能,没有之一。

jasl mark as excellent topic. 24 Nov 04:49

炮神可以分享一下你的 PG 学习路线吗?

炮哥,这马上 9012 年了

初步使用中

Reply to huobazi

那就 2019 咯

Reply to coderliu

用了快两年了吧,主要自己看看文档和相关领域专家的 blog 吧

分析很赞!

还有 PG-Strom, "Postgres on GPU", 不过不知道是否 Production Ready.

这是要用 SQL 写模型吗。。。。

Reply to cqcn1991

不一定是 sql 写模型,可以 plpython plr 结合的,你可以参考下 madlib 的源码,但使用的时候少了导入导出和 ETL 部分,过滤的话 sql 本身就替代了 pandas

Reply to ksec

great 👏

非常棒,最近看了一款图数据库,arangodb,也让人很喜欢,但还不成熟

Reply to kran

牛油果对标的应该是芒果吧,对自己发明一套查询语法的 DB 没好感,要学的太多,记不住...

所以我现在很期待 DO 推出的 Managed Postgres........ 😍 ( 不要太昂贵便好了 )

Reply to ksec

Managed DB 问题就是预装 extension 有限,这方面做的好的是阿里云 RDS,预装 extension 非常全,可能和他们自己也在使用有关吧

已入坑

redshift 是 license 的 ParAcell 的 产品 不过现在 aws 自己也做了很多功能,挖了很多过去做 mpp 的人 https://www.quora.com/How-did-Amazon-decide-to-go-with-ParAccel-for-Redshift

"作为一个死宅,并不觉得定期 TB 是一种福利,看到招聘帖里有心里默默减 1 分,强调有美女减 2 分,期权减两分,SVN 减 5 分,mongodb 减 5 分" 就你皮

Reply to liprais

aws 还有一个 aurora 看起来很厉害:https://aws.amazon.com/cn/rds/aurora/

Reply to hooopo

我有几个前老板在做 aurora,是挺牛的

期待《跟炮哥学 Postgres》!

虽然没怎么看过 Postgres 不过看着有点心动。

十分好用

这本书知不道有看过的没?想了解下是否值得购买。 https://masteringpostgresql.com/

Reply to ted

买过,看你想入门还是已经有经验了,有经验了的话不建议买。

Reply to hooopo

我有很基础的 SQL 知识(平时大多都是写前端逻辑),就想好好学习下数据库,不需要太深入,希望侧重了解应用层面,譬如规划表结构、索引等的最佳实践,以开发出稳定高效的数据后台。不知道这本书合适不呢?

Reply to ted

89 美元很贵吗?买了自己看嘛

Reply to nouse

嗯,是有点贵。之前难道点错了,回复的你?

Reply to hooopo

期待文章,话说面了一圈回来,全是在用 mysql,没公司用 postgres 的……

MySQL 是 web 2.0 时代的产物啊,LAMP 标配,不过新项目的话,pg 还是最佳选择。

所以 PG + Rails 是 Web 2.5 吗 😂

玩了下 hasura 感觉不错

Reply to lidashuang

算 BaaS 了吧

另外推荐一下使用 google spanner 模型并兼容 pg 语法的 yugabyte 数据库:

https://yugabyte.com

以及连接 pg 和 elasticsearch 的 zombodb:

https://github.com/zombodb/zombodb

Reply to jiang_plus

zombodb 不错

挺不错的文章,学到了很多东西

挺不错的文章,学到了很多东西,我什么时候才能发帖子啊

技术投资指南

Reply to captern

注册一周以后应该就可以了

看完 schemaless-pg,吓的我赶紧买了本 pg 的书 😂

虽然知道是不同的东西,但还是想知道 pg 能在搜索/负载方面替代 es 么?

Reply to kran

负载是什么

Reply to hooopo

单纯的指的对大数据量的检索能力,不知道说的是否准确呀

Reply to kran

比不上 es 是肯定的 但也够用

Reply to hooopo

接下来的一个项目可能会上 pg 试试。因为你的一系列帖子😓

mizuhashi in 关于使用 Postgres 的疑问 mention this topic. 18 Jan 06:57
Reply to hooopo

大佬,给图配个链接啊,好让我等观摩观摩😤

刚入职场的年轻工程师如何判断他/她所要投资的技术是像 2006 年左右的 Rails、2007 年左右的 Hadoop、还是更像 2010 年前后的 MongoDB?有点像投资创业公司,如何押对宝?还是尽量选择无聊的成熟的老技术、专注于解决实际问题、白猫黑猫抓到老鼠就是好猫?

👏 但是呢,新人毕竟是新人,一头雾水,就想经常逃课的人,要考试了一样,不先看重点,而是去钻研难题,死翘翘了

You need to Sign in before reply, if you don't have an account, please Sign up first.