Oracle,MySQL还是NoSQL?

来源:互联网 发布:js改变内容触发事件 编辑:程序博客网 时间:2024/06/05 04:15
功能

  Oracle全才,无论OLAP还是OLTP,无论是锁定机制还是事物支持,无论是内置函数还是外部可扩展功能,都比较全面。

  MySQL OLTP型选手,但由于缺少 Hash Join,以及分析函数相对较少,所以OLAP方面功能相对欠缺,但对事务的支持以及锁定机制都比较齐全。

  NoSQL K/V 型选手,主要提供高效的简单查询,虽然部分NoSQL产品也支持相对复杂一点的检索,但在事务以及Join方面都未支持,功能最弱。

  性能(写入)

  Oracle 需要记录 Redo Log 且保证每次事务都fsync到物理磁盘以保证事务安全,连续写;数据的写入大多是在内存中完成,后台进程进行内存到磁盘的定期批量刷新,随机写为主。

  MySQL InnoDB引擎 与Oracle类似;MyISAM 引擎无事务所以没有事务日志到磁盘的fsync问题,但由于其表锁的原因,并发稍若。从总体使用经验来看和 Oracle 相差不大。

  NoSQL 在数据存储及日志记录方面的架构及实现优化,使之在写入性能方面较传统数据库有较大优势。

  性能(简单查询)

  Oracle在高并发场景下,由于其在事务控制实现方面的优势,以及多进程的机制,显示出了相对明显的优势。

  MySQL在并发数不是太高的前提下,如8,16,32个并发场景下,相对于 Oracle 没有显示出弱势,甚至部分存储引擎下还有一些优势,但是随着并发数的增加,就逐步体现出了与 Oracle 的差距,这与其基于线程的机制也有一定关系。

  NoSQL至少在我过往的多种测试下,大部分时候的简单查询性能都不如前二者。

  性能(复杂查询)

  Oracle统计信息涉及的方面非常多,优化器相对于 MySQL 来说也先进很多,再加上对 Join 方式的全面支持,无论是从功能还是性能角度来说,多表 Join 都是 Oracle 的优势所在。

  MySQL其查询优化器所能参考的统计信息相对较少,优化器深度也比 Oracle 少很多,所以在多表 Join 的时候出现执行计划异常并不少见。此外,不支持 Hash Join 的天生缺陷也让其 Join 能力大打折扣。

  NoSQL不支持Join,不具可比性,无疑是最弱的。

  扩展能力

  Oracle Oracle由于其极高的一致性要求,造成架构上的不少限制。导致其扩展成本相对高很多。

  MySQL原生分布式架构的优势在于并发支持,但延时问题一直被广为诟病。所以大部分场景下是人肉进行分布式拆分,但其Replication特性加上对一致性的约束相较Oracle弱,使其架构灵活性很高。

  NoSQL大多都原生支持分布式部署架构,具有极好的Scale Out能力。

  可维护性

  Oracle 这一点上 Oracle 具有非常大的优势,无论是性能跟踪还是常规维护方面,Oracle都提供了非常丰富的工具和系统。

  MySQL原生工具相对简单,但由于其开源的特性,有一些第三方开发的工具支持,比如Percona提供的一套工具(原mktools),但总提仍然比 Oracle 少了很多。

  NoSQL无论是从性能跟踪还是常规维护角度来说,都远不如前二者。

  商业支持

  Oracle商业软件,全套的商业服务支持。 上百本文档手册支持,几乎涵盖所有的内容。

  MySQL有商业服务支持,但文档相对简单,包含的内容也比较少。

  NoSQL少有商业支持,文档非常简单,网络资料也相对少很多。

  人才环境

  Oracle发展几十年,具有充足的人才储备,活跃的社区环境。

  MySQL开源数据库的王者,社区活跃,虽然人才总量常常供不应求,但总体还是处于良性状态。

         NoSQL新技术,产品众多,社区活跃度远不如前面二者,鎼滅储处于人才极度匮乏状态。

  软件成本 

  Oracle商业软件,价格昂贵。

  MySQL有开源也有商业版本,但价格较便宜。

  NoSQL开源软件。

原创粉丝点击