PostgreSQL基础知识( 二 )


管是对比编码时间还是对比实际数据处理时间,效果都是如此 。
近年来,我们看到很多 NoSQL 数据库异军突起,一时风头无两(我们
认为这里面有很大的炒作成分) 。尽管 PostgreSQL 总体上看是一个关系
型数据库,但它其实也具备强大的处理非关系型数据的能力 。比如
ltree 这个插件可以处理图数据,但我们几乎已经想不起它到底是何时被
加入到 PostgreSQL 中的;又比如 hstore 插件可以实现键值存储;还有
JSON 和 JSONB 类型可以提供类似 MongoDB 的文档操作能力 。从很多
方面来看,PostgreSQL 甚至在“NoSQL”这个词出现之前就已经提供了那
些所谓的 NoSQL 特性 。
如果从 Postgres95 正式改名为 PostgreSQL 开始算起,PostgreSQL 已经
诞生二十年了,但事实上它的历史可向前一直追溯到
1986年 。PostgreSQL 支持当前所有主流的操作系统,包括 linux、Unix、
windows 以及 mac 。目前每年会发布一个大版本,包含性能提升以及那
些不断超越关系型数据库功能极限的新功能 。
从 1986 年开始,Stonebraker 教授发表了一系列论文,引入对象关系理念,
探讨了新的数据库的结构设计和扩展设计 。1988 年,他发表了 Postgres 的
第一个原型设计,
1989 年 6 月发布了版本
1 。因此 1986 年可视为 PostgreSQL 发展史的元年 。——译者注
最后值得一提的是,PostgreSQL 不但是开源的,而且开源得非常彻底,
它的许可策略非常宽松 。现在 PostgreSQL 社区由一群无私奉献的的开
发者和用户构成,他们并不把赚钱视为人生终极目标 。如果需要新特
性,你可以自行贡献代码或者提出诉求 。如果你试图修改 PostgreSQL
代码以为己所用,也不会有人起诉你 。是成千上万用户的参与和贡献使
得 PostgreSQL 变成了它今日的模样 。
到最后你会想:我为什么还要使用别家的数据库?PostgreSQL 已经提供
了我所需要的一切功能,而且还是免费的!你不再需要去阅读那些商业
数据库附带的密密麻麻的授权条款,来了解在一个八核虚拟机上支持 X
个并发连接所需要的费用是多少,也不需要了解每次升级后要再为许可
证加多少钱 。
1
11.2 不适用PostgreSQL的场景
在为 PostgreSQL 做了这么多“鼓吹”之后,我们也应介绍一下它不适用
于哪些场景 。
在不安装任何扩展包的情况下,PostgreSQL 需占用 100MB 以上的磁盘
空间,可以看出它的个头还是比较大的 。因此,在一些存储空间极为有
限的小型设备上使用 PostgreSQL 是不合适的,把 PostgreSQL 当成简单
的缓存区来用也是不合适的,此时应选用一些更轻量级的数据库 。
作为一款企业级数据库产品,PostgreSQL 对于安全是极其重视的 。因
此,如果你在开发一个把安全管理放到应用层去做的轻量级应用,那么
PostgreSQL 完善的安全机制反倒会成为负担,因为它的角色和权限管理
非常复杂,会带来不必要的管理复杂度和性能损耗 。此时可以考虑选用
SQLite 这样的单用户数据库,或者选用 FireBird 这样既能以客户端 / 服
务器模式运行也能以嵌入式单用户模式运行的数据库 。
通过上述介绍可以看到,一般来说需要将 PostgreSQL 与别的数据库搭
配使用,使它们各展所长 。一种常见的组合是把 redis 或者 Memcache
当成 PostgreSQL 的查询缓存来用;另一种组合是用 PostgreSQL 做主数
据库,用 SQLite 存储离线数据来做离线查询 。
令人遗憾的一个事实是,很多共享主机服务(多个用户共享同一个操作
系统实例)供应商并不支持预安装 PostgreSQL,或者只支持安装一个很
陈旧的版本 。它们更喜欢预装较弱的 MySQL 。对于一个 Web 设计人员
来说,用什么数据库并不是首要问题,此时 MySQL 可能能够满足要
求 。但当用户的 SQL 技能不断提升,不再满足于写一写单表 select 或者
简单的 join 查询时,MySQL 的缺点就会暴露无遗 。自本书第一版出版
以来,虚拟化技术的进步使得商业化的云主机服务得到了长足的发展,因此
拥有自己的独立云主机不再是一件很奢侈的事情 。当用户拥有自己
的独立云主机时,就可以自由选择在上面安装什么软件 。随着
PaaS(平台即服务)、DBaaS(数据库即服务)等云计算模式的流行,
PostgreSQL的发展前景向好 。绝大多数的云服务厂商都提供
PostgreSQL 服务,其中比较著名的有 Heroku、Engine Yard、RedHat


推荐阅读