[code]
看到N多人比较这两个数据库,呵呵,我也来搞搞热闹,希望接下来都尽可能在应用角度去测试这次比较
本测试文档,采用GPL 协议,如转载请注明出处 : http://blog.bowenye.com/read.php?2  
如商业,请联系本人  QQ : 84437129
[/code]
测试项目将分多个,比如安装过程,建表,select delete, 针对MySQL不同的存贮格式,容错等各方面,更可能做到国内最详尽比较
先来介绍一下两个主角
第一    MySQL
[code]
先来收集几个官方的描述
MySQL AB是由MySQL创始人和主要开发人创办的公司。MySQL AB最初是由David Ax、Allan Larsson和Michael“Monty”Widenius在瑞典创办的.
*MySQL是一种数据库管理系统
*MySQL是一种关联数据库管理系统。
*MySQL软件是一种开放源码软件。
*MySQL数据库服务器具有快速、可靠和易于使用的特点。
*MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。 
*有大量可用的共享MySQL软件。MySQL服务器采用了多层设计和独立模块
...(省去5000字)
[/code]
第二 PostgreSQL
[code]
PostgreSQL 是以加州大学伯克利分校计算机系开发的 POSTGRES, Version 4.2 为基础的对象关系型数据库管理系统(ORDBMS)。POSTGRES 领先的许多概念只是在非常迟的时候才出现在商业数据库中。PostgreSQL 是最初伯克利代码的一个开放源码的继承人。它支持大部分 SQL 标准并且提供了许多其它现代特性:复杂查询 
外键 
触发器 
视图 
事务完整性 
多版本并发控制 
另外,PostgreSQL 可以用许多方法进行扩展,比如通过增加新的:数据类型 
函数 
操作符 
聚集函数 
索引方法 
过程语言 
并且,因为许可证的灵活,任何人都可以以任何目的免费使用、修改、分发 PostgreSQL ,不管是私用、商用、还是学术研究使用。...(此处也省去5000字)
[/code]呵呵,费话有点多了,现在就马上开始(已经有人开始拿鸡蛋了)
(注意,以下内容我会有意做错一点的,主要是为了防止ctrl+v的垢病,但又绝对不影响学习,当你动动手实践了你就明,我倒底在哪儿有意做错的了 :p )
1.mysql 编译参数
MySQL编译参数,因为MySQL有多种不同的存贮格式,现在取两种常用的MyISAM 与 innodb  版本 mysql-5.1.34[code]
./configure --prefix=/usr/local/mysql --with-extra-charsets=all --enable-thread-safe-client --enable-shared --enable-static --with-comment --with-man --with-docs --with-pthread --enable-assembler  --with-mysqld-ldflags=-all-static --with-plugins=innobase
make 
make install
[/code]2.PostgreSQL 编译参数
PostgreSQL比较简单 版本 postgresql-8.3.6 如果有人需要最新的,请到我提供的国内镜像下载
[code]
./configure --enable-FEATURE --enable-thread-safety
gmake
gmake install
[/code]使用 默认的 my-large.cnf  作为my.cnf文件
mysql 5.1.x的一个不太友好的地方,my.cnf默认的文件都得把里面一行
 [code]skip-federated[/code] 
大概在50行上面注释掉
否则在启动时会出现
[code]Starting MySQL.Manager of pid-file quit without updating fi[FAILED][/code]
错误
题外话,在编译php增加pgsql参数的时候,如果你的pgsql用rpm安装的呢,倒不会遇到啥问题,但如果pgsql是用源代码安装并安装在自己重新设定的文件夹上面的呢
一般都会出现如下的错误
[code]
checking for PostgreSQL support for PDO... yes
checking for pg_config... not found
configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
[/code]
要解决的方法有两个
一. 在PHP源代码第80002-80025行代码中修改"/usr/local/pgsql/bin" 为你安装PostgreSQL的文件夹,如"/usr/local/postgres/bin/"
[code]
 原始代码
 80002   for i in $PHP_PGSQL $PHP_PGSQL/bin /usr/local/pgsql/bin /usr/local/bin /usr/bin ""; do
 80003         if test -x $i/pg_config; then
 80004       PG_CONFIG="$i/pg_config"
 80005       break;
 80006     fi
... 80021     if test "$PHP_PGSQL" = "yes"; then
 80022       PGSQL_SEARCH_PATHS="/usr /usr/local /usr/local/pgsql/bin"
 80023     else
 80024       PGSQL_SEARCH_PATHS=$PHP_PGSQL
 80025     fi
 
