当前位置:文档之家› 开源数据库的预研报告(一)

开源数据库的预研报告(一)

开源数据库的预研报告(一)1概述 (3)1.1开源数据库与商业数据库 (3)1.2开源数据库情况 (4)1.3相关知识 (5)2两开源数据库的比较 (5)2.1基本情况 (6)2.2SQL语法与oracle比较 (9)2.2.1类型 (10)2.2.2语法和函数 (12)2.2.3数据库连接 (13)2.2.4开发常用语法 (14)3Windows下的安装 (15)3.1数据库安装 (15)3.1.1MariaDB (15)3.1.2PostgreSQL (20)3.2客服端安装 (25)3.2.1MariaDB (25)3.2.2PostgreSQL (26)4研究结论 (27)4.1数据库选型角度 (27)4.2数据库移植开发角度 (28)1概述1.1开源数据库与商业数据库开源数据库与商业数据库之差异如下:1、性能方面差距在30%以内,经验丰富的开源库DBA可以让差距变得越来越少,使的开源数据库的性能逼近商业数据库。

开源数据库性能低于商业数据库的原因是,商业数据库有商业团队为性能优化服务,提供优化的解决方案。

开源数据数据库只能依赖开源社区的贡献和DBA本人的经验。

在项目中数据库的环境是千差万别的,能被完全复制的调优方案是不多见的。

2、操作简便方面,尽管目前开源数据库与商业数据在安装方面都做到了非常简单,特别在windows操作系统下,基本上用鼠标点点就可以完成安装。

但在数据库维护方面,用工具操作数据库的自动化方面,开源数据库与商业数据库比还是有差距的。

这可能是因为开源数据库一般情况下不是一个完整的应用解决方案,要形成一套完整的方案一般都需要第三方系统和工具的支撑,所以第三方企业或个人贡献的产品也都是基于其自身的场景开发的。

3、操作系统方面,虽然开源与商业数据库都支持windows操作系统安装,但开源数据库大部分插件、高性能和高可靠工具和方案基本上是在开源操作系统上完成,如果选择开源数据库那么主体方案的操作系统就需要选用Linux开源操作系统更为适合。

4、数据库系统版本方面,开源数据库系统版本的延续性是比较差的,上下两个版本之间功能差异可能非常大,不同版本之间做集群,在开源数据库也是非常忌讳的。

总而言之,开源数据库是一个需要大家去研究探索的数据库,而商业数据库是一个需要大家投入更多时间去学习掌握的数据库。

1.2开源数据库情况在当前信息技术领域中,开放数据库分为关系型数据库和非关系型数据库。

开源关系数据库种类也非常多,国外和国内都有,在开源方面做的比较全面的数据库主要有MySQL和PostgreSQL。

MySQL被公认为是最流行的开源关系型数据库。

PostgreSQL被公认为是最先进的开源关系型数据库,是oracle的“开源版数据库”。

MySQL被oracle 收购后增加了两个主要的开源的分支,一个是MariaDB,由MySQL的创始人Michael Widenius主导开发,特点主要是在MySQL数据库方面进行改进;另一个PerconaDB,由原为MySQL开发存储引擎的人员组织开发,主要负责数据引擎开发如XtraDB退换innoDB,推出Percona Server数据库。

所以后面开源数据库的比较中,只对MySQL 和PostgreSQL比较,因为MySQL与其分支功能区别不大。

1.3相关知识MySQL和PostgreSQL相关学习资料:2两开源数据库的比较MySQL和PostgreSQL都是开源关系型数据库管理系统,两者的解决方案都在商业和非商业应用系统中应用,MySQL多用于网站开发,PostgreSQL银行业、金融行业应用比较多,都被认为是商业数据库管理系统有力的竞争对手。

MySQL被认为是速度最快的最流行的数据库系统,PostgreSQL被认为是稳定的、最遵循标准的最先进的数据库系统;MySQL由于他的快速和使用简单,在软件系统应用中比较流行;PostgreSQL主要开发者都有oracle和SQL Server的背景,功能比较突出。

MySQL和PostgreSQL版本在不断发生变化,MySQL功能越来越先进,PostgreSQL的速度也在大大的提高。

本文使用MySQL5.7和PostgreSQL9.4,目前来说都是比较新的版本。

2.1基本情况下有较高的性能优势,但在大并发多核下又有性能的弱势在单机模式下性能比MySQL差。

