|
- 看到N多人比较这两个数据库,呵呵,我也来搞搞热闹,希望接下来都尽可能在应用角度去测试这次比较
- 本测试文档,采用GPL 协议,如转载请注明出处 : [url]http://blog.bowenye.com/read.php?2[/url]
- 如商业,请联系本人 QQ : 84437129
复制代码
测试项目将分多个,比如安装过程,建表,select delete, 针对MySQL不同的存贮格式,容错等各方面,更可能做到国内最详尽比较
先来介绍一下两个主角
第一 MySQL
- 先来收集几个官方的描述
- MySQL AB是由MySQL创始人和主要开发人创办的公司。MySQL AB最初是由David Axmark、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默认的文件都得把里面一行
大概在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 这些常用的操
好时间到,欲知后事如何,请看第二节 |
|