[/code]
[code]
 修改后代码
 80002   for i in $PHP_PGSQL $PHP_PGSQL/bin /usr/local/postgres/bin/ /usr/local/bin /usr/bin ""; do
 80003         if test -x $i/pg_config; then
 80004       PG_CONFIG="$i/pg_config"
 80005       break;
 80006     fi...
 80021     if test "$PHP_PGSQL" = "yes"; then
 80022       PGSQL_SEARCH_PATHS="/usr /usr/local /usr/local/postgres/bin"
 80023     else
 80024       PGSQL_SEARCH_PATHS=$PHP_PGSQL
 80025     fi
[/code]二.运行 export 命令重新定位 就行
[code]$ export PGSQL_INCLUDE=/usr/local/postgres/include
$ export PGSQL_LIBDIR=/usr/local/postgres/lib ...--with-pdo-pgsql=/usr/local/postgres/ --with-pgsql=/usr/local/postgres/ [/code](注意上面的问题在国内应该还没人提出,国外我google了一下,才只有一两编文章说到这事,可能用PostgreSQL的人太少了)OK,开始建表,为了标准化,两种数据库的表都尽可能相同
基于理论源于生活,理论用于生活的至高名言,决定采用UCHOME 1.5的一个表(如果实在不知这是啥表的人,不要来问我)[code]
---MySQL 的一个表,MySQL正常情况会分myisam 与innodb 所以在建表的时候,为公平,再多建一个innodb---MyISAM
CREATE TABLE IF NOT EXISTS  uchome_docomment  (
   id  int(10) unsigned NOT NULL AUTO_INCREMENT,
   upid  int(10) unsigned NOT NULL DEFAULT '0',
   doid  mediumint(8) unsigned NOT NULL DEFAULT '0',
   uid  mediumint(8) unsigned NOT NULL DEFAULT '0',
   username  char(15) NOT NULL DEFAULT '',
   dateline  int(10) unsigned NOT NULL DEFAULT '0',
   message  text NOT NULL,
   ip  char(20) NOT NULL DEFAULT '',
   grade  smallint(6) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY ( id ),
  KEY  doid  ( doid )
) ENGINE=MyISAM ;
---innodb
CREATE TABLE IF NOT EXISTS  uchome_docomment_innodb  (
   id  int(10) unsigned NOT NULL AUTO_INCREMENT,
   upid  int(10) unsigned NOT NULL DEFAULT '0',
   doid  mediumint(8) unsigned NOT NULL DEFAULT '0',
   uid  mediumint(8) unsigned NOT NULL DEFAULT '0',
   username  char(15) NOT NULL DEFAULT '',
   dateline  int(10) unsigned NOT NULL DEFAULT '0',
   message  text NOT NULL,
   ip  char(20) NOT NULL DEFAULT '',
   grade  smallint(6) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY ( id ),
  KEY  doid  ( doid )
) ENGINE=InnoDB ;[/code]
[code]
--  PostgreSQL 使用专有的存贮格式,目前只有一种
CREATE TABLE  uchome_docomment (
  id serial,
  upid integer NOT NULL DEFAULT '0',
  doid integer  NOT NULL DEFAULT '0',
  uid integer  NOT NULL DEFAULT '0',
  username char(15) NOT NULL DEFAULT '',
  dateline integer NOT NULL DEFAULT '0',
  message text NOT NULL,
  ip char(20) NOT NULL DEFAULT '',
  grade integer NOT NULL DEFAULT '0',
  PRIMARY KEY (id,doid)
)  ;[/code]
OK,表建好了,现在准备测试方案来了,马上接受第一个测试,建表时间,(注意,不能说很有参考性,也不能说能这个测试能帮你啥大忙)
由于MySQL只能到0.00秒内,所以只在phpmyadmin上面运行了一下
时间平均在0.0003 秒 至 0.0005 秒:而PostgreSQL 时间在 Time: 12.006 ms 至 Time: 14.703 ms第一会合简单的过去了,接下来就得用PHP来测试select insert update delete 这些常用的操
好时间到,欲知后事如何,请看第二节

