Postgre数据库
已恢复历史版本
当前版本 00000002 在备份中缺失;以下内容来自最新可读取版本 00000001。
postgresql 是伯克利大学研究开发并维护的数据库系统,是开源数据库的精品之作。postgresql具有高稳定性,功能强大等优点,被誉为最强大的开源数据库系统。因为为伯克利大学开发,理论上应当可以非常流畅的运行在FreeBSD系统中,这样的话postgresql可以说是稳如泰山了。
当然在Web上最流行的数据库还是mysql,mysql的优点和缺点都非常明显,优点当然是速度快,但是前提是更新不频繁、读取很多并且表比较小,还有一点就是需要使用myisam或者内存heap表结构可以获得很高的速度。mysql的缺点也非常明显,那就是在更新很频繁的时候造成大量线程的堵塞,而且数据库表很容易损坏,已经有很多网站和应用深受其害,甚至已经有很多人怀疑所有数据库的能力,已经开始考虑直接使用文件系统搭建网站了。
postgresql正好是非常适合java web应用的一种数据库系统,它没有流行起来是因为php对它的支持不是很良好以至速度表现不好,其实postgresql的速度完全可以为人所接受,就是它的连接数据库的瞬间表现得很慢,在分离机器後更为明显,因为php没有像java那样的链接池,所以广泛流传一种postgresql速度很慢的形象。在这点上mysql就还算比较好了,所以大多数的php都只能选择mysql。而java的各种服务器都会带有链接池,所以在这点上的速度损失几乎就不存在了。在没有链接池的环境中,可以使用单线程的方式来访问postgresql,比如在命令行访问,这样因为命令行本身默认是单线程的,所以不会产生问题。
postgresql与mysql相比有不同的数据库插入技术,mysql仍然是采用传统的锁机制来工作,myisam以表(文件)锁定机制来工作,innodb是以行锁定机制工作,这两种实际上都是比较古老的技术,而且会不同程度的影响访问;而postgresql是用多版本模型的方式来工作,所以在并发写入-读取中,不会出现任何形态的阻塞。
postgresql也支持集群方式工作,这实际上是基于linux系统内核的集群,有一个中央调度器,检测每台postgresql的工作状态并且合理的发配请求,数据存储在一个公共的磁盘阵列上,mysql当然理论上也可以这样运行,但是多mysql共享一个表结构极容易使表损坏,并且效率也不见得就会快了,因为还是锁机制,还是共享表结构机制。
与mysql相比postgresql的语法更丰富了,与mysql明显有所不同的是limit语句,postgresql是这样写的: limit 1 offset 2 相当于mysql的 limit 2,1,postgresql不支持mysql的`符号,所以mysqldump出来的sql文件需要替换这个字符,另外postgresql的数据类型和mysql当然也是有所不同的,比较让我感兴趣的是postgresql具有8k大小的varchar字段可供选择,相比较而言,mysql只支持 255字节的varchar并且超过255字节的数据只能使用32k的text或者比较弱智的多varchar(255)字段,这样看来还是 postgresql的选择更多了。更为神奇的是,postgresql还支持数组方式的数据,这样看来还得多学学怎么使用才行了,因为在mysql里,这样的处理方式是使用分号或者某符号分隔。
postgresql可以说是替代mysql最好的数据库系统,假如在下一个应用中它能克服mysql的几大缺点,那么将来必然可以一直使用它,告别麻烦的mysql。