MongoDB 与 MySQL 的比较
想象一下,找到一个符合您组织技术目标的 DBMS。这很令人兴奋,对吧?
关系数据库在相当长的一段时间内占据主导地位。选择显而易见:MySQL、Oracle 或 MS SQL,仅举几例。然而,随着对多样性和可扩展性的需求日益增长,时代已经发生了巨大的变化,不是吗?
市场上有很多替代方案可供选择,但我不希望您再次感到困惑。那么,不妨来一场两种人气相近的主流解决方案之间的较量,如何?
这两个都是最流行的开源数据库软件。
就此而言,让我们开始吧。
模式的灵活性
MongoDB 的一大优点在于它对模式设计没有任何限制。您可以直接将几个文档放入集合中,而这些文档之间无需建立任何关系。唯一的限制在于支持的数据结构。
但由于缺少连接和事务(我们将在后面讨论),您需要根据应用程序访问数据的方式频繁优化模式。
在 MySQL 中存储任何内容之前,您需要明确定义表和列,并且表中的每一行都应该具有相同的列。
正因为如此,如果遵循规范化,存储数据的方式就没有太多灵活的空间。
例如,如果您经营一家银行,则可以将其信息添加到名为“account”的表中,如下所示:
这就是 MySQL 存储数据的方式。如你所见,表设计非常严格,不易更改。MongoDB 以 JSON 类型存储数据,如下所示:
此类文档也可以存储在集合中。
MongoDB 创建无模式文档,可以存储任何您想要的信息,尽管这可能会导致数据一致性问题。MySQL 创建了严格的模式模板,因此必然会出错。
查询语言
MongoDB 使用非结构化查询语言。要在 JSON 文档中构建查询,您需要指定一个文档,其中包含您希望结果匹配的属性。
它通常使用一组非常丰富的运算符来执行,这些运算符通过 JSON 相互链接。MongoDB 将每个属性视为具有隐式布尔“与”关系。它原生支持布尔“或”查询,但您必须使用特殊运算符 ($or) 来实现。
MySQL 使用结构化查询语言 SQL 与数据库通信。尽管它很简单,但它确实是一种非常强大的语言,主要由两部分组成:数据定义语言 (DDL) 和数据操作语言 (DML)。
让我们快速比较一下。
MongoDB 和 MySQL 中的关系
MongoDB 不支持 JOIN —— 至少它没有类似的功能。相反,它支持多维数据类型,例如数组,甚至其他文档。将一个文档放入另一个文档中称为嵌入。
MySQL 最强大的功能之一就是 JOIN 操作。简单来说,JOIN 使关系数据库变得关系化。JOIN 允许用户在单个 SELECT 命令的帮助下,在单个查询中链接来自两个或多个表的数据。
例如,我们可以使用单个 SQL 语句轻松获取多个表中的相关数据。
这将为您提供帐号、名字和相应的分行。
性能和速度
它比 MySQL 的一个主要优势是能够处理大量非结构化数据。它的速度神奇地快,因为它允许用户以对工作负载更敏感的不同方式进行查询。
开发人员指出,在处理大型数据库时,MySQL 的速度比 MongoDB 慢得多。它无法处理大量非结构化的数据。
因此,没有一个“标准”基准可以帮助你找到最适合你需求的数据库。只有你的需求、你的数据和基础设施才能告诉你你需要知道什么。
我们来看一个通用的例子来了解MySQL和MongoDB按照各种功能的速度。
在下列情况下进行了测量:
MySQL 5.7.9
MongoDB 3.2.0
每一个都已经在单独的 m4.xlarge Amazon 实例上进行了测试,该实例具有 Ubuntu 14.4 x64 和默认配置;所有测试均针对 1,000,000 条记录进行。
从上图可以明显看出,对于相同的命令,MongoDB 所花费的时间比 MySQL 要少得多。
安全模型
MongoDB 使用基于角色的访问控制,并具有灵活的权限设置。其安全功能包括身份验证、审计和授权。
此外,还可以使用传输层安全性 (TLS) 和安全套接字层 (SSL) 进行加密。这确保只有目标客户端才能访问和读取它。
MySQL 使用基于权限的安全模型。这意味着它会对用户进行身份验证,并授予用户在特定数据库上的权限,例如 CREATE、SELECT、INSERT、UPDATE 等。
但它无法解释为什么拒绝特定用户的特定访问。在传输层,它使用 SSL 在客户端和服务器之间建立加密连接。
何时使用 MongoDB 或 MySQL?此信息图解释了何时应使用 MongoDB 而非 MySQL,反之亦然。
结论
要回答这个问题“为什么我应该使用 X 而不是 Y?”您需要考虑您的项目目标和许多其他因素。
MySQL 因其灵活性、高性能、可靠的数据保护和易于管理的数据而高度组织化。适当的数据索引可以解决您的性能问题,促进交互并确保稳健性。
但是,如果您的数据结构化程度不够,处理起来又比较复杂,或者预定义模式对您来说不太容易,那么您最好选择 MongoDB。此外,如果您需要处理大量数据并将其存储为文档,MongoDB 将为您提供很大的帮助!
对比的结果:两者并不一定孰优孰劣。MongoDB 和 MySQL 各自服务于不同的领域。
我们已在此处发布了此博文的更新版本:MongoDB 与 MySQL:数据库比较研究。如果您还有其他建议,欢迎留言。
鏂囩珷鏉ユ簮锛�https://dev.to/jignesh_simform/comparing-mongodb--mysql-bfa