目录
一、什么是MYSQL?
二、什么是MongoDB
三、MongoDB与MYSQL的差异
1、数据模式和容量
2、性能和速度
3、安全性
4、查询
四、区别
1、关系型数据库—MySQL
①在不同的引擎上有不同的存储方式。
②查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。 ③开源数据库的份额在不断增加,mysql的份额页在持续增长。
④缺点就是在海量数据处理的时候效率会显著变慢。
2、非关系型数据库—MongoDB
①存储方式:虚拟内存+持久化。
②查询语句:是独特的MongoDB的查询方式。
③适合场景:事件的记录,内容管理或者博客平台等等。
④架构特点:可以通过副本集,以及分片来实现高可用。
⑤数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
⑥成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。
五、MongoDB优势与劣势
1、优势
①在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
②MongoDB的高可用和集群架构拥有十分高的扩展性。
③在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。
④MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。
2、劣势
①不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
②应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
③MongoDB占用空间过大。
六、对比
七、结论
MySQL 是一个开源的 RDBMS,即关系数据库系统。更确切地说,关系数据库系统是一个用于更新、管理和设计关系数据库的应用程序,它很有用,也有利于程序的编码。关系数据库是一种数据库(数据通常以表格形式呈现),它支持在同一个数据库中根据数据间的关联关系来查询数据。MySQL、PostgreSQL 和 SQL 都属于关系数据库系统,它们都有各自的 SQL(结构化查询语言) 标准。
MySQL 是最常用的开源 RDBMS 之一,它于 1995 年面世,因其可靠性持续受到业界的好评。而且它使用很方便。由于数据库模式是根据某种规则预先定义的,数据以行和列的形式存在,还能体现不同表的字段间的关系。
MongoDB 也是开源的,但它是一种基于文件存储的数据库,这点跟 MySQL 不同。它把文档存储在数据集合中,而不是存储于关系表中。
使用 MongoDB 时,数据模式不是固定的。在一个集合内部删除或修改文档的某些属性是可行的,这就提供了很大的灵活性。而且,同一集合内的文档,其结构可以是完全不同的。
这两种开源数据库的主要差别在于,MySQL 是关系型的,MongoDB 是基于文件存储的。
在 MongoDB 中,数据是以类似于 JSON 文件的名值对形式存在的,因其模式设计,它对数据的约束条件较少。因此如果数据是快速变化的,MongoDB 就很有优势。另外,MongoDB 还提供了预定义的结构,如果需要也可以使用。
MySQL 就不一样了。在 MySQL 中虽然可以改变模式,但是其灵活性和动态性比基于文件存储的数据库差。在存入任何数据之前,MySQL 都会强制进行检查,如果存入数据后表和列符合预先定义的规则,才会真正执行。更改数据模式也需要重新设计数据库的 DDL(数据定义语言)和 DML(数据建模语言)。
关系型数据库和文档型数据库都使用了 DDL 和 DML 的概念。然而,在关系数据库中,DDL 和 DML 的定义很重要。反之,MongoDB 的数据模式的扩展性较强,不像 MySQL 那样关注数据结构。虽然这似乎是一个很大的缺点,但这种一致性实际上是 MySQL 最大的优势,因为它确保了数据的结构化,维持了数据的清洁性。
每个 MongoDB 数据库都包含了若干个集合,或者更准确的说,是由一些文档组成的。这些文档可能包含各种各样的信息字段和类型,并支持存储各种内容和大小的数据。在 MySQL 中,由于数据模式比较具有约束力,一个表中的每条数据都有同样的列,因此当数据库体量很大时,就很难对它进行管理。所以,如果数据库太大且很复杂的情况下,MySQL 处理能力就不如 MongoDB 了。
换句话说,基于文件存储的 MongoDB 比 关系型的 MySQL 更适合处理大量的、结构多变的复杂数据。
MongoDB 接收任何数据都比 MySQL 快,而且能接收的数据量也比 MySQL 多。然而,猜想这样一种业务,数据量很小,数据结构也不那么多变,因此不必过于追求快速,那么其他特性(像可靠性和一致性)就成为优先考虑的因素了。
如果项目需求侧重于数据的隐私性和完整性,MySQL 就是成熟且合理的方案。由于数据模式是明确的,MySQL 凭借数据表使数据类型系统化,使数据中各自的值都能充分查询并且容易搜索,所以使用 MySQL 意味着数据库结构是稳定不变的。但是,对于非结构化的数据,它就不适合。MySQL 最大的优点(也可以说是缺点)在于需要事先定义数据结构,这就避免了很多技术债务。但是,在某些情况下,数据太复杂,就难以设计一套合适的模式。
另一方面,MongoDB 在处理非结构化数据时更灵活,速度也快。在数据模式难以预先定义的情况下,基于文件存储的数据库就比较适合。然而,如果数据是多样化的,在数据的某个属性上添加索引是难以实现的。因此数据模式需要不断优化。此时如果片面追求一致性,反而会带来风险。
MySQL 利用一套基于权限的安全模型,即用户对数据库进行操作需要身份认证,系统也可以授予或禁止用户对某个数据库进行操作的权限。而且如果应用程序需要从数据库获取数据,就需要使用 SSL 这种安全协议建立加密连接。
MongoDB 的安全体系是由基于角色的访问控制组成的,包括身份认证、授权和审计。另外,如果有加密的需要,也会使用 TLS 和 SSL。
虽然 MongoDB 和 MySQL 都提供了安全模型,在项目需要一定的可靠性和数据一致性的情况下都可以使用,但 MySQL 是最适合的选项。
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 语句来关联多个表中的数据。
非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。这些数据具备自述性,呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。
MySQL 是一个开源的关系数据库,其中的数据存于表中,数据中的某些属性可以跟其他表建立关系。MongoDB 也是开源的,但它属于文档型数据库。因此,它没有记录的概念,它的数据模不固定,所以它是一种动态灵活的数据库,可以插入大量数据。
在选定最佳数据库之前,特定的业务需求和项目的优先事项应当是清晰确定的,正如前文提到的,在处理大量数据方面,MongoDB 比 MySQL 更胜一筹。另外,在云计算服务和需求频繁变化的项目上,MongoDB 也是如此。
相反,MySQL 中数据结构和模式是固定的,因此保证了数据一致性和可靠性。使用 MySQL 还有一个好处,就是由于它支持基于 ACID 准则的事务操作,数据安全性更高。所以对于看重这些因素的项目来说,MySQL 是最合适的。
简而言之,只要使用场景跟应用程序的需求相符,并且符合系统的特点,这两种数据库都能提供令人满意的性能。