建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

eharry

发帖: 7粉丝: 3

发消息 + 关注

发表于2018年04月09日 09:03:47 8952 1
直达本楼层的链接
楼主
显示全部楼层
mongodb与mysql的对比

概观

关系数据库几十年来一直是企业应用程序的基础,自1995年MySQL发布以来,它一直是一种流行且廉价的选择,特别是作为早期Web应用程序的普遍LAMP堆栈的一部分。
今天,现代企业正在考虑更好的方式来存储和管理他们的数据 - 无论是为了获得更好的客户洞察力,适应不断变化的用户期望,还是通过新的应用程序和商业模式将竞争对手推向市场。因此,推动早期关系数据库开发的许多假设已经发生了变化:
  • 要求更高的开发人员生产力和更快的上市时间,传统的僵化的关系数据模型和瀑布式开发的单片应用程序让位于敏捷方法,微服务和全栈开发,将发布周期从几个月,几年压缩到几天和几周。
  • 需要管理新的,快速变化的数据类型的大规模增长 - 由新型Web,移动,社交和物联网应用程序生成的结构化,半结构化和多态数据。
  • 全面转向分布式系统和云计算,使开发人员能够利用随需应变,高度可扩展的计算和存储基础架构,并且能够为全球任何地点的工作和观众提供服务,同时满足全新的监管需求数据主权。
因此,为了解决新应用程序的需求并实现现有工作负载的现代化,出现了像MongoDB这样的非关系型数据库。MongoDB 4.0将会在2018年夏季,计划的支持多文档ACID事务,将使开发人员更容易使用。
什么是MySQL?
MySQL是一个流行的开源关系数据库管理系统(RDBMS),由Oracle公司开发,分发和支持。像其他关系数据库一样,MySQL将数据存储在表中,并使用结构化查询语言(SQL)进行数据库访问。在MySQL中,您可以根据需求预先定义数据库模式,并设置规则来管理表中字段之间的关系。模式中的任何更改都需要执行迁移过程,以使数据库脱机或显着降低应用程序性能。
什么是MongoDB?
MongoDB是由MongoDB,Inc.开发的开源非关系数据库。MongoDB将数据存储为称为BSON(二进制JSON)的二进制表示形式的文档。相关信息通过MongoDB查询语言一起存储以便快速查询访问。字段可以因文档而异; 不需要向系统声明文档的结构 - 文档是自描述的。如果需要将新字段添加到文档中,则可以在不影响集合中的所有其他文档的情况下创建该字段,而无需更新中央系统目录,也不需要使系统脱机。或者,可以使用模式验证来对每个集合实施数据管理控制。
MongoDB的文档数据模型自然映射到应用程序代码中的对象,使开发人员可以轻松学习和使用。文档使您可以轻松地表示层次关系来存储数组和其他更复杂的结构。
为10种以上语言提供了原生的,惯用的驱动程序 - 社区已经构建了数十种语言 - 支持即时查询,实时聚合和丰富的索引,以提供强大的编程方式来访问和分析任何结构的数据。
由于文档可以汇集相关数据,否则这些数据将在关系模式中通过单独的父 - 子表建模,因此MongoDB的原子单文档操作已经提供了符合大多数应用程序的数据完整性需求的事务语义。一个或多个字段可以在单个操作中写入,包括更新多个子文档和数组的元素。MongoDB提供的保证确保在文档更新时完全隔离; 任何错误都会导致操作回滚,以便客户端收到文档的一致视图。
预定于2018年夏季的MongoDB 4.0将增加对多文档事务的支持,使其成为唯一一个将传统关系数据库的ACID保证,文档模型的速度,灵活性和强大功能与智能分布式系统设计来扩展并将数据放在需要的地方。通过快照隔离,事务将提供全局一致的数据视图,并执行全有或全无执行来维护数据完整性。MongoDB中的事务就像开发人员在MySQL中熟悉的事务一样。它们将是多语句,具有类似的语法(例如: start_transaction和commit_transaction),因此对于任何具有交易经验的人员都可以轻松添加到任何应用程序中。
与MySQL和其他关系数据库不同,MongoDB建立在分布式系统架构上,而不是单一的单节点设计。因此,MongoDB提供了开箱即用的自动分片功能的横向扩展和数据本地化功能,以及具有高可用特性的副本集。
术语和概念
MySQL中的许多概念在MongoDB中都有类似的特征。下表概述了MySQL和MongoDB的通用概念。
MySQL
MongoDB
ACID事务ACID事务* TableCollection RowDocument ColumnField Secondary IndexSecondary Index JOINsEmbedded documents, $lookup & $graphLookup GROUP_BYAggregation Pipeline
ACID事务计划为MongoDB 4.0 *
功能比较
和MySQL一样,MongoDB提供了一套丰富的特性和功能,远远超出了简单的NoSQL数据存储所提供的功能和功能。MongoDB具有丰富的查询语言,功能强大的二级索引(包括文本搜索和地理空间),强大的数据分析聚合框架,分面搜索,图形处理等等。使用MongoDB,您还可以在关系数据库中使用更多不同数据类型的这些功能,并且大规模使用。
MySQL的
MongoDB的
NoSQL数据存储
开源是是是 ACID事务是是* 1没有 灵活丰富的数据模型没有是部分:架构灵活性,但仅支持简单的数据结构 模式管理是是没有 expressive joins,分面搜索,图表查询,强大的聚合是是没有 原生语言驱动支持没有是没有 数据局部性的水平扩展没有是部分:不控制数据局部性 对接分析系统和BI系统是是没有 企业级安全和成熟的管理工具是是没有 数据库作为所有主要云端的服务是是没有
  • 1预定MongoDB 4.0,2018年夏季