存储非常多的存储引擎,核心特性依赖存储引擎,不同存储引擎有自身的特色MyISAM(ariaDB)、InnoDB(XtraDB)内置一个存储引擎复制和高可用支持异步和半同步的复制方法,复制功能内置,多种集群模式,开源的集群软件比较少支持异步、半同步和完全同步复制、支持流复制,内置复制功能,丰富的三方集群工具事务系统有REDO日志,数据操作时,要在数据库和回滚段中记录数据,在REDO日志中记录操作信息,做到新版本与就版本分离,不要清理垃圾,查询只需要扫描索引,速度快没有REDO,不应为回滚段破坏导致数据库不能重启,回滚可以快速完成,wal日志比较简单连接线程模式,单机可以支持非常多的连接进程模式,单机支持的连接数比较少,需要连接池进行扩展分区支持RANGE、LIST、HASH、KEY分区通过表继承实现分区,父子表可以结构不同,也可以索引不同,比较灵活,但对变量SQL不能进行分区表裁剪,分区操作比较复杂验证身份验证功能是完全内置、不支持操作系统认证、PAM认证,不支持LDAP以及其它类似的外部身份验证功能。

支持操作系统认证、Kerberos认证、Ident 的认证、LDAP认证、PAM认证存储过程与触发器存储过程与触发器功能有限,编写存储过程与触发器的语言比较少,由于触发器是数据引擎级别的,容易引起不触发的情况支持多种语言写存储过程和触发器(Pl/pgsql、perl、python、C等等)索引索引功能比较有限,是索引组织表,数据顺序存储,按主键访问;全表扫索引功能强大,支持堆表,支持函数索引、位图索引。

描慢,主键不能大,中间插入数据,易导致索引分裂;索引功能与存储引擎有关Sequence不支持支持物化视图不支持支持With语句不支持,不能使用递归支持分析函数不支持支持2.2SQL语法与oracle比较MySQL和Postgresql同oracle语法结构差异是比较小的,差异主要来源于数据库提供的功能、数据库字段类型、系统提供的函数,这些也是导致不同的应用系统迁移成本不一样的原因,下图表是功能差异比较图。

Postgresql1104833功能项21241053接下来的章节中对常用的类型和函数进行比较,详细情况未来在系统的迁移方案中完善。

2.2.1类型Postgresql日期字段分DATE、TIME、timestamp4INTEGER Int integer5NUMBER(,)Tinyint、smallint、mediumint、int、bigint Smallint、integer、bigint\ numeric6BLOB longblob bytea 7FLOAT FLOAT/Doubledouble8REAL FLOAT/Doublereal9Long\CLOBtext text10没有几何类型有几何类型有几何类型Postgresql几何类型比MySQL更丰富2.2.2语法和函数5条数限制ROWNUM limit limit6日期时间缺省SYSDATE CURRENT_TIM ESTAMPCURRENT_TIMES TAMP7时间转换TO_DATE('2005102714:56:10','YYY YMMDD HH24:MI:SS')str_to_date('2013-01-01','%Y-%m-%d')TO_TIMESTAMP(CURRENT_TIMES TAMP ,'YYYY-MM -DD-HH24-MI-S S')8字符串转数值to_number('123')cast('123'as signed integer)to_number('123',’9’)9全文检索无有,功能弱有,功能强2.2.3数据库连接连接串:第一种:Pg:Dsn=PostgreSQL35W;Server=127.0.0.1;Port=5432;Database=MytestDb;Uid=postgres;Pwd=12345 6;MySQL:Dsn=tttest;Server=127.0.0.1;Port=3306;Database=MytestDb;Uid=root;Pwd=123456;第二种:Pg:Driver={PostgreSQL ODBC Driver(ANSI)};Server=192.168.2.136;Port=5432;Database=MytestDb;Uid=postgres;Pwd=123456; mysql:Driver={MariaDB ODBC 1.0 Driver};Server=192.168.2.136;Port=3306;Database=MytestDb;Uid=root;Pwd=123456;charset=gb 2312;2.2.4开发常用语法类型oracle Mysql Postgresqlinsert INSERT INTOBOOK(bookid,name,price)VALUES INSERT INTO BOOK(bookid,name,price)VALUES('100123','oracleINSERT INTO BOOK(bookid,name,price)VALUES('100123','oracle('100123','oraclesql',54.70)sql',54.70)sql',54.70)update Update BOOK SETname=’MySql sql’WHEREbookid=’123’Update BOOK SETname=’MySql sql’WHEREbookid=’123’Update BOOK SETname=’MySql sql’WHEREbookid=’123’delete Delete from BOOKwherebookid=’123’Delete from BOOKwhere bookid=’123’Delete from BOOKwhere bookid=’123’query Selectbookid,name,price from BOOKwherebookid=’123’Selectbookid,name,pricefrom BOOK wherebookid=’123’Selectbookid,name,pricefrom BOOK wherebookid=’123’注意:表名和字段都是可以使用别名的3Windows下的安装3.1数据库安装3.1.1MariaDB第一步,安装包第二步,进入安装界面第三步,勾选I accept the terms in the License Agreement第四步,选择安装全部组件第五步,设置MariaDB数据库账号root的密码,是否可以远程访问MariaDB数据库,只能从本地连接MariaDB,是否可以新建匿名用户访问MariaDB,MariaDB默认使用UTF8编码。

相关主题