【.com速译】不可否认,MongoDB和MySQL都是性能极其优秀的数据库。但是,他们在不同的领域各有所长。本文将与大家一起探讨两者在不同环境下各自的特点、区别以及各种优缺点,以便大家在实际应用中做出明智的选择。什么是MySQL?自1995年投入市场以来,MySQL以其易用性和可靠性在业界享有良好的声誉。开源MySQL是一种关系数据库管理系统(RDBMS)。更具体地说,RDBMS是一种用于更新、管理和规划关系数据库的实用程序。基于数据表的关系数据库允许在同一个数据库中存储相关但不同类型的数据。由于数据库模式是根据一些特定的条件和规则预先定义的,因此通常将数据组织成行和列,以反映表中不同字段之间的关系。除了MySQL,我们常见的PostgreSQL和SQL也都属于RDBMS,它们都有各自的变种语言StructuredQueryLanguage(SQL)。什么是MongoDB?MongoDB虽然也是开源的,但与MySQL不同的是,它是一个文档数据存储。也就是说,它将文档存储在集合中,而不是存储在具有关系的表中。使用MongoDB时,数据模式是不固定的。用户可以删除或修改集合中文档的属性,以实现高度的灵活性。即使属于同一集合的文档也可以具有完全不同的结构。总的来说,MySQL和MongoDB有一个共同点:它们都是开源的并且易于访问。此外,两者都提供具有附加功能的商业版本。两者的区别在于:MySQL是关系型的,而MongoDB是非关系型的。MongoDB和MySQL的区别下面,我们将从数据模式和能力、性能和速度、安全性和查询语言等方面讨论关系型MySQL和文档数据存储MongoDB之间的区别。DataSchema和Capabilities与JSON文档类似,MongoDB中的数据以键值对的形式显示。因此,数据库在模式设计方面的约束较少。这对于快速增长或其他不断变化的需求的数据非常有利。如下图所示,MongoDB提供了一个预定义的结构,用户可以按需采用。资料来源:MongoDB虽然MySQL可以理解其数据模式,但它不像文档数据库那样灵活和动态。在存储任何数据之前,MySQL会强制您预先确定数据表的列。而在改变数据模式之前,用户需要仔细考虑数据库的数据定义语言(DDL)和数据建模语言(DML)。尽管关系数据库和文档数据库都使用了DDL和DML的概念,但是在关系数据库中建立DDL和DML是至关重要的。相反,由于MongoDB具有可扩展的数据模式,因此它不像MySQL那样关心数据的结构。当然,这种“不灵活”是MySQL最大的优势之一,毕竟它可以保持数据的干净和结构的一致。来源:https://dev.mysql.com/每个MongoDB数据库都包含一个以“顺序存储”方式填充的文档集合。由于这些文档本身包含了各种领域和信息类型,因此可以存储的内容和数据量极其丰富。但是在MySQL中,由于数据schema受限很大,数据表中的每一行都需要包含相同的特征列,这给管理大量的数据库带来了很大的麻烦。由此可见,MySQL无法像MongoDB那样轻松地处理大型复杂的数据库。也就是说,在处理庞大复杂的数据集时,文档数据库MongoDB会比关系数据库MySQL更有优势。性能和速度一般来说,MongoDB可以比MySQL更快地接受更大量的结构化和非结构化数据。但是,如果企业日常处理的数据量和变化频率不大,那么速度就不一定是需要关注的方面。也就是说,业务或项目数据的一致性和可靠性等要求将优先于速度考虑。MySQL是确保数据隐私和完整性的成熟解决方案。MySQL在其显式架构中,以数据表的形式将数据类型系统化,从而创建了可靠的数据库结构,方便用户查询和查找表中的数据。然而,MySQL显然不是非结构化数据的最佳选择。用户在使用MySQL时,需要提前准备好数据结构。这样会尽量减少后面产生的技术债,所以这是MySQL最大的优势。但是,这种架构也限制了其灵活处理复杂数据的能力。相反,由于MongoDB可以为非结构化数据提供灵活快速的性能,当用户难以预先设计数据模式时,文档数据存储将是一个不错的选择。当然,如果数据类型过于丰富,用户很难对数据属性创建相应的索引,需要经常优化数据模式。这可能会导致数据不一致。安全性MySQL使用基于权限的安全模型。该模型可以提供基本的身份验证和对特定数据库的用户权限的控制。在数据库与服务器之间传输数据的过程中,MySQL必须使用安全套接字层(SSL,一种安全协议)对连接进行加密。MongoDB的安全性主要包括:基于角色的访问控制、认证、授权和审计。当然,如果需要加密,它还可以实现传输层安全(TLS)和SSL协议。因此,在安全性方面,常见的业务应用倾向于使用成熟的MySQL来实现。ACID:Atomicity、Consistency、Isolation、Persistence众所周知,ACID是一组保证数据有效性的数据库事务属性。MySQL事务一直是ACID兼容的。追求速度和高可用的MongoDB在ACID上并不占优势。直到2018年,MongoDB才在多文档事务中满足ACID。不过,这个选项默认是关闭的。查询当需要从数据库表或表组合中请求信息时,MySQL使用最流行和使用最广泛的查询语言——SQL,通过DDL和DML与数据库进行通信。MongoDB使用非结构化查询语言。为了能够从JSON文档数据库中请求和获取数据或信息,用户需要事先指定结果应匹配哪些文档属性。也就是说,在对MongoDB数据库进行查询操作之前,用户需要使用db.collection.find()。MongoDB支持诸如:Python、Java、C#、Perl、PHP、Ruby和JavaScript等可用于构建查询的语言。通过$and、$or、$type、$eq等查询操作符,用户可以在复合查询中为文档集合中的每个字段建立特定的查询条件,并启用查询过滤器来过滤文件。如下图所示,定义条件后,识别符合选择条件的信息或记录,并更新、读取或删除。来源:https://docs.mongodb.com/guides/在使用MySQL时,用户可以通过JOIN操作(如inner、outer、left、right、cross)从两个或多个数据库表中进行选择。检索数据。也就是说,只需要一条SQL语句就可以获取多个表中的关联数据。MongoDB不执行JOIN及其等效操作。如何选择MongoDB和MySQL作为文档数据库,因为MongoDB不限制用户存储的数据量和类型,适合大数据的应用环境。这对于基于云的服务尤其有利。得益于MongoDB的横向扩展性和云服务的敏捷性,它不仅可以减轻开发人员的工作量,简化业务和项目的扩展过程,还可以提供高可用性和快速的数据恢复。但是MongoDB在数据可靠性、一致性和安全性方面不如MySQL。此外,当应用程序需要提供多行事务(例如,会计和银行系统)时,以MySQL为首的关系数据库提供了高事务率。事实上,与MySQL侧重于为事务提供ACID和安全性不同,MongoDB更侧重于提供高插入率。因此,我强烈建议您将MySQL用于具有固定数据模式并且不打算在数据多样性方面进行扩展的业务或项目。毕竟MySQL在保证数据完整性和可靠性的同时,不仅易于维护,而且成本低廉。相反,对于那些正在成长但数据架构不固定的业务或项目,MongoDB是最合适的选择。由于它允许开发人员自由更新、检索和存储没有任何结构的文档,因此它通常适用于需要内容管理、物联网(IoT)处理和实时分析的项目。总结综上所述,MySQL是一个开源的关系型数据库。其数据以数据表的形式组织,开发者可以将目标数据与数据库的其他部分关联起来。MongoDB是一个开源文档数据库。它既不与任何数据记录关联,也没有固定的数据模式。同时,它提供了一个高度可插入的、动态的、灵活的数据库。如前所述,由于MongoDB比MySQL处理大量数据的能力更强,因此它更适合基于云的服务、经常增长和变化的应用程序以及大数据环境。相反,MySQL以其固定、结构化的数据模式和符合ACID的事务特性,为数据提供了更高的一致性、可靠性和安全性。总之,MongoDB和MySQL都是优秀的,如何选择完全取决于你具体的应用需求和系统特性。原标题:MongoDBVs.MySQL:何时使用?,作者:MarianaBerga