查询语言
MySQL和MongoDB都有丰富的查询语言。可以在MongoDB文档中找到完整的语句列表。
MySQL的
MongoDB的
INSERT INTO用户(user_id,年龄,状态)VALUES('bcd001',45,'A')db.users.insert({  user_id:'bcd001',  年龄:45岁,  状态:'A'}) SELECT * FROM用户db.users.find() 更新用户SET状态='C'年龄> 25岁db.users.update(  {年龄:{$ gt:25}},  {$ set:{status:'C'}},  {multi:true})为什么使用MongoDB而不是MySQL?
各种规模的组织都在采用MongoDB,因为它使他们能够更快地构建应用程序,处理高度多样化的数据类型,并在规模上更高效地管理应用程序。
随着MongoDB文档自然地映射到现代的面向对象的编程语言,开发被简化了。使用MongoDB将删除将代码中的对象转换为关系表的复杂对象关系映射(ORM)层。MongoDB灵活的数据模型也意味着您的数据库模式可以随业务需求而变化。
MongoDB也可以扩展到多个分布式数据中心内部,从而提供以前在像MySQL这样的关系数据库中无法实现的新的可用性和可伸缩性级别。随着您的部署在数据量和吞吐量方面的增长,MongoDB无需停机即可轻松扩展,并且无需更改应用程序。相比之下,为了达到MySQL的规模,往往需要大量的定制工程工作。
JSON文档的开发人员生产力
事实证明,将数据作为灵活的JSON文档而不是刚性的行和列处理,可以帮助开发人员更快地移动。从关系型数据库迁移到MongoDB之后,找到能够将开发周期缩短4倍或5倍的团队并不困难。为什么是这样?:
  • 文件是很自然的文档以与应用程序相同的方式表示数据。与关系数据库的表格行和列不同,数据可以使用数组和子文档进行结构化 - 与应用程序分别表示数据相同,分别作为列表和成员/实例变量。这使得开发人员可以更简单快速地模拟应用程序中的数据如何映射到存储在数据库中的数据。
  • 文件是灵活的每个文档都可以存储具有其他文档不同属性的数据。例如,考虑一个产品目录,其中存储男士服装细节的文档将存储来自存储平板电脑细节的文档的不同属性。这是一种通常称为“多态性”的属性。使用JSON文档,我们可以在需要时添加新属性,而无需更改集中式数据库模式。在最坏的情况下,这最多会导致关闭数据库中的停机时间显着增加。灵活性文档带来的开发人员可以更轻松地处理由现代移动,Web和物联网应用程序生成的半结构化和非结构化数据。
  • 文件使应用程序更快。对于存储在单个文档中的实体数据,而不是跨多个关系表分布,数据库只需要读取和写入一个地方。将对象的所有数据放在一个地方也使开发人员更容易理解和优化查询性能。
正是出于这些原因,MySQL和其他关系数据库已经增加了对JSON的支持。但是,简单地添加JSON数据类型并不会将开发人员的生产力优势从文档数据库带给MySQL。为什么?因为MySQL的方法可能会降低开发人员的生产力,而不是改进它。考虑以下:
  • 专有扩展:查询和操作JSON文档的内容需要使用单独的MySQL特定的SQL函数来访问值,这对大多数开发人员来说并不熟悉。另外,它们不受第三方SQL工具(例如BI平台,数据仓库连接器,ETL和ESB管道等)的支持或认可。
    • MongoDB与MongoDB有何不同: MongoDB API被广泛理解,并被行业标准工具和连接器所采用。几家大型供应商数据库公司甚至自己也采用了MongoDB API。
  • 传统关系开销:即使有JSON支持,MySQL用户仍然与多层SQL /关系功能绑定,以与JSON数据 - 低级JDBC / ODBC驱动程序和对象关系映射程序(ORM)进行交互。对于有经验的MySQL开发人员来说,这些层可能是熟悉的,但对于许多其他开发人员来说,他们想通过API来与文档和数据进行交互,而这些API对于他们的编程语言来说是自然和惯用的,这些层会带来很高的学习开销 对于性能和查询效率来说,ORM通常也很难被优化 - 即使对于有经验的关系型开发人员也是如此。另外,JSON数据的查询优化统计信息比常规关系数据类型的查询优化统计信息更加有限。
    • MongoDB与MongoDB的不同之处在于: MongoDB驱动程序在开发人员使用的编程语言中习惯于自然的方法和函数中实现。
  • 复杂数据处理:当使用JSON数据时,MySQL驱动程序不具备将JSON正确和精确地转换为应用程序使用的有用本机数据类型的功能。这包括不同类型的数值(例如浮点,64位整数,小数)时间戳和日期,或Java中的映射或列表或Python中的字典或列表。相反,开发人员必须在他们的应用程序中手动转换基于文本的JSON,从而失去了在不同文档中使用多个数据类型的字段(多态性)的能力,并且使值的计算,排序和比较变得困难且容易出错。
    • MongoDB如何不同: MongoDB及其驱动程序使用的二进制编码JSON(BSON)支持常规基于文本的JSON不支持的高级数据类型。
  • 没有数据治理: MySQL没有提供本机制来验证在数据库中**或更新的JSON模式,因此开发人员需要添加应用程序或数据库端功能以对数据应用治理控制。
  • 与MongoDB有什么不同: 基于JSON Schema IETF标准的Schema验证允许开发人员和DBA为每个MongoDB集合定义和实施规定的模式结构。
  • 架构刚性: MySQL用户仍然需要为常规关系数据定义架构。如果模式随后被修改以适应新的应用程序需求,则该表针对某些操作被锁定,直到现有数据被复制到新模式中,这就要求在模式迁移期间应用程序停顿。
  • MongoDB的不同之处:开发人员和数据库管理员可以将完全动态模式的灵活性与某些应用程序所需的治理控制相结合,而不是只存储数据库中的所有数据。
