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

hooopo · 2018年11月24日 · 最后由 torvaldsdb 回复于 2019年02月28日 · 15046 次阅读
本帖已被管理员设置为精华贴

最近,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 将本帖设为了精华贴。 11月24日 04:49

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

炮哥,这马上 9012 年了

初步使用中

huobazi 回复

那就 2019 咯

coderliu 回复

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

分析很赞!

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

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

cqcn1991 回复

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

ksec 回复

great 👏

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

kran 回复

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

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

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 分" 就你皮

liprais 回复

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

hooopo 回复

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

期待《跟炮哥学 Postgres》!

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

十分好用

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

ted 回复

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

hooopo 回复

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

ted 回复

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

nouse 回复

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

hooopo 回复

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

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

所以 PG + Rails 是 Web 2.5 吗 😂

玩了下 hasura 感觉不错

lidashuang 回复

算 BaaS 了吧

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

https://yugabyte.com

以及连接 pg 和 elasticsearch 的 zombodb:

https://github.com/zombodb/zombodb

jiang_plus 回复

zombodb 不错

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

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

技术投资指南

captern 回复

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

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

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

kran 回复

负载是什么

hooopo 回复

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

kran 回复

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

hooopo 回复

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

kran 回复

😂

mizuhashi 关于使用 Postgres 的疑问 提及了此话题。 01月18日 06:57
hooopo 回复

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

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

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号