免费数据库(SQLite、BerkeleyDB、PostgreSQL、MySQL、
Fire。。。
SQLite数据库是中⼩站点CMS的最佳选择
SQLite 是⼀个类似Access的轻量级数据库系统,但是更⼩、更快、容量更⼤,并发更⾼。为什么说 SQLite 最适合做 CMS (内容管理系统)呢?并不是说其他数据库不好, Oracle、MySQL、SQLServer 也都是⾮常优秀的 DBS,只不过他们设计⽬标不同,特性不同,所以只有更适⽤某个应⽤场景,没有绝对的好坏之分。
我归纳的中⼩型站点的CMS的特点如下:
1、数据量不超过10万
2、⽇页⾯访问量不超过10万
3、⼀部分⽹站全部⽣成静态页⾯,⼀部分⽹站实时查询数据库动态访问
4、站长不懂技术,不懂得复杂的数据库维护,只会⽤ FTP 管理⽹站
5 、个⼈站点基本上是⼀个⼈管理,⼀般情况下只有⼀个⼈在访问后台,没有并发
6、对数据库来说是读多写少,只有在站长访问后台的时候才会写⼊
7、多运⾏于虚拟主机,⼤部分PHP主机均同时⽀持MySQL,⼩部分PHP主机需要单独购买MySQL,PHP+MySQL的主机价格较
PHP主机价格⾼。(以万⽹为例:最便宜的PHP空间780元,最便宜的PHP+MySQL的PHP空间1150元)
8、多数中⼩站点的HTTP服务与MySQL部署在同⼀服务器上
SQLite 的优点在中⼩⽹站CMS应⽤场景下表现突出:
1、与MySQL相⽐,它更彻底的免费,并且没有任何使⽤上的限制
2、⾮常⼩巧,PHP5以上版本中⽆需任何配置即可⽀持SQLite
3、⽆需单独购买数据库服务,⽆服务器进程,配置成本为零
4、整个数据库存储在⼀个单个的⽂件中,数据导⼊导出备份恢复都是复制⽂件,维护难度为零
5、读速度快,在数据量不是很⼤的情况下速度较快,更重要的是:省掉了⼀次数据库远程链接没有复杂的权限验证,打开就能操作SQLite的缺点在中⼩⽹站 CMS 应⽤场景下被规避:
1、并发低动态访问时当访问量不超过10万PV的时候,SQLite 超过 Access 的并发能⼒已经绰绰有余;⽣成静态页后更⽆需考虑数据
库的并发问题
2、在⼤数据量的情况下表现较差但是中⼩站点⼀般情况下数据量不超过10万,⽽SQlite 在 100 万数据量之下表现还不错,因为省掉
了对数据库服务器的远程连接甚⾄会更快
3、写⼊较慢默认配置下的 SQlite 的写⼊速度⽐MySQL慢了很多,但是 CMS 应⽤场景的写⼊操作较少。在插⼊新⽂章的时候基本感
受不到慢。集中的写数据库操作只有在安装的时候会出现,不过只出现⼀次,可以忽略
4、为已有的表加索引较慢但是在中⼩站点CMS中不会有这样的需求,可以忽略
5、⽆法将 MySQL 部署到与前端机不同的服务器上,但是中⼩站点也没有分开部署的需求
综上所述:在中⼩站点 CMS 的应⽤场景下 SQLite 能最⼤限度的降低建站成本,降低维护难度,⼜很好得规避了⾃⾝的缺点。所以我认为未来⽀持 SQLite 的 CMS 系统⼀定会⼤⾏其道。
嵌⼊式数据库系统Berkeley DB
通常,我们在设计UNIX/LINUX平台下的应⽤软件时,如果数据种类繁多,数据与数据之间关系⽐较复杂,就会选⽤⼀些⼤型的企业级数据库系统,如 DB2,ORACLE、SYBASE等,如果软件规模不⼤,就倾向选⽤如MYSQL、POSTGRESQL等中⼩型数据库。例如使⽤
PHP/PERL + MYSQL/POSTGRESQL设计⽹站基本上是⼀个很常规的做法。但是,当应⽤软件管理的数据类型较少(特别注意:这并不是说需要管理的数据量⼩),数据管理本⾝不复杂,且对数据操作要求⾼效率,则由⼤名⿍⿍的Berkeley(美国加州⼤学伯克利分校)开发的Berkeley DB可能是⼀个很明智的选择。
DB 是⼀个具有⼯业强度的嵌⼊式数据库系统,数据处理的效率很⾼。DB功能的稳定性历经时间的考验,在⼤量应⽤程序中使⽤便是明证。可以想见,在同等代码质量的条件下,软件的BUG数和代码的长度是成正⽐的,相对⼏⼗兆、⼏百兆⼤型数据库软件,DB的只有不到500K 的⼤⼩!
从实现功能上看,DB是轻量级数据库系统,或可称为"极" 轻量级数据库系统。但是,我认为不能因此⽽
⼼存轻视之意,所谓"尺有所短,⼨有所长",以绝对⾓度⽐较⼯具之间的好坏是没有什么意义的,关键在于对⼯具的选择和运⽤(似乎可以参考⼀下极限编程的思想)。也许,正确的"表达范式"应该是:在当前应⽤背景下,选择这种⼯具是最合适的。
像MySQL这类基于C/S结构的关系型数据库系统虽然代表着⽬前数据库应⽤的主流,但却并不能满⾜所有应⽤场合的需要。有时我们需要的可能只是⼀个简单的基于磁盘⽂件的数据库系统。这样不仅可以避免安装庞⼤的数据库服务器,⽽且还可以简化数据库应⽤程序的设计。Berkeley DB正是基于这样的思想提出来的。
Berkeley DB简介
Berkeley DB是⼀个开放源代码的内嵌式数据库管理系统,能够为应⽤程序提供⾼性能的数据管理服务。应⽤它程序员只需要调⽤⼀些简单的API就可以完成对数据的访问和管理。与常⽤的数据库管理系统(如MySQL和Oracle等)有所不同,在Berkeley DB中并没有数据库服务器的概念。应⽤程序不需要事先同数据库服务建⽴起⽹络连接,⽽是通过内嵌在程序中的Berkeley DB函数库来完成对数据的保存、查询、修改和删除等操作。
Berkeley DB为许多编程语⾔提供了实⽤的API接⼝,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同数据库相关的操作都由Berkeley DB函数库负责统⼀完成。这样⽆论是系统中的多个进程,
或者是相同进程中的多个线程,都可以在同⼀时间调⽤访问数据库的函数。⽽底层的数据加锁、事务⽇志和存储管理等都在Berkeley DB函数库中实现。它们对应⽤程序来讲是完全透明的。俗话说:“⿇雀虽⼩五脏俱全。”Berkeley DB函数库本⾝虽然只有300KB左右,但却能够⽤来管理多达256TB的数据,并且在许多⽅⾯的性能还能够同商业级的数据库系统相抗衡。就拿对数据的并发操作来说,Berkeley DB能够很轻松地应付⼏千个⽤户同时访问同⼀个数据库的情况。此外,如果想在资源受限的嵌⼊式系统上进⾏数据库管理,Berkeley DB可能就是惟⼀正确的选择了。
Berkeley DB作为⼀种嵌⼊式数据库系统在许多⽅⾯有着独特的优势。⾸先,由于其应⽤程序和数据库管理系统运⾏在相同的进程空间当中,进⾏数据操作时可以避免繁琐的进程间通信,因此耗费在通信上的开销⾃然也就降低到了极低程度。其次,Berkeley DB使⽤简单的函数调⽤接⼝来完成所有的数据库操作,⽽不是在数据库系统中经常⽤到的SQL语⾔。这样就避免了对结构化查询语⾔进⾏解析和处理所需的开销。
主流开源数据库的技术特点点评
随着开放源代码软件的使⽤越来越⼴泛,像Linux操作系统⼀样,开放源代码数据库的出现也有其必然性。在当Oracle、IBM、Microsoft、Sybase 等⼏⼤数据库⼚商在数据库领域处于垄断地位的时候,出现了以MySQL、PostgreSQL为代表的开放源代码的数据库系统,推动了开源软件事业的发展。开源
数据库系统并不是⼀个新事物,如Postgres(PostgreSQL的前⾝)已经有20年的发展历史了,⽽著名的MySQL 今年4⽉刚刚度过了其10周年纪念活动。
1、MYSQL
MysQL是瑞典的T.c.X公司负责开发和维护的,它是⼀个真正的多⽤户、多线程SQL数据库服务器。MysQL是以⼀个客户机/服务器结构实现其功能的,它由⼀个服务器守护程序mysqld和很多不同的客户程序和库组成。SQL是⼀种标准化的语⾔,它使得存储、更新和存取信息更容易。MySQL主要特点是快速、健壮和易⽤。MySQL的官⽅发⾳是“My Ess Que Ell”(不是MY-SEQUEL)。⽬前MySQL的最新版本是5.0,MySQL的⽹址是:sql,MySQL的标志是⼀个⼩海豚。见图-1。
图-1 Mysql 标志
MySQL的技术特点:
1.它使⽤的核⼼线程是完全多线程,⽀持多处理器。
2.有多种列类型:1、2、3、4、和8字节长度⾃有符号/⽆符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型。
3.它通过⼀个⾼度优化的类库实现SQL函数库并像他们能达到的⼀样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞。4.全⾯⽀持SQL的GROUP BY和ORDER BY⼦句,⽀持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同⼀查询中混来⾃不同数据库的表。
5.⽀持ANSI SQL的LEFT 0UTER JOIN和ODBC。
6.所有列都有缺省值。你可以⽤INSERT插⼊⼀个表列的⼦集,那些没⽤明确给定值的列设置为他们的决省值。
7. MySQL可以⼯作在不同的平台上。⽀持C、C++、Java、Perl、PHP、Python和TCL API。
MaxDB是2003年SAP公司和MySQL AB公司合作之后SAP DB新的名称。MaxDB是⼀款重量级的、获得SAP R/3认证,适宜于联机事务处理和联机分析处理等多种业务类型的⾼可⽤性、⾼可靠性和极具伸缩性的数据库,⽀持⼤容量的⽤户和并发业务操作,采⽤多线程多进程的服务器设计,⽀持多处理器的应⽤,并通过集和热部署提供⾼可靠性,⽀持TB级的海量数据,⽀持企业级的数据同步和复制等复杂应⽤。
2. PostgreSQL
PostgreSQL是⼀种运⾏在Unix和Linux操作系统(在NT平台借助Cygnus也可以运⾏)平台上的免费的开放源码的关系数据库。最早是由美
国加州⼤学伯克利分校开发的,开始只是作为⼀个演⽰系统发表,但是随着时间的推移,逐步分发,得到很多实际的应⽤,才逐步流⾏起来。PostgreSQ 的⽹址是/,最新版本是2005年10⽉4⽇发布的8.0.4。PostgreSQL的官⽅发⾳是:Post-gres-Q-L。 PostgreSQ的标志是⼀个⼤象,见图-2。
 图2 PostgreSQL 标志
PostgreSQL的技术特点:
1. ⽀持SQL。作为关系数据库,它⽀持SQL89标准也⽀持部分SQL92⼤部分功能。
2. 有丰富的数据类型。许多数据类型是⼀些商业数据库都没有提供的。
3. ⾯向对象。它包含了⼀些⾯向对象的技术,如继承和类。
4. ⽀持⼤数据库,它不同于⼀般的桌⾯数据库,能够⽀持⼏乎不受限制⼤⼩的数据库,⽽且性能稳定。
5. ⽅便集成web,提供⼀些接⼝⽅便 PHP,Perl等语⾔操作数据库。
6. 事务处理。相对⼀些其他免费数据库如MySQL,他提供了事务处理,可以满⾜⼀些商业领域的数据需要。
7. PostgreSQL运⾏速度明显低于MySQL。因为MySQL使⽤了线程,⽽PostgreSQL使⽤的是进程。在不同线程之间的环境转换和访问公⽤的存储区域显然要⽐在不同的进程之间要快得多。
3. Firebird
2000年7⽉,Borland(即现在的Inprise)公司公布了其数据库产品Interbase的源代码。Firebird数据库就是从该数据库中派⽣出来的。当时,Interbase是与客户/服务器版本的Delphi产品捆绑在⼀些销售的。现在,Interbase已经变成了⼀只开放源码中的“ ⽕鸟”。 Firebird ⽹址是firebird.sourceforge/ ,最新版本是2005年8⽉5⽇发布的1.5.3。的标志是⼀只“⽕鸟”,见图-3。
 图-3 Firebird 标志
Firebird的技术特点
Firebird相对MySQL和PostgreSQL来说⽐较⼩,其RPM版本只有3.0MB。这也使其可以称得上是理想的“嵌⼊式数据库”,可⽤于与其它应⽤程序服务器和应⽤程序捆绑。Firebird具有⼤部分成熟数据库所具有的功能,⽐如⽀持存储过程、SQL兼容等。如果⽤户有使⽤DB2或PostgreSQL的经验,就会发现Firebird与它们的语法⾮常相似,数据类型和数据处理⽅式也很类似。 Firebird的设计思想是⼩型、快速和最⼩化的管理。这对于需要⼀个数据库⽤于存储数据,但⼜不想花太多时间来调整数据性能的开发⼈员很适⽤。实际上在很多情况下,我们并不需要存储程序或复杂的表之间的关联。这时会发现Firebird在⼤⼩和功能之间到了⼀个理想的平衡点。
现在有两个版本的Firebird服务器软件可供下载,分别是Firebird Super Server和Firebird Classic Server。简单来说,⼆者的区别在于设计的⽅法不同。Super Server使⽤线程同时为多个客户连接提供服务,⽽Classic Server使⽤的则是Interbase的⽅法,采⽤为每个连接提供⼀个独⽴服务器进程的⽅式。如果想对⼆者的区别有更多的了解,可查看 www.ibphoenix/main.nfs?a=ibphoenix&
page=ibp_ss_vs_classic。对于“嵌⼊式数据库”的⽤户,这两个版本之间没有太⼤的区别。从理论上讲,如果应⽤程序的⽤户很多,那么Super Server将是⼀个较好的选择。
4. mSQL
mSQL(mini SQL)是⼀个单⽤户数据库管理系统,个⼈使⽤免费,商业使⽤收费。由于它的短⼩精悍,
使其开发的应⽤系统特别受到互联⽹⽤户青睐。mSQL(mini SQL)是⼀种⼩型的关系数据库,性能不是太好,对SQL语⾔的⽀持也不够完全,但在⼀些⽹络数据库应⽤中是⾜够了。由于mSQL较简单,在运⾏简单的 SQL语句时速度⽐MySQL略快,⽽MySQL在线程和索引上下了功夫,运⾏复杂的SQL语句时⽐mSQL,PostgreSQL等都要快⼀些。 MSQL的⽹址是:www.hughes.au ,最新版本是2005年5⽉8⽇发布的3.7。MSQL的标志是⼀个⿅。见图-2。
图4 mSQL 标志
mSQL的技术特点:
安全性⽅⾯,mSQL通过ACL⽂件设定各主机上各⽤户的访问权限,缺省是全部可读/写。mSQL缺乏 ANSI SQL 的⼤多数特征,它仅仅实现了⼀个最最少的API,没有事务和参考完整性。mSQL与Lite(⼀种类似C的脚本语⾔,与分发⼀起发⾏)紧密结合,可以得到⼀个称为 W3-mSQL的⼀个⽹站集成包,它是JDBC、ODBC、Perl和PHP API。
php远程连接mysql数据库嵌⼊式数据库
嵌⼊式数据库的名称来⾃其独特的运⾏模式。这种数据库嵌⼊到了应⽤程序进程中,消除了与客户机服务器配置相关的开销。嵌⼊式数据库实际上是轻量级的,在运⾏时,它们需要较少的内存。它们是
使⽤精简代码编写的,对于嵌⼊式设备,其速度更快,效果更理想。嵌⼊式运⾏模式允许嵌⼊式数据库通过 SQL 来轻松管理应⽤程序数据,⽽不依靠原始的⽂本⽂件。嵌⼊式数据库还提供零配置运⾏模式,这样可以启⽤其中⼀个并运⾏⼀个快照。
5. Berkeley DB
像MySQL这类基于C/S结构的关系型数据库系统虽然代表着⽬前数据库应⽤的主流,但却并不能满⾜所有应⽤场合的需要。有时我们需要的可能只是⼀个简单的基于磁盘⽂件的数据库系统。这样不仅可以避免安装庞⼤的数据库服务器,⽽且还可以简化数据库应⽤程序的设计。Berkeley DB正是基于这样的思想提出来的。官⽅⽹址是:www.sleepycat/ ,最新版本是2005年8⽉5⽇发布的4.3。的标志是⼀只“猫”,见图-4。
图5 Berkeley DB 标志
Berkeley DB的技术特点:
Berkeley DB是⼀个开放源代码的内嵌式数据库管理系统,能够为应⽤程序提供⾼性能的数据管理服务。应⽤它程序员只需要调⽤⼀些简单的API就可以完成对数据的访问和管理。与常⽤的数据库管理系统(如MySQL和Oracle等)有所不同,在Berkeley DB中并没有数据库服务器的概念。应⽤程序不需
要事先同数据库服务建⽴起⽹络连接,⽽是通过内嵌在程序中的Berkeley DB函数库来完成对数据的保存、查询、修改和删除等操作。
Berkeley DB为许多编程语⾔提供了实⽤的API接⼝,包括C、C++、Java、Perl、Tcl、Python和PHP等。所有同数据库相关的操作都由Berkeley DB函数库负责统⼀完成。这样⽆论是系统中的多个进程,或者是相同进程中的多个线程,都可以在同⼀时间调⽤访问数据库的函数。⽽底层的数据加锁、事务⽇志和存储管理等都在Berkeley DB函数库中实现。它们对应⽤程序来讲是完全透明的。俗话说:“⿇雀虽⼩五脏俱全。”Berkeley DB函数库本⾝虽然只有300KB左右,但却能够⽤来管理多达256TB的数据,并且在许多⽅⾯的性能还能够同商业级的数据库系统相抗衡。就拿对数据的并发操作来说,Berkeley DB能够很轻松地应付⼏千个⽤户同时访问同⼀个数据库的情况。此外,如果想在资源受限的嵌⼊式系统上进⾏数据库管理,Berkeley DB可能就是惟⼀正确的选择了。
Berkeley DB作为⼀种嵌⼊式数据库系统在许多⽅⾯有着独特的优势。⾸先,由于其应⽤程序和数据库管理系统运⾏在相同的进程空间当中,进⾏数据操作时可以避免繁琐的进程间通信,因此耗费在通信上的开销⾃然也就降低到了极低程度。其次,Berkeley DB使⽤简单的函数调⽤接⼝来完成所有的数据库操作,⽽不是在数据库系统中经常⽤到的SQL语⾔。这样就避免了对结构化查询语⾔进⾏解析和处理所需的开销。
6. SQLite
SQLite 是 D. Richard Hipp ⽤ C 语⾔编写的开源嵌⼊式数据库引擎。它是完全独⽴的,不具有外部依赖性。它是作为 PHP V4.3 中的⼀个选项引⼊的,构建在 PHP V5 中。SQLite ⽀持多数 SQL92 标准,可以在所有主要的操作系统上运⾏,并且⽀持⼤多数计算机语⾔。SQLite 还⾮常健壮。其创建者保守地估计 SQLite 可以处理每天负担多达 100,00 次点击率的 Web 站点,并且 SQLite 有时候可以处理 10 倍于上述数字的负载。SQLite 的⽹址是,最新版本是2005年9⽉24⽇发布的3.2.7 。SQLite的标志是⼀只⽻⽑,见图-5。
图6 SQLite标志
SQLite的技术特点:
SQLite 对 SQL92 标准的⽀持包括索引、限制、触发和查看。SQLite 不⽀持外键限制,但⽀持原⼦的、⼀致的、独⽴和持久 (ACID) 的事务(后⾯会提供有关 ACID 的更多信息)。这意味着事务是原⼦的,因为它们要么完全执⾏,要么根本不执⾏。事务也是⼀致的,因为在不⼀致的状态中,该数据库从未被保留。事务还是独⽴的,所以,如果在同⼀时间在同⼀数据库上有两个执⾏操作的事务,那么这两个事务是互不⼲扰的。⽽且事务是持久性的,所以,该数据库能够在崩溃和断电时幸免于难,不会丢失数据或损坏。SQLite 通过数据库级上的独占性和共享锁定来实现独⽴事务处理。这意味着当多个进程和线程可以在同⼀时间从同⼀数据库读取数据,但只有⼀个可以写⼊数据。在某个进程或线程
向数据库执⾏写⼊操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发⽣。
总结:⽬前的开源数据库还不能在功能和处理能⼒⽅⾯追上商业级产品,但价格的侵蚀⼒⽆法回避,开源数据库迅速增长的市场份额甚⾄让数据库领域的三巨头,Oracle、IBM、微软都感到忐忑不安。开源数据库的⽤户在增长,并正在被越来越多的⽤户所采⽤。在嵌⼊式数据库领域,开源数据库优势更加明显。分析师称开放源码正在迅速被数据库技术所采⽤。开放源码“从2000年被怀疑到2005年已经发展成为全球的主流技术”。低成本甚⾄免费的开源数据库时代即将来临。
=============
将你的⽹站从MySQL改为PostgreSQL
原著:Nathan Matias 翻译:处处
我的站点最初是采⽤PHP驱动,由MySQL数据库⽀持的⽅案,这在当时是⼀个明智的⽅案。在2001年夏天,我将我的数据库换成了PostgreSQL(有时也简称为Postgres)。
这个教程分为两部分,第⼀部分讲述了我进⾏这种转换的动机,并⼀步步地解释了如何将已存在有MySQL的数据转换到Postgres中。第⼆部分将会解释如何根据新的数据库系统对PHP进⾏相应的调整。
转换的动机
我第⼀次了解Postgres是在PHPBuilder⽹站的⼀篇⽂章中。这篇⽂章将Postgres和MySQL进⾏了⽐较,当时我正在使⽤ MySQL。但是,当我阅读了这篇⽂章后,我对Postgres着了迷 -- 但是当时我还没有想到对我的⽹站进⾏重新的设计。
我继续使⽤MySQL,因为我的主机提供商只能提供MySQL的⽀持,这是我所⽆法改变的。直到有⼀天,主机提供商的主机崩溃了。我⽴即换了⼀个主机提供商,与原来的那个相⽐,新的主机提供商有很多不同,他们在安全性和稳定性⽅⾯对我作出了更多的承诺。新公司试图说服我使⽤Postgres,因为 Postgres要⽐MySQL来得更稳定,但是我当时没有接受这个建议,因为我的⽹站已经根据MySQL完成了全部的编码⼯作。他们只好专门为我的站点安装了MySQL。于是问题开始了。
我的第⼀个⼯作是将旧服务器上的MySQL的数据拷贝到新的主机上。⾸先,我将已有的数据dump到⼀个SQL⽂件中,然后在新的主机上导⼊这个SQL⽂件。在处理这个数千⾏的⽂件时,MySQL迅速地崩溃了。重启MySQL后,其中⼤概只有⼀半数据成功地导⼊了,⽽且MySQL只能间歇性地⼯作。最后,他们不得不删除了已经导⼊的信息让我再试⼀次。MySQL再次崩溃。这种情况重复了好⼏次,直到最终我决定将我的SQL⽂件分割成⼏块。我不得不⼜试了⼏次,最后终于将绝⼤多数的数据都成功地导⼊到新的MySQL服务器中。⼀切都好了,我总算松了⼀⼝⽓。
在下⾯的⼏个⽉中,MySQL⼏乎每两周都要崩溃⼀次,其中最惨痛的⼀次是在2001年6⽉底。这⼀次,存储在MySQL中的数据完全被毁坏了。我有⼀个 SQL的备份⽂件,但是因为上次向MySQL中导⼊⼤量数据的痛苦的经历,这⼀次我再也不想通过这个备份恢复数据了。这时,公司再次建议我对我的⽹站进⾏转向,使⽤Postgres。由于MySQL的失败,最终我接受了这个建议。
将数据从MySQL转移到Postgres中
将数据从MySQL转移到Postgres是⼀个不⼤的挑战,因为Postgres⽐MySQL⽀持了更多的SQL的标准格式,在POstgres中直接使⽤SQL 的dump结果是不可能的。但是,SQL语法相当相似,因此对于我来说,这并没有花费太多的时间。
对MySQL的Dump结果进⾏转换
⾸先,要求你的主机提供商为你的帐号建⽴⼀个数据库。和MySQL数据库⼀样,Postgres的数据库也由⼀系列包含实际数据的数据表组成。然后,使⽤ mysqldump命令为你的MySQL数据库做⼀个dump⽂件。
mysqldump -u username -p databasename >
使⽤FTP将整个dump⽂件下载下来。现在在你的计算机上有了这个SQL⽂件,你可以将其转换成Post
gres可以导⼊的⽂件。
⾸先,从dump⽂件中剪切所有的MySQL的CREATE TABLE查询,并将其粘贴到⼀个单独的⽂本⽂件中。下⼀步是使⽤Postgres可以理解的语⾔重新对数据表进⾏定义。
Postgres建⽴表的SQL和MySQL⾮常类似,但不完全⼀样。下⾯是⼀个例⼦:
CREATE TABLE practicetable
{
someID SERIAL,
time TIMESTAMP DEFAULT now(),
name VARCHAR(50),
address VARCHAR(50),
city VARCHAR(50),
state VARCHAR(2),
country VARCHAR(3) DEFAULT 'USA',
postlcode VARCHAR(15),
age smallint,
lattitude real,
longitude real,
somebool boolean,
message textitem
};
在⼀个Postgres的表定义中,字段名后⾯必须跟着字段类型。在上⾯的例⼦中我们给出了⼀些最普通的字段类型,你还可以在有关Postgres数据类型的⽂档中到全部的字段类型的列表。对于不同的任务,Postgres在字段类型⽅⾯有多种选择,并可以存储各种类型的数据,从Internet地址到货币信息到⼏何对象的定义。这⼉简要地介绍最常⽤的⼏种数据类型。
SERIAL类型的字段和MySQL中的⾃增唯⼀ID等价。当你在你的数据表中定义了⼀个SERIAL类型的列后,SERIAL的⾃增功能会被⾃动添加到数据库。当⾃增功能不能适应实际需求时,我们可以⾃定义唯⼀ID的逻辑。从MySQL向Postgres转输数据时,默认的功能已经⾜够了。
和字⾯上的意义⼀样VARCHAR类型是⼀个可变长度的⽂本字段。字段的长度由括号中的数值定义。例如,VARCHAR(5)定义了⼀个最多可包含5个字符的⽂本字段。
SMALLINT、INT和BIGINT⽤来定义整型字段。SMALLINT字段可存储数值范围为-32768到+32767(实际的范围可能会稍微受到你的计算机类型的影响,上⾯的范围适⽤于最普通的系统)。INT字段可存储数值范围为-2147483648到+2147483647。⽽BIGIN字段类型可存储任何更⼤的整数,它没有范围的限制。
REAL字符类型是⼀个包含⼗进制⼩数的实数。它可以精确到⼩数点后六位。DOUBLE PRECISION字段与此相类似,但是它可以精确到⼩数点后15位。
BOOLEAN字段是真或假、1或0。这和MySQL中相似。
TIMESTAMP字段和MySQL中的情况类型。每次记录更新时,timestamp被更新为当前的⽇期和时间。Postgres的时间字段还可以包含时区信息。有关Postgres时间数据的更复杂的应⽤,请参看PostgreSQL⽂档的⽇期和时间。
建⽴数据表
当你使⽤SQL⽂件在Postgres中建⽴数据表时,请检查在每⼀个CREATE TABLE查询的最后是不是都以分号结束 - 这对于Postgres是不可省略的。使⽤telnet这样的⼯具连接到你的Web主机,然后⽤下⾯的⽅法建⽴数据表。
⾸先,⽤⼀个⽂本编辑器打开你的表定义⽂件。然后登录到你的主机,并输⼊psql运⾏Postgres交互终端。默认的⽤户论证⽅式是使⽤你的 telnet/FTP⽤户名作为你的Postgres帐号。这使得不需要你输⼊⽤户名和⼝令,Postgres就能⾃动鉴别你的⾝份。你的Web主机也许不是采⽤的这种⽅式,在这种情况下,你需要为psql程序带⼊参数:psql -d databasename -U username -W。-d⽤来指定数据库,-U指定⽤户名,⽽-W要求psql提⽰你输⼊⼀个⼝令。
当你成功地运⾏了psql以后,将每个CREATE TABLE查询单独地粘贴到psql中并按回车键。如果在你的SQL语句中有错误,psql会给出
相应提⽰。通过逐⼀地加⼊每⼀个表,你会得到每⼀个表的调试信息,这样做起来相当简单。
如果,在你输⼊了表的定义之后,你发现遗漏了⼀两个字段,有两种⽅法能解决这个问题。你可以使⽤ALTER TABLE命令,或者是使⽤DROP TABLE删除这张表,然后重新⽣成。如果你使⽤第⼆种⽅法,你会看到⼀个警告以验证你是不是真的想要删除表。
要使⽤DROP TABLE命令,只需要输⼊DROP TABLE practicetable;。这会删除我们刚才定义的表。但是当你对这个表重新进⾏定义时,你会发现⼀个错误。这是因为在删除⼀个表时并不相应地删除这个表中SERIAL类型字段的序列。这些遗留下来的序列会在你重建表时引起错误。要解决这个问题,你必须在删除表之前使⽤DROP SEQUENCE sequencename;删除相应的序列。⽽且有件很讨厌的事,那就是序列名并不就是SERIAL列的名字。当你定义⼀个SERIAL类型的字段时,Postgres会⾃动⽣成这样的序列名:tablename_colname_seq。在现在的这种情况下,DROP SEQUENCE 语句将会是这样的:DROP SEQUENCE practicetable_someID_seq;。现在你就可以删除这张表并重新⽣成它了。
在添加完这些表之后,你可以输⼊z对这些表进⾏复查。⽽输⼊q将会退出psql。现在剩下来的就是准备输⼊到Postgres中的数据了。
处理Dump⽂件
因为MySQL保留了绝⼤多数的SQL语⾔的标准,从⼀个SQL的dump⽂件中导出实际数据并不是太困难的。然⽽,在我们使⽤Postgres对这个⽂件进⾏处理前,我们还是需要作⼀些编辑⼯作。
对于数据记录,在MySQL和Postgres之间的主要区别是对引号的处理。在Postgres中,字符串变量(包含⽂本的变量)必须由两个单引号引出。⽽在MySQL中,你还可以使⽤双引号,但是幸运的是,在mysqldump程序中程序中使⽤的是单引号,这刚好与Postgres⼀致。然
⽽,MySQL和Postgres还有⼀个地⽅不同,那就是对字符串中出现的引号的处理。在MySQL中使⽤"",⽽在Postgres中使⽤"。使⽤你的⽂本编辑器并通过替换功能将其中所有的""替换为"。有趣的是,Postgres和MySQL都使⽤'来表⽰单引号,这使得我们免去了⼀个⿇烦。
导⼊到Postgres中
当你整理好SQL dump⽂件后,将这个⽂件上载到你的Web主机中,就如同你当初建表那样登录到主机,转到SQL dump⽂件存放的⽬录。启动psql,不过这次你必须使⽤另⼀个命令⾏参数:psql -,这⼉的就改为你的SQL dump⽂件的⽂件名。这个命令会将全部的SQL⽂件导⼊到适当的Postgres数据表中。在此之前,你也许还需要其它的⼀些命令⾏参数以使得psql 可以对你的⾝份进⾏验证。如果发⽣了错误,psql会告诉这是由什么引起的。到⽂件中的这⼀部分,到问题并⼿⼯解决它。我当初是没有遇到任何问题,我差不多准备结束⼯作了。但是,很快我注意到另⼀个问题。
在我开始使⽤我的新的Postgres驱动的站点时,我偶然地发现MySQL和Postgres之间另⼀个不兼容的地⽅。SERIAL类型的⾃增字段所使⽤的Postgres的序列,它从1开始,并在每次有⼀个SERIAL类型字段的记录插⼊时加⼀。然⽽,在我导⼊MySQL的dump⽂件时,这个dump⽂件中的SQL将这个值定义为整型主键。我当时的情况是,我有⼀个到唯⼀主键已经到了60,⽽序列仍然是1。于是我的每⼀个插
⼊命令都没法成功,因为根据序列产⽣的不是唯⼀ID。我当时⽤了⼀个很笨的⽅法解决这个问题,那就是运⾏了60次INSERT语句以将序列调整为适当的值,但是后来有⼀个熟悉Postgres的朋友教给我⼀个好⽅法。下⾯就是他所讲的⽅法:
使⽤telnet这样的终端程序连接到你的主机。然后启动psql程序。⾸先,确定表中ID的最⼤值。这可以⽤SELECT fieldname FROM tablename WHERE fieldname=MAX(fieldname);。然后使⽤DROP SEQUENCE table_colname_seq;删除有问题的序列,这⼉table是表名,⽽colname是SERIAL字段的列名。然后使⽤CREATE SEQUENCE table_colname_seq START 61;重建序列,当然这⼉的61应根据你的实际情况进⾏修改。
安装⼀个图形界⾯的⼯具
当我成功地将数据导⼊到Postgres后,我还需要让我的不懂Unix的伙伴能够操作数据库中的数据。当初的MySQL我是使⽤的phpMyAdmin,这是⼀个很好⽤的⼯具,它能够在线的显⽰和编辑数据库。幸运的是,已经有了“Postgres版本”的phpMyAdmin,那就是phpPgAdmin。
phpPgAdmin的安装⾮常简单。⾸先,从phpPgAdmin⽹站下载最新的版本,然后将其放到你的Web主机上的你所能访问的地⽅。使⽤telnet这样的⼯具登陆到主机。到⽂件所在的⽬录,输⼊tar -xzvf 对程序进⾏解压(这⾥只是举个例⼦,你的⽂件名可能不⼀样)。
下⾯⼀件事就是将解压⽣成的新的⼦⽬录移到合适的地⽅,并阅读README⽂件。
最后,⽤你的Web主机上的⽂本编辑器打开config.inc.php。这个⽂件中包含了对phpPgAdmin的配置。将这个⽂件配置好你就可以通过浏览器使⽤PhpPgAdmin了,它会提⽰你输⼊⽤户名并登录,通过这个程序你管理你的数据库将变得⾮常简单。
结语
与MySQL相⽐,Postgres更加稳定,更加可靠,可以应付更⼤的数据。按照上⾯的提⽰,你可以使⽤SQL的dump⽂件将数据从MySQL转到 Postgres。如果在这个过程中你遇到什么困难,从Postgres⽹站你可以到⼀些⾮常有⽤的⽂档资源。
===========================
MSDE
MSDE全称是MS SQL Server Desktop Engine,俗称MSSQL的桌⾯版,它是⼀个基于 SQL Server 核⼼技术构建的数据引擎。MSDE 2000⽀持单处理器和双处理器,是⾯向⼩型应⽤程序桌⾯扩展的可靠的存储引擎和查询处理器。MSDE与SQL Server完全兼容,它只⽀持数据库容量2G,并发⽤发不超5个,没有图型管理⼯具,但是免费的。
SQL Server系列产品具有各种发⾏版本,⽤以满⾜在不同的环境下对处理的数据量、并发⽤户数和硬件的不同要求。⼀般来说,MSDE适合在并发⽤户数⼩于5 ⼈,数据量低于2GB的情况下使⽤。当数据量和并发⽤户数超过上⾯的配额的时候,SQL Server成为了更好的选择。由于MSDE与SQL Server完全兼容,开发⼈员可以使⽤同样的数据访问语⾔在规模相对较⼩的MSDE数据库系统和规模较⼤的SQL Server数据库系统之间实现⽆缝转换,并且,当所在组织的规模扩⼤后对数据库系统的功能和性能提出新的需求时,则可以在不修改现有数据库应⽤程序中的任何代码的情况下,将它完全移植到基于SQL Server的平台上运⾏。
MSDE不包含图形界⾯,是通过命令⾏管理程序osql来连接的。
MSDE为多个 Microsoft 产品(包括 Microsoft Visual Studio 和 Microsoft Office Developer Edition)的组件提供。它的版本和 SQL Server 版本之间有直接关系。MSDE 1.0 基于 SQL Server 7.0;MSDE 2000 基于 SQL Server 2000。虽然是微软的免费数据库,但MSDE不适⽤⼤量⽤户访问。
==================
哪⼀个分布式 DB2 9.5 版本适合您?
Paul Zikopoulos (paulz_ibm@msn), 数据库专家, IBM

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。