用户通过MySQL选择MongoDB
正如下面的例子所说明的,MongoDB在MySQL上的选择是由对开发人员生产力,应用程序性能和规模的彻底改进所驱动的:
  • 百度于2012年开始使用MongoDB,在达到性能和可伸缩性限制后,最初从MySQL迁移其用户地址簿服务。现在,超过100种不同的产品和服务由运行在650节点集群上的MongoDB提供支持,部署在多个数据中心内,存储超过1PB的数据。MySQL灵活的文档数据模型可以扩展MongoDB的分布式设计和开发人员的生产力。
  • Experian Health选择MongoDB作为MySQL和其他关系数据库的动力,为它的通用标识管理器提供支持,该标识管理器是公司用于唯一识别医疗保健客户的新应用程序。选择MongoDB是因为其灵活的数据模型,可扩展性,强大的性能和总体成本。在关系数据库上开发Universal Identity Manager意味着Experian Health开发人员需要执行多达10个SQL连接才能正确匹配患者的身份。使用MongoDB允许公司简化其模式以消除复杂性; 大幅减少查询次数; 提高性能; 并随着数据量的增加而简化增长。
  • Viacom媒体网络,MTV,喜剧中心,Nickelodeon和其他几十个品牌的主场,在从MySQL迁移后,在MongoDB上构建了大量的轮询,投票和数据收集服务。MongoDB灵活的文档数据模型,横向扩展设计和丰富的聚合流水线使Viacom能够大规模捕获和分析数据。
  • 生物技术巨头Thermo Fisher 将从AWS Aurora上的MySQL迁移到MongoDB以及完全托管的Atlas数据库即服务后实验时间从几天缩短到几分钟。除了以40倍以下的代码提供6倍的性能以外,MongoDB还有助于降低应用程序的架构复杂性。
MongoDB的常见用例是什么?
MongoDB是一个通用数据库,用于各种用例。MongoDB最常见的用例包括, 单一视图,物联网,移动,实时分析,个性化,目录和内容管理。随着多文档交易的增加,MongoDB将更加容易处理一系列的用例。
MySQL何时更适合?
虽然许多组织已经成功从RDBMS迁移到MongoDB,但您不能将MongoDB作为以关系数据模型和SQL为基础构建的遗留应用程序的替代品。然而,组织正从将关键任务,创收应用现代化到MongoDB中受益。例如,思科将其电子商务平台从传统关系数据库迁移到MongoDB。因此,它通过降低8倍延迟并消除系统升级期间的停机时间,改善了客户体验。其开发团队可以更快地构建和发布新的应用程序,而公司的电子商务平台可以利用云计算所带来的业务敏捷性。
想要了解更多?将RDBMS获取到MongoDB迁移指南
由于我们今天构建和运行应用程序的方式,以及数据源和用户负载的增长,关系数据库正在被超越其极限。为了应对这些挑战,像MTV和思科这样的公司已经成功地从关系数据库迁移到MongoDB。在本白皮书中,您将了解到:
  • 一步一步如何从关系数据库迁移到MongoDB。
  • 相关的技术考虑因素,例如关系数据模型和文档数据模型之间的差异以及对模式设计的影响。
  • 索引,查询,应用程序集成和数据迁移。
举报
分享

分享文章到朋友圈

分享文章到微博

guangfu007

发帖: 6粉丝: 1

发消息 + 关注

发表于2018年04月09日 22:26:12
直达本楼层的链接
沙发
显示全部楼层

当前主流公司的做法是用关系型数据库和nosql数据库混合使用的方式,这样既能保证提供高效的服务,有可以保证业务逻辑的完整。

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册