解决方案 »

  1.   

    不错,这里可以用CODE比如select * from table
      

  2.   

     
    看到N多人比较这两个数据库,呵呵,我也来搞搞热闹,希望接下来都尽可能在应用角度去测试这次比较
    本测试文档,采用GPL 协议,如转载请注明出处 : http://blog.bowenye.com/read.php?2  
    如商业,请联系本人  QQ : 84437129测试项目将分多个,比如安装过程,建表,select delete, 针对MySQL不同的存贮格式,容错等各方面,更可能做到国内最详尽比较
    先来介绍一下两个主角
    第一    MySQL
     
    先来收集几个官方的描述
    MySQL AB是由MySQL创始人和主要开发人创办的公司。MySQL AB最初是由David Ax、Allan Larsson和Michael“Monty”Widenius在瑞典创办的.
    *MySQL是一种数据库管理系统
    *MySQL是一种关联数据库管理系统。
    *MySQL软件是一种开放源码软件。
    *MySQL数据库服务器具有快速、可靠和易于使用的特点。
    *MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。 
    *有大量可用的共享MySQL软件。MySQL服务器采用了多层设计和独立模块
    ...(省去5000字)第二 PostgreSQL
     
    PostgreSQL 是以加州大学伯克利分校计算机系开发的 POSTGRES, Version 4.2 为基础的对象关系型数据库管理系统(ORDBMS)。POSTGRES 领先的许多概念只是在非常迟的时候才出现在商业数据库中。PostgreSQL 是最初伯克利代码的一个开放源码的继承人。它支持大部分 SQL 标准并且提供了许多其它现代特性:复杂查询 
    外键 
    触发器 
    视图 
    事务完整性 
    多版本并发控制 
    另外,PostgreSQL 可以用许多方法进行扩展,比如通过增加新的:数据类型 
    函数 
    操作符 
    聚集函数 
    索引方法 
    过程语言 
    并且,因为许可证的灵活,任何人都可以以任何目的免费使用、修改、分发 PostgreSQL ,不管是私用、商用、还是学术研究使用。...(此处也省去5000字)
    呵呵,费话有点多了,现在就马上开始(已经有人开始拿鸡蛋了)
    (注意,以下内容我会有意做错一点的,主要是为了防止ctrl+v的垢病,但又绝对不影响学习,当你动动手实践了你就明,我倒底在哪儿有意做错的了 :p )
    1.mysql 编译参数
    MySQL编译参数,因为MySQL有多种不同的存贮格式,现在取两种常用的MyISAM 与 innodb  版本 mysql-5.1.34 
    ./configure --prefix=/usr/local/mysql --with-extra-charsets=all --enable-thread-safe-client --enable-shared --enable-static --with-comment --with-man --with-docs --with-pthread --enable-assembler  --with-mysqld-ldflags=-all-static --with-plugins=innobase
    make 
    make install
    2.PostgreSQL 编译参数
    PostgreSQL比较简单 版本 postgresql-8.3.6 如果有人需要最新的,请到我提供的国内镜像下载
     
    ./configure --enable-FEATURE --enable-thread-safety
    gmake
    gmake install
    使用 默认的 my-large.cnf  作为my.cnf文件
    mysql 5.1.x的一个不太友好的地方,my.cnf默认的文件都得把里面一行
      skip-federated 
    大概在50行上面注释掉
    否则在启动时会出现
     Starting MySQL.Manager of pid-file quit without updating fi[FAILED]
    错误
    题外话,在编译php增加pgsql参数的时候,如果你的pgsql用rpm安装的呢,倒不会遇到啥问题,但如果pgsql是用源代码安装并安装在自己重新设定的文件夹上面的呢
    一般都会出现如下的错误
     
    checking for PostgreSQL support for PDO... yes
    checking for pg_config... not found
    configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path要解决的方法有两个
    一. 在PHP源代码第80002-80025行代码中修改"/usr/local/pgsql/bin" 为你安装PostgreSQL的文件夹,如"/usr/local/postgres/bin/"
     
     原始代码
     80002   for i in $PHP_PGSQL $PHP_PGSQL/bin /usr/local/pgsql/bin /usr/local/bin /usr/bin ""; do
     80003         if test -x $i/pg_config; then
     80004       PG_CONFIG="$i/pg_config"
     80005       break;
     80006     fi
    ... 80021     if test "$PHP_PGSQL" = "yes"; then
     80022       PGSQL_SEARCH_PATHS="/usr /usr/local /usr/local/pgsql/bin"
     80023     else
     80024       PGSQL_SEARCH_PATHS=$PHP_PGSQL
     80025     fi
      
     修改后代码
     80002   for i in $PHP_PGSQL $PHP_PGSQL/bin /usr/local/postgres/bin/ /usr/local/bin /usr/bin ""; do
     80003         if test -x $i/pg_config; then
     80004       PG_CONFIG="$i/pg_config"
     80005       break;
     80006     fi...
     80021     if test "$PHP_PGSQL" = "yes"; then
     80022       PGSQL_SEARCH_PATHS="/usr /usr/local /usr/local/postgres/bin"
     80023     else
     80024       PGSQL_SEARCH_PATHS=$PHP_PGSQL
     80025     fi
    二.运行 export 命令重新定位 就行
     $ export PGSQL_INCLUDE=/usr/local/postgres/include
    $ export PGSQL_LIBDIR=/usr/local/postgres/lib ...--with-pdo-pgsql=/usr/local/postgres/ --with-pgsql=/usr/local/postgres/ (注意上面的问题在国内应该还没人提出,国外我google了一下,才只有一两编文章说到这事,可能用PostgreSQL的人太少了)OK,开始建表,为了标准化,两种数据库的表都尽可能相同
    基于理论源于生活,理论用于生活的至高名言,决定采用UCHOME 1.5的一个表(如果实在不知这是啥表的人,不要来问我) 
    ---MySQL 的一个表,MySQL正常情况会分myisam 与innodb 所以在建表的时候,为公平,再多建一个innodb---MyISAM
    CREATE TABLE IF NOT EXISTS  uchome_docomment  (
       id  int(10) unsigned NOT NULL AUTO_INCREMENT,
       upid  int(10) unsigned NOT NULL DEFAULT '0',
       doid  mediumint(8) unsigned NOT NULL DEFAULT '0',
       uid  mediumint(8) unsigned NOT NULL DEFAULT '0',
       username  char(15) NOT NULL DEFAULT '',
       dateline  int(10) unsigned NOT NULL DEFAULT '0',
       message  text NOT NULL,
       ip  char(20) NOT NULL DEFAULT '',
       grade  smallint(6) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY ( id ),
      KEY  doid  ( doid )
    ) ENGINE=MyISAM ;
    ---innodb
    CREATE TABLE IF NOT EXISTS  uchome_docomment_innodb  (
       id  int(10) unsigned NOT NULL AUTO_INCREMENT,
       upid  int(10) unsigned NOT NULL DEFAULT '0',
       doid  mediumint(8) unsigned NOT NULL DEFAULT '0',
       uid  mediumint(8) unsigned NOT NULL DEFAULT '0',
       username  char(15) NOT NULL DEFAULT '',
       dateline  int(10) unsigned NOT NULL DEFAULT '0',
       message  text NOT NULL,
       ip  char(20) NOT NULL DEFAULT '',
       grade  smallint(6) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY ( id ),
      KEY  doid  ( doid )
    ) ENGINE=InnoDB ;
     
    --  PostgreSQL 使用专有的存贮格式,目前只有一种
    CREATE TABLE  uchome_docomment (
      id serial,
      upid integer NOT NULL DEFAULT '0',
      doid integer  NOT NULL DEFAULT '0',
      uid integer  NOT NULL DEFAULT '0',
      username char(15) NOT NULL DEFAULT '',
      dateline integer NOT NULL DEFAULT '0',
      message text NOT NULL,
      ip char(20) NOT NULL DEFAULT '',
      grade integer NOT NULL DEFAULT '0',
      PRIMARY KEY (id,doid)
    )  ;
    OK,表建好了,现在准备测试方案来了,马上接受第一个测试,建表时间,(注意,不能说很有参考性,也不能说能这个测试能帮你啥大忙)
    由于MySQL只能到0.00秒内,所以只在phpmyadmin上面运行了一下
    时间平均在0.0003 秒 至 0.0005 秒:而PostgreSQL 时间在 Time: 12.006 ms 至 Time: 14.703 ms第一会合简单的过去了,接下来就得用PHP来测试select insert update delete 这些常用的操
    好时间到,欲知后事如何,请看第二节
      

  3.   

    另外建议能以表的形式来显示你的对比结果。[code=BatchFile]              |  MySQL           | PostgreSQL
    --------------+---------+--------+-------------
                  |  MyISAM | InnoDB |  xxx
    --------------+---------+--------+-------------
    creae table   |  0.0003 |        |  12.006
    select        |         |        |
    delete        |         |        |
    update        |         |        |
    --------------+---------+--------+-------------[/code]
      

  4.   

    没办法CSDN的限制比较多,或许你可以发到你的博客中做个系列。然后在这发个链接。