- 论坛徽章:
- 0
|
作为开源数据库的两大代表,PostgreSQL与MySQL之中一般认为PostgreSQL功能更强大。不过其实MySQL也有很多优势,方便好用、提供只读从数据库的数据库复制技术就是其中之一。
PostgreSQL并不是没有数据库复制解决方案,但一直以来,追求完美的PostgreSQL开发者决定不在PosgreSQL内核中加入内建的复制支持,因为数据库复制有很多种实现方案,每个方案都是各有特色,因此不如不开发内建复制功能,而是鼓励第三方来开发多种多样的复制方案。因此诸如Slony, Continunent等支持PostgreSQL复制的软件不断出现。但从目前的情况来看,这一决定看来很大程度上影响了PostgreSQL的流行度。
这么说不是没有道理的。复制技术对数据库来说可以说是必备功能之一。传统的复制技术主要用来实现高可用性,要求有一些主数据库的热备份,在主数据库故障时能够很快接管服务。近几年来,随着Web应用数据库数据量和访问量的增加,Web应用数据库操作模式越来越偏向读操作为主,对支持只读slave的复制技术的需求日益突出。MySQL在系统一开始就提供了内建的复制功能,相对来说,PostgreSQL迟迟不在这方面下工夫,用户当然就不会买帐了。
今年的PGCon上,两位日本的技术人员演示了他们公司开发的一个PostgreSQL复制系统,通过实时的同步复制数据库操作日志(WAL log)的方式实现。他们目前好像没有准备将代码贡献出来捐给社区(PostgreSQL采用的FreeBSD授权允许这么干),但他们的工作引起了PGCon与会人员对复制技术的很大关注。会后,PostgreSQL的核心开发人员Tom Lane在邮件列表上首次决定PostgreSQL将开始开发内建的复制解决方案。结果这个贴子在两天内就有了近140个回复,成为PostgreSQL开发历史上最被关注的开发声明之一(提示:网站被G.F.W禁掉,请用Tor或代理访问),可见用户对复制技术的需求是多少强烈。所以这件事情早该做了,PostgreSQL最初是作为ORDBMS实验场起家的,一直以来比较崇尚试验新技术,但对用户的需求关注不够,不怎么愿意去好好实现那些技术上没什么先进性,但非常有用的功能,导致了这个系统一直有点阳春白雪的感觉。
根据Tom Lane的设想,PostgreSQL内建复制功能的计划是先使用传输WAL日志的方法实现基本的复制功能,这一功能实现不太复杂,计划在下一个版本即8.4版本上加入(PostgreSQL版本升级很快,一般都不到1年,不像MySQL,5.1都快把我憋死了)。在此基础之上,准备实现只读的slave,不过有一些技术难度,主要与VACUUM有关(唉,又是这个我从来就不喜欢的VACUUM)。所以这个功能估计就要等到8.5甚至再后面了。
不管怎么说,决心已定,剩下就是干活的了。希望不久的将来我们就能看到一个更好用的PostgreSQL。 |
|