收藏 分销(赏)

Oracle-SQLServer-MySQL-MongoDB数据库比较.doc

上传人:二*** 文档编号:4480964 上传时间:2024-09-24 格式:DOC 页数:25 大小:986KB 下载积分:5 金币
下载 相关 举报
Oracle-SQLServer-MySQL-MongoDB数据库比较.doc_第1页
第1页 / 共25页
本文档共25页,全文阅读请下载到手机保存,查看更方便
资源描述
(word完整版)Oracle-SQLServer-MySQL-MongoDB数据库比较 主流数据库比较 目录 前言 4 1. 数据库安装对硬件的要求 4 1。1. Oracle 4 1.2. SQL Server 5 1。3. MySQL 5 2. 数据类型对比 6 2。1。 Oracle数据类型 6 2.2。 SQL Server 数据类型 7 2。3。 MySQL 数据类型 8 3. 三大关系型数据库比较 10 4。 应用场景 13 4。1. Oracle的一般应用 13 4。2. MySQL的应用场景 14 4.3. SQL Server的应用 14 5. MongoDB-非关系型数据库 14 5。1。 MongoDB的应用场景 14 5.2. MongoDB与MySQL性能比较 15 5.2。1. 测试目的 15 5。2.2。 测试环境 15 5。2.3. 测试结果1:插入速率 15 5。2.4. 测试结果2:插入稳定性 17 5。2。5. 测试结果3:读取性能测试 18 5.2.6。 测试结论 20 5。3.  MongoDB的优势和缺陷 21 5。3。1。 MongoDB的优势 21 5。3。2. MongoDB的缺陷 21 前言 数据库流行度排行榜来自于美国数据库知识网站DB-engines,在本月(2014—10)的榜单中,前三甲依然是Oracle、MySQL和Microsoft SQL Server.前十名中文档型数据库MongoDB和列式数据库Cassandra作为仅有的两个NoSQl数据库分别位列第五和第十名。 下面就对排名前三甲的关系型数据库(Oracle、MySQL、SqlServer)进行一下对比、以及最受欢迎的非关系型MongoDB. 1. 数据库安装对硬件的要求 1.1. Oracle 以Oracle 11g为例,系统是Windows: 硬件要求 配置组件              最低配置 ——-—-——--—-—---—-———--——— —-—-—------—---—-———-----—————-—--— Physical memory (RAM)       1 GB minimum Virtual memory          Double the amount of RAM Disk space            Total: 4。76 GB Video adapter           256 colors Processor             550 MHz minimum                  (On Windows Vista, 800 MHz minimum) 磁盘空间要求   Oracle组件 最低要求 ----——----———-————-———-— -—-—--—---——----—-——-—-—--—--—--——- TEMP Space  200 MB C:\Program Files\Oracle 3。1 MB Oracle Home  2。96 GB Datafiles *   1。60 GB ——-—-———----—-——--—-—-—- ———----—---——-——-——-—----—-——-—-—— Total 4.76 GB 1.2. SQL Server MS SQL Server在安装 SQL Server 2008 R2 的过程中,Windows Installer 会在系统驱动器中创建临时文件。在运行安装程序以安装或升级 SQL Server 之前,请检查系统驱动器中是否有至少 3。6 GB 的可用磁盘空间用来存储这些文件。即使在将 SQL Server 组件安装到非默认驱动器中时,此项要求也适用。 实际硬盘空间需求取决于系统配置和安装的功能。 下表提供了 SQL Server 2008 R2 各组件对磁盘空间的要求: 功能 磁盘空间要求 数据库引擎和数据文件、复制以及全文搜索 711 MB Analysis Services 和数据文件 345 MB Reporting Services 和报表管理器 304 MB Integration Services 591 MB 客户端组件(除联机丛书和 Integration Services 工具以外) 1823 MB SQL Server 联机丛书 157 MB CPU和内存要求 组件 要求 处理器 处理器类型: 最低:AMD Opteron、AMD Athlon 64、支持 Intel EM64T 的 Intel Xeon 和支持 EM64T 的 Intel Pentium IV 处理器速度:最低:1。4 GHz,建议:2.0 GHz 或更快 内存 RAM:最小:1 GB,推荐:4 GB 或更多,最高:64 GB 1。3. MySQL MySQL 体积小、速度快,对硬件配置上基本没有限制。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余。而且它是开源的可以定制的,采用了GPL协议,MySQL的用户可以修改源码来开发自己的Mysql系统。具体的内存和磁盘的大小由用户的需求和配置决定。 以下是MySQL 5。6对Windows系统的一些要求。 MySQL 5.6可以在Windows Vista, Windows 7, Windows 8, Windows Server 2008,以及 Windows Server 2012上运行。支持 32—bit 和 64-bit系统。TCP/IP协议支持. 需要用管理员权限的账户进行安装,否则可能会发生环境参数配置的异常.另外,在windows上安装MySQL还有一些其他要求: Ø 可以读取 .zip文件的工具,以解压分发文件 Ø 硬盘上有足够的空间保证根据你的需求来解包、安装和创建数据库(一般建议至少有200兆字节) Ø 如果你计划通过ODBC连接MySQL服务器,你还需要一个连接器/ODBC驱动程序。 Ø 如果你计划通过.NET连接MySQL服务器,你还需要一个连接器/。NET驱动程序 Ø 如果表需要占用的空间大于4GB,则在NTFS或更新的文件系统上安装MySQL。当创建表时不要忘记使用MAX_ROWS和 AVG_ROW_LENGTH 2。 数据类型对比 对于三大关系型数据库的比较,首先从它们本身的基本数据类型做一个了解: 2.1。 Oracle数据类型 数据类型 参数 描述 char(n) n=1 to 2000B 定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节) varchar2(n) n=1 to 4000 B 可变长的字符串,具体定义时指明最大长度n,这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。 number(m,n) m=1 to 38 n=—84 to 127 可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。 date 无 从公元前4712年1月1日到公元4712年12月31日的所有合法日期,Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒.缺省格式为DD-MON—YY,如07—11月-00 表示2000年11月7日。 long 无 可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。 raw(n) n=1 to 2000 B 可变长二进制数据,在具体定义字段的时候必须指明最大长度n。 Long raw 无 可变长二进制数据,最大长度是2GB. Blob、 Clob、 nclob 无 三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB.LOB有几种类型,取决于你使用的字节的类型。 bfile 无 在数据库外部保存的大型二进制对象文件,最大长度是4GB. 这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。 2。2。 SQL Server 数据类型 数据类型 描述 存储 char(n) 固定长度的字符串。最多 8,000 个字符。 n varchar(n) 可变长度的字符串。最多 8,000 个字符. varchar(max) 可变长度的字符串.最多 1,073,741,824 个字符。 text 可变长度的字符串。最多 2GB 字符数据. nchar(n) 固定长度的 Unicode 数据.最多 4,000 个字符. nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。 nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。 ntext 可变长度的 Unicode 数据.最多 2GB 字符数据。 bit 允许 0、1 或 NULL binary(n) 固定长度的二进制数据。最多 8,000 字节。 varbinary(n) 可变长度的二进制数据.最多 8,000 字节。 varbinary(max) 可变长度的二进制数据。最多 2GB 字节。 image 可变长度的二进制数据。最多 2GB. tinyint 允许从 0 到 255 的所有数字。 1 B smallint 允许从 -32,768 到 32,767 的所有数字。 2 B int 允许从 -2,147,483,648 到 2,147,483,647 的所有数字. 4 B bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 B decimal(p,s) 固定精度和比例的数字。允许从 —10^38 +1 到 10^38 —1 之间的数字。 p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18. s 参数指示小数点右侧存储的最大位数.s 必须是 0 到 p 之间的值。默认是 0。 5—17 B numeric(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。 p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。 s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。 5-17 B smallmoney 介于 -214,748。3648 和 214,748.3647 之间的货币数据. 4 B money 介于 -922,337,203,685,477。5808 和 922,337,203,685,477.5807 之间的货币数据。 8 B datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒. 8 b datetime2 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒. 6-8 b smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 4 b date 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 b time 仅存储时间.精度为 100 纳秒。 3-5 b datetimeoffset 与 datetime2 相同,外加时区偏移。 8-10 b timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新.timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量. sql_variant 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp. uniqueidentifier 存储全局标识符 (GUID)。 xml 存储 XML 格式化数据.最多 2GB。 cursor 存储对用于数据库操作的指针的引用. table 存储结果集,供稍后处理. 2.3. MySQL 数据类型 数据类型 描述 CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 VARCHAR(size) 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。 注释:如果值的长度大于 255,则被转换为 TEXT 类型。 TINYTEXT 存放最大长度为 255 个字符的字符串。 TEXT 存放最大长度为 65,535 个字符的字符串。 BLOB 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。 MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串。 MEDIUMBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。 LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串。 LONGBLOB 用于 BLOBs (Binary Large OBjects).存放最多 4,294,967,295 字节的数据. ENUM(x,y,z,etc.) 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值.如果列表中不存在插入的值,则插入空值。注释:这些值是按照你输入的顺序存储的.可以按照此格式输入可能的值:ENUM('X','Y',’Z') SET 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值. TINYINT(size) —128 到 127 常规.0 到 255 无符号*。在括号中规定最大位数。 SMALLINT(size) —32768 到 32767 常规.0 到 65535 无符号*。在括号中规定最大位数. MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 INT(size) -2147483648 到 2147483647 常规.0 到 4294967295 无符号*.在括号中规定最大位数。 BIGINT(size) —9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 FLOAT(size,d) 带有浮动小数点的小数字。在括号中规定最大位数.在 d 参数中规定小数点右侧的最大位数。 DOUBLE(size,d) 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。 DATE() 日期。格式:YYYY-MM-DD 注释:支持的范围是从 ’1000-01—01’ 到 '9999—12—31' DATETIME() *日期和时间的组合.格式:YYYY—MM—DD HH:MM:SS 注释:支持的范围是从 ’1000—01—01 00:00:00’ 到 '9999—12-31 23:59:59' TIMESTAMP() *时间戳。TIMESTAMP 值使用 Unix 纪元(’1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 '1970—01-01 00:00:01' UTC 到 ’2038—01-09 03:14:07' UTC TIME() 时间。格式:HH:MM:SS 注释:支持的范围是从 '—838:59:59’ 到 ’838:59:59' YEAR() 2 位或 4 位格式的年。 注释:4 位格式所允许的值:1901 到 2155.2 位格式所允许的值:70 到 69,表示从 1970 到 2069. 以上表格分别介绍了三者的数据类型,从对sql语言的支持方面来说,也许它们的共同点多余它们的差异,但是对于一个完整的项目,尤其是对于那些准备同时支持三种数据库的大型项目来说,数据类型的差异是必须要保证三者可以兼容的。 3。 三大关系型数据库比较 首先,从三大关系型数据库的本身架构方面做一下对比: Oracle: Ø 数据文件包括:控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件。所有文件都是二进制编码后的文件 Ø 并行服务器通过使一组结点共享同一簇中的工作来扩展windowns的能力,提供高可用性和高伸缩性的簇的解决方案。如果windowsNT不能满足 需要,用户可以把数据库移到UNIX中 Ø 多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接.操作简便 MySQL: 最大的一个特色,就是自由选择存储引擎。每个表都是一个文件,都可以选择合适的存储引擎。常见的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由于这种开放插件式的存储引擎,比如要求数据库与引擎之间的松耦合关系。从而导致文件的一致性大大降低。在SQL执行优化方面,也就有着一些不可避免的瓶颈。在多表关联、子查询优化、统计函数等方面是软肋,而且只支持极简单的HINT。 SQL Server : Ø 数据架构基本是纵向划分,分为:Protocol Layer(协议层), Relational Engine(关系引擎), Storage Engine(存储引擎), SQLOS。SQL执行过程就是逐层解析的过程,其中Relational Engine中的优化器,是基于成本的(CBO),其工作过程跟Oracle是非常相似的。在成本之上也是支持很丰富的HINT,包括:连接提示、查询提示、表提示 Ø SQL Server只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据 Ø 并行实施和共存模型并不成熟.很难处理日益增多的用户数和数据卷。伸缩性有限 Ø 多用户时性能不佳 其次,对Oracle、SqlServer、MySQL三大主流关系型数据库的授权价格、平台支持、功能、以及性能等方面做了一个详细比较.请参考下表: 数据库比较表: 数据库 MySQL Sql Server Oracle 授权价格 当前,MySQL采用双重授权(Dual Licensed),他们是GPL和MySQLAB制定的商业许可协议.如果你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你可以遵循GPL协议免费使用MySQL.否则,你需要购买MySQLAB制定的那个商业许可协议. Windows $200 Unix或Linux自行安装免费 Unix或Linux第三方安装$200 SQL 2008 标准版:[1CPU 无限用户 R2 版本] ¥31900 [R2 5用户] ¥5500 SQL 2008 企业版:[1CPU 无限用户 R2 版本] ¥143800 [R2 10用户] ¥25400 Oracle 10G//11G 标准版 [10用户] ¥25600 Oracle 10G//11G 标准版 [1CPU无限用户] ¥157600 Oracle 10G //11G企业版 [25用户] ¥213500 Oracle 10G //11G企业版 [1CPU无限用户] ¥276000 平台支持 各种平台,适合Linux 只能运行在Windows平台 支持大多数平台 连接方法 ADO。NET,JDBC,ODBC OLE DB,Tabular Data Stream (TDS),ADO.NET,JDBC,ODBC ODP。NET,Oracle Call Interface (OCI),JDBC,ODBC 支持的语言 Ada,C,C#,C++,D,Eiffel,Erlang,Haskell,Java,Objective—C,OCaml,Perl,PHP,Python,Ruby,Scheme,Tcl .Net,Java,PHP,Python,Ruby,Visual Basic C,C#,C++,Clojure,Cobol,Eiffel,Erlang,Fortran,Groovy,Haskell,Java,JavaScript,Lisp,Objective C,OCaml,Perl,PHP,Python,R,Ruby,Scala,Tcl,Visual Basic 特点 MySQL比较小,易于安装维护和管理,操作简单,最重要的是它是三个中唯一一个开源数据库,但目前也属于Oracle公司的产品了。对于中小型应用都可以支持,最大并发是6000,性能不错。一般php程序比较喜欢用MySQL。 SqlServer是微软的产品,对 。net程序支持比较好,对于一般的应用来说都够用了.基本上。net阵营中很少使用SqlServer以外的数据库产品。 Oracle是Oracle的数据库产品,它体积比较庞大,可以在同一机器上运行多个实例,一般用来开发大型应用(例如分布式) 优缺点 价格 便宜(部分免费) 适中 较贵 容量 使用MyISAM存储引擎,最大表尺寸为65536TB。MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定。 数据库大小524258 TB 文件大小(数据文件)16TB文件大小(日志文件)2TB 无限,根据配置决定 难易度 较易上手,简单快速 容易,图形化的用户界面使得易用性和友好性较强 较难,偏复杂 存储 没有存储过程语言(5.0版本以上支持) 可存储 可存储 备份 不支持热备份 可备份 可备份 数据类型 基本sql数据,不完全支持扩展 大部分sql数据类型以及扩展 标量(scalar)、复合(composite)、引用(reference)、和LOB四种类型 安全性 一般,复杂而非标准 没有获得任何安全证书 Oracle的安全认证获得最高认证级别的ISO标准认证。数据安全级别为C2级(最高级). 性能 使用cpu和内存极少,性能很高,但拓展性稍差 当用户连接多时性能会变的很差,并且不够稳定,并行实施和共存模型并不成熟。 全面,完整,稳定,但一般数据量大,对硬件要求较高 维护 方便简单 比较容易 复杂,工作量大 开发环境 PHP+MySQL+Linux 。net+SqlServer+Windows 适合任何系统与开发语言 其他 使用缺省的ip端口,但是有时候这些ip也会被一些黑客闯入;使用myisam配置,不慎损坏数据库,结果可能会导致所有的数据丢失 没有开放性,安全性和伸缩性也都不高,客户端支持及应用模式 ,是C/S结构,只支持Windows客户,数据不容易恢复 数据库崩溃后回复很麻烦,因为他把很多东西放在内存里;数据库连接要慢些,最好用连接池; 性能测试 在Windows下的性能(秒): 连结时间:0。01364 插入一万条记录:2.80973 更新一万条记录:812。48759 删除一万条记录:184.05414 查询15909条记录(无索引):0.9 而在Linux下MySQL各项数据都要快于SqlServer(在Windows下) 在Windows下的性能(秒): 连结时间:0。28493 插入一万条记录:12.94204 更新一万条记录:50。34521 删除一万条记录:31.28243 查询15909条记录(无索引):10 添加引索后快于MySQL Oracle在linux下的性能,在少量数据时速度低于SqlServer与MySQL,在千万级时速度快于MySQL但低于SqlServer,而超过了亿级时速度最快 注:SqlServer在Windows下的性能、Oracle,MySQL在linux下的性能作比较(还有其他数据库系统,例如DB2,informix等)。结果,在500并发连接以下,SqlServer只比Oracle,MySQL稍弱一点点,比其他数据库系统都强!但到了750就开始拉大距离,上了1000以后所有数据库系统都不行了,只有MySQL还紧紧地追着Oracle,而SqlServer的性能下降的最厉害,到了1200以后,SqlServer成为最后一名,弱于参与测试的所有数据库系统。 另外,Oracle自始至终都是最强悍的,不过MySQL始终追得很紧,平均下来,性能上只是在1000并发连接以后距离才与Oracle拉大。 4. 应用场景 关于“大型数据库",并没有严格的界定,有说以数据量为准,有说以恢复时间为准。如果综合数据库应用场景来说,大型数据库应用有以下特点:海量数据、高吞吐量;复杂逻辑、高计算量,以及高可用性。从这点上来说,Oracle就是比较典型的大型数据库,SQL Server也算是吧。下面分别说明之前三种数据库的应用场景。 4.1. Oracle的一般应用 Oracle的应用,主要在传统行业的数据化业务中,比如:银行、金融这样的对可用性、健壮性、安全性、实时性要求极高的业务;零售、物流这样对海量数据存储分析要求很高的业务.此外,高新制造业如芯片厂也基本都离不开Oracle;电商也有很多使用者,如京东(正在投奔Oracle)、阿里巴巴(计划去Oracle化).而且由于Oracle对复杂计算、统计分析的强大支持,在互联网数据分析、数据挖掘方面的应用也越来越多。 一个典型场景是这样的: 某电信公司(非国内)下属某分公司的数据中心,有4台Oracle Sun的大型服务器用来安装Solaris操作系统和Oracle并提供计算服务,3台Sun Storage磁盘阵列来提供Oracle数据存储,12台IBM小型机,一台Oracle Exadata服务器,一台500T的磁带机用来存储历史数据,San连接内网,使用Tuxedo中间件来保证扩展性和无损迁移.建立支持高并发的Oracle数据库,通过OLTP系统用来对海量数据实时处理、操作,建立高运算量的Oracle数据仓库,用OLAP系统用来分析营收数据及提供自动报表。总预算约750万美金。 4。2. MySQL的应用场景 MySQL基本是生于互联网,长于互联网。其应用实例也大都集中于互联网方向,MySQL的高并发存取能力并不比大型数据库差,同时价格便宜,安装使用简便快捷,深受广大互联网公司的喜爱。并且由于MySQL的开源特性,针对一些对数据库有特别要求的应用,可以通过修改代码来实现定向优化,例如SNS、LBS等互联网业务。一个典型的应用场景是: 某互联网公司,成立之初,仅有PC数台,通过LAMP架构迅速搭起网站框架.随着业务扩张、市场扩大,迅速发展成为6台Dell小型机的中型网站。现在花了三年,终于成为垂直领域的最大网站,计划中的数据中心,拥有Dell机架式服务器40台,总预算20万美金。 4.3。 SQL Server的应用 windows生态系统的产品,好处坏处都很分明.好处就是,高度集成化,微软也提供了整套的软件方案,基本上一套win系统装下来就齐活了。因此,不那么缺钱,但很缺IT人才的中小企业,会偏爱 MS SQL Server 。例如,自建ERP系统、商业智能、垂直领域零售商、餐饮、事业单位等等。 5. MongoDB-非关系型数据库 5.1。 MongoDB的应用场景 对开发者来说,如果是因为业务需求或者是项目初始阶段,而导致数据的具体格式无法明确定义的话,MongoDB的鲜明特性就脱颖而出。相比传统的关系型数据库,它非常容易被扩展,这也为写代码带来了极大的方便。不过MongoDB对数据之间事务关系支持比较弱,如果业务这一方面要求比较高的话,MongoDB还是并不适合此类型的应用。 5.2。 MongoDB与MySQL性能比较 5。2。1。 测试目的 MongoDB与MySQL作为两种不同类型的数据库,当其中存放的记录越来越多的时候,其插入效率将会受到怎样的影响,是本次实验所关注的对象。 在这里,我们将本次实验数据库中数据存储的规模定在1亿条。 5.2。2. 测试环境 机器配置: CPU:Intel(R) Xeon(R) CPU E5-2620 @ 2。00GHz      内存:65954040 KB 操作系统: Linux version 2.6.32_1-8—0-0 (gcc version 4.4.4 20100726 (Red Hat 4。4.4-13) (GCC) ) MongoDB版本: 2。2.3,无任何优化配置,单机测试 MySQL版本: 5.1。49,无任何优化配置,单机测试 测试语言: Python 2。7.1 数据库接口驱动: MongoDB :   PyMongo  2。1.1 MySQL:   MySQLdb  1。2。3 5。2。3. 测试结果1:插入速率  图1:横坐标是平均每插入1000条数据所需要的时间,单位是秒。 总结: Ø 数据库的平均插入速率:MongoDB不指定_id插入 〉 MySQL不指定主键插入 〉 MySQL指定主键插入 〉 MongoDB指定_id插入 Ø MongoDB在指定_id与不指定_id插入时速度相差很大,而MySQL的差别却小很多 分析: Ø 在指定_id或主键时,两种数据库在插入时要对索引值进行处理,并查找数据库中是否存在相同的键值,这会减慢插入的速率 Ø 在MongoDB中,指定索引插入比不指定慢很多,这是因为,MongoDB里每一条数据的_id值都是唯一的。当在不指定_id插入数据的时候,其_id是系统自动计算生成的。MongoDB通过计算机特征值、时间、进程ID与随机数来确保生成的_id是唯一的.而在指定_id插入时,MongoDB每插一条数据,都需要检查此_id可不可用,当数据库中数据条数太多的时候,这一步的查询开销会拖慢整个数据库的插入速度 Ø MongoDB会充分使用系统内存作为缓存,这是一种非常优秀的特性。我们的测试机的内存有64G,在插入时,MongoDB会尽可能地在内存快写不进去数据之后,再将数据持久化保存到硬盘上。这也是在不指定_id插入的时候,MongoDB的效率遥遥领先的原因。但在指定_id插入时,当数据量一大内存装不下时,MongoDB就需要将磁盘中的信息读取到内存中来查重,这样一来其插入效率反而慢了 Ø MySQL不愧是一种非常稳定的数据库,无论在指定主键还是在不指定主键插入的情况下,其效率都差不了太多 5。2.4. 测试结果2:插入稳定性 插入稳定性是指,随着数据量的增大,每插入一定量数据时的插入速率情况。 在本次测试中,我们把这个指标的规模定在10w,即显示的数据是在每插入10w条数据时,在这段时间内每秒钟能插入多少条数据. 1.       MongoDB指定_id插入:  2.       MongoDB不指定_id插入:  3。       MySQL指定PRIMARY KEY插入:  4.       MySQL不指定PRIMARY KEY插入:  总结: Ø 整体上的插入速度还是和上一回的统计数据类似:MongoDB不指定_id插入 > MySQL不指定主键插入 > MySQL指定主键插入 > MongoDB指定_id插入 Ø 从图中可以看出,在指定主键插入数据的时候,MySQL与MongoDB在不同数据数量级时,每秒插入的数据每隔一段时间就会有一个波动,在图表中显示成为规律的毛刺现象.而在不指定插入数据时,在大多数情况下插入速率都比较平均,但随着数据库中数据的增多,插入的效率在某一时段有瞬间下降,随即又会变稳定 Ø 整体上来看,MongoDB的速率波动比MySQL的严重,方差变化较大 Ø MongoDB在指定_id插入时,当插入的数据变多之后,插入效率有明显地下降.在其他三种的插入测试中,从开始到结束,其插入的速率在大多数的时候都固定在一个标准上 分析: Ø 毛刺现象是因为,当插入的数据太多的时候,MongoDB需要将内存中的数据写进硬盘,MySQL需要重新分表。这些操作每当数据库中的数据达到一定量级后就会自动进行,因此每隔一段时间就会有一个明显的毛刺 Ø MongoDB毕竟还是新生事物,其稳定性没有已应用多年的MySQL优秀 Ø MongoDB在指定_id插入的时候,其性能的下降还是很厉害的 5。2。5. 测试结果3:读取性能测试 测试方法: 先在1—100, 000, 000这一亿个数中,分别随机取1w, 5w, 10w, 20w, 50w个互不相同的数字,再计算其md5值,并保存。 在上述带主键插入的两个数据库里,分别以上一步生成的md5源为输入进行查询操作。同样,每查询1000条数据在日志文件中将当前系统时间写入。  测试结果:  以下三张图的纵坐标是每查询1000条数据所需要的时间,单位为s;横坐标是查询的规模,分为1w, 5w,10w, 20w, 50w五个等级.   图1 图2    图3  总结: Ø 在读取的数据规模不大时,MongoDB的查询速度真是一骑绝尘 Ø 在查询的数据量逐渐增多的时候,MySQL的查询速度是稳步下降的,而MongoDB的查询速度却有些起伏 分析: Ø 如果MySQL没有经过查询优化的话,其查询速度就不要跟MongoDB比了.MongoDB可以充分利用系统的内存资源,我们的测试机器内存是64GB的,内存越大MongoDB的查询速度就越快,毕竟磁盘与内存的I/O效率不是一个量级的 Ø 本次实验的查询的数据也是随机生成的,因此所有待查询的数据都存在MongoDB的内存缓存中的概率是很小的。在查询时,MongoDB需要多次将内存中的数据与
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 数据库/数据算法

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服