崛起吧 PostgreSQL
jopen 12年前
<p>Postgres 正获得越来越多的关注 - 理所应当的 :)像 Postgres 这样开放的数据库系统正在和大型、昂贵、不规则的“企业级”系统,例如 SQL Server,Oracle 形成正面的交锋,提供同等的功能,但更好用。在所有这些系统中,Postgres 是最智能,最快速和功能最全面的。</p> <p><img alt="崛起吧 PostgreSQL" src="https://simg.open-open.com/show/ca60ba747499a63f78618533240a5e2f.jpg" width="468" height="293" /></p> <p><strong>Postgres.app</strong></p> <p>最近有一些关于 <a href="/misc/goto?guid=4958348855367244878" target="_blank">Postgres.app</a> 的风言风语。大部分人不理解 Postgres.app,我来简单解释一下吧。</p> <p>Postgres 可以配置很多有趣的选项,例如运行地球空间信息索引(PostGIS),创建 Ruby 和 JavaScript 方法,扩展查询引擎以支持远程数据例如 GMail。这些功能都需要从源代码编译,这是一个比较痛苦的过程,即使你在 Mac 上使用 Homebrew。</p> <p>Homebrew 根据常用的配置抓取源码并编译。Postgres.app 是预先编译好,并且作为一个守护进程运行。你可以根据需要打开或者关闭。你只需要下载它,拖动到你的应用目录就搞定了。</p> <p>对比一下 SQL Server 和 Oracle 的安装过程吧!</p> <p>这明显要迷人很多。如果你使用的是 Mac,你还可以使用 <a href="/misc/goto?guid=4958348856175534554" target="_blank">Navicat</a>。有一个免费的版本,你也可以先玩一下他们的demo。</p> <p><strong>重新认识一下这位老朋友</strong></p> <p>PostgreSQL 已经存在了很长时间了。你看到这里也许在想这操蛋的名字到底是谁取的?<a href="/misc/goto?guid=4958348856973372772" target="_blank">Tom Lane 的解释</a>如下:</p> <blockquote> 软件的名字是 PostgreSQL 或者 Postgres,不是 postgre……的确,1996年决定叫它 PostgreSQL 而不是更简单的 Postgres 应该是这个项目到目前为止犯的唯一一个错误。但现在想改已经太晚。 </blockquote> <p>Postgres 是从一个非常古老的数据库系统 <a href="/misc/goto?guid=4958348857775817514" target="_blank">Ingres</a> 移植而来,目的是创建一个可插拔的,可伸缩的快速数据库系统,并且是用户友好而智能。“POSTgres”这个名字似乎是在影射之前的项目“After Ingres”。</p> <p><strong>谁在乎呢?</strong></p> <p>这一点很关键 - 不是很多人。随着 PHP 的兴起,“更友好”的 MySQL 平台被广泛的采用,而不是更严谨,基于规则的 Postgres 系统。“更友好”在我看来是“更愚蠢”。</p> <p>好吧,我承认我的话很伤人,我收回。这一段<a href="/misc/goto?guid=4958348858574390009" target="_blank">视频</a>是我在 Tekpub 上发布的,名字叫做“MySQL 的危险”。假如你不想看完整段视频(译者注:天朝的我们没法看),我来做一个总结:</p> <ul> <li>MySQL 可能会忽略你的默认值或者限制,为了“帮助你”不要太严谨</li> <li>假如字段不能为空的话,它不能向非空字段插入 "" </li> <li>假如字段不能为空的话,它会插入无意义的日期例如“0000-00-00”</li> <li>1/0 返回的是 NULL</li> <li>"THIS IS NOT A NUMBER"/0 返回的是 NULL</li> <li>假如你向一个长度限制为2的字段插入1000的话,它会帮你四舍五入成99</li> </ul> <p>这些就是你要小心使用 MySQL 的地方。它默认不会保护你的数据,而是以牺牲数据完整性来尝试让你通过。这在我看来很愚蠢。</p> <p>如果这些你都不在乎的话,我还有一个词要送给你:<strong>Oracle</strong>。</p> <p><strong>快速,可扩展,有趣</strong></p> <p>Postgres 有很多的功能,大部分人可能都不知道。它有很多句法上的技巧:</p> <ul> <li>关键词“Infinity”意味着比任何输入的数字要大。这可以是数字,也可以是日期,也可以设置正负。</li> <li>可以识别“today”,“tomorrow”,“yesterday”等关键词</li> <li>令人惊讶的数据类型,例如 Arrays,IP地址(支持 IPv6)。还有空间类型,例如线,正方形,圆形</li> <li>数据表继承,这是一个很奇怪的功能,可以让你的一张表继承另外一张表</li> <li>自带自然语言全文索引</li> </ul> <p>更重要的是 Postgres 还非常的快速并且可扩展。我和我的 DBA 朋友 <a href="/misc/goto?guid=4958348859372388801" target="_blank">Rob Sullivan</a> 做了一些测试,装载 StackOverflow 600万条的文本数据。我们用的是 Windows 的机器,在很多情况下 Postgres 秒杀了 SQL Server。</p> <p>虽然 SQL Server 也可以为数据表分区,但是你必须付费,更何况 Postgres 的性能更好,并且索引更小。</p> <p>如果这些还不够的话,Postgres 默认支持 TOAST 数据表。这个名字很奇怪,是“Automatic Table Compression”的缩写。我在本文最后的 demo 中展示了这一点。还有,Postgres 会在你的磁盘上压缩数据,减少 RAM 和磁盘的使用量。</p> <p>这个功能使得 StackOverflow 的 dump 数据从24G降到了6G!记住这些都是Postgres免费提供的,而使用 SQL Server 你就必须购买企业授权。</p> <p><strong>还有五件你不知道的事情</strong></p> <p>关于 Postgres 还有很多可以写,我还是想贴一下我在 NDC 2012 上的演讲 “<a href="/misc/goto?guid=4958348860169289075" target="_blank">5 Things You Didn't Know About PostgreSQL</a>”:</p> <ul> <li>通过 Foreign Data Wrappers 进行 推ter 查询</li> <li>使用 Google 的 V8 引擎编写 JavaScript 函数</li> <li>秒杀 MySQL 的那些雕虫小技</li> <li>避免锁以及自带的快照功能</li> <li>数据表继承</li> <li>疯狂的数据类型</li> </ul> <p>希望你会喜欢。</p> <p><a href="/misc/goto?guid=4958348860964757332" target="_blank">原文链接</a><br /> 来自:OSChina</p>