MongoDB 的安全体系是由基于角色的访问控制组成的,包括身份认证、授权和审计。另外,如果有加密的需要,也会使用 TLS 和 SSL。
虽然 MongoDB 和 MySQL 都提供了安全模型,在项目需要一定的可靠性和数据一致性的情况下都可以使用,但 MySQL 是最适合的选项。
事务的特性:原子性、一致性、隔离性和持久性
在计算机科学中,ACID 是指数据库事务应当具有的属性,满足了这些属性,数据才是有效的。它们分别是:原子性、一致性、隔离性和持久性。
人们通常认为 MySQL 是符合 ACID 标准的,但对于 MongoDB 来说,一味地去满足 ACID 标准就不是最优策略了,因为它会牺牲速度和可用性。MongoDB 于 2018 年开始支持 ACID 多文档事务。但是,默认情况下,此选项处于关闭状态。另一方面,MySQL 的事务符合 ACID 标准,就事务的属性而言,它可以确保数据有效性。
查询
MySQL 使用 SQL 语句从一个或几个数据表中获取数据。SQL 是最流行的查询语言,只需要与 DDL 和 DML 相结合,就可以跟数据库系统通信。
相反,MongoDB 使用的是非结构化查询语言。从基于 JSON 的文件型数据库中查询数据,第一要务是使用与结果匹配的属性来搜索文档。
换句话说,为了获取 MongoDB 中的数据,需要执行查询操作。应当执行这个函数:db.collection.find()。MongoDB 支持多种语言(类似于 Python, Java, C##, Perl, PHP, Ruby, 以及JavaScript),只要在该语言中查询可以构建,MongoDB 都支持使用。复合查询可以使用查询操作符为集合文档中的各个字段建立特定的条件。查询操作符($and, $or, $type, $eq等)用于定义条件和过滤器。通过查询获取到的数据是由查询条件决定的,进一步来说,查询、更新、删除的对象都是查询条件决定的。
然而,MongoDB 不支持连接查询,也没有与它等同的替代方案。MySQL 支持 JOIN 操作符(包括内连接、外连接、左连接、右连接、全连接),它用于从两个或更多的表中获取数据。简单地说,这些操作允许使用单个 SQL 语句来关联多个表中的数据。
MongoDB vs. MySQL:分别在什么情况下使用
因为使用环境不同,很难说哪种数据库更好。实际上,MySQL 和 MongoDB 的运行原理完全不同,都是很好用的数据库管理系统。所以,即使其中一种对某些业务或项目很适合,对其他不同的需求来说就未必是最好的选择。公司会根据不同的项目需求来选择合适的数据库。
它们之间为数不多的共同点之一就是开源和易于访问。此外,两种系统都提供了有附加功能的商业版。除了这些相似性,它们最关键的不同点在于一个是关系型的,而另一个不是。
MongoDB 是一种文档型数据库,由于它不限制数据量和数据类型,它是高容量环境下最合适的解决方案。由于 MongoDB 具备云服务需要的水平可伸缩性和灵活性,它非常适合云计算服务的开发。另外,它降低了负载,简化了业务或项目内部的扩展,实现了高可用和数据的快速恢复。
尽管 MongoDB 有那么多优点,但 MySQL 也在某些方面优于 MongoDB,例如可靠性和数据一致性。另外,如果优先考虑安全性,MySQL 就是安全性最高的 DBMS 之一。
而且,当应用程序需要把多个操作视为一个事务(比如会计或银行系统)时,关系数据库是最合适的选择。除了安全性,MySQL 的事务率也很高。实际上,MongoDB 支持快速插入数据,而 MySQL 相反,它支持事务操作,并关注事务安全性。
总体上看,如果项目的数据模式是固定的,而且不需要频繁变更,推荐使用 MySQL,因此项目维护容易,而且确保了数据的完整性和可靠性。
另一方面,如果项目中的数据持续增加,而且数据模式不固定,MongoDB 是最合适的选择。由于它属于非关系数据库,数据可以自由使用,不需要定义统一的数据结构,所以对数据进行更新和查询也很方便。MongoDB 通常用于需要对内容进行管理、处理物联网相关业务、进行实时分析等功能的项目中。
结论
MySQL 是一个开源的关系数据库,其中的数据存于表中,数据中的某些属性可以跟其他表建立关系。MongoDB 也是开源的,但它属于文档型数据库。因此,它没有记录的概念,它的数据模不固定,所以它是一种动态灵活的数据库,可以插入大量数据。
在选定最佳数据库之前,特定的业务需求和项目的优先事项应当是清晰确定的,正如前文提到的,在处理大量数据方面,MongoDB 比 MySQL 更胜一筹。另外,在云计算服务和需求频繁变化的项目上,MongoDB 也是如此。
相反,MySQL 中数据结构和模式是固定的,因此保证了数据一致性和可靠性。使用 MySQL 还有一个好处,就是由于它支持基于 ACID 准则的事务操作,数据安全性更高。所以对于看重这些因素的项目来说,MySQL 是最合适的。
简而言之,只要使用场景跟应用程序的需求相符,并且符合系统的特点,这两种数据库都能提供令人满意的性能。
更多SQL内容来自木庄网络博客