Mysql
MySQL是由Oracle公司开发,发布和支持的受欢迎的开源关系数据库管理系统(RDBMS)。像其他关系系统一样,MySQL将数据存储在表中,并使用结构化查询语言(SQL)来进行数据库访问。在MySQL中,您可以根据需要预先定义数据库模式,并设置规则来管理表中字段之间的关系。在MySQL中,相关信息可能存储在单独的表中,但通过使用关联查询来关联。通过使用这种方式,使得数据重复量被最小化。
Mongodb
MongoDB是由MongoDB,Inc.开发的开源数据库。MongoDB将数据存储在类似JSON的文档中,并且文档中每个json串结构可能有所不同。相关信息存储在一起,通过MongoDB查询语言进行快速查询访问。 MongoDB使用动态模式,这意味着您可以在不首先定义结构的情况下创建记录,例如字段或其值的类型。您可以通过添加新字段或删除现有记录来更改记录的结构(我们称之为文档)。该数据模型可以让您轻松地代表层次关系,存储数组和其他更复杂的结构。集合中的文档不需要具有相同的一组字段,数据的非规范化是常见的。 MongoDB还设计了高可用性和可扩展性,并提供了即用型复制和自动分片功能。
Nosql vs SQL
通过上面两个代表我们可以得出结论:
关系型数据库: 通过一个设计好结构的schema来存储数据,这个schema代表了这个数据库的设计,表明的其中的数据之间的关系,在一个结构化的schema中,数据的存储形式是我们熟知的row-column的table(表),取出数据则使用传统的sql语句
非关系型数据库: 在有些场景下,这些数据之间是毫不相干的,比如键值对、文本、图表等所以他们的数据结构可能各式各样,非关系型数据库的出现就很好的弥补了sql的不足,通过key-value的document(文档)来存储数据,另一方面,我们也就不能使用sql语句来取出数据,毕竟他们之间的关系已经不存在了。
存储数据方式对比
sql采用 表 来存储,列表示属性,行代表单个记录,这些表位于数据库内部
在mongodb中,数据被存储在一个集合中,和表类似。一个集合可以包含多条记录,每条记录的存储形式类似json的键值对形式
sql可以通过外键,主键将不同表中的属性关联起来,但是在像mongo这样的非关系数据库中,我们无法创建数据之间的联系,
另外sql遵循ACID原则,即(Atom(原子性)、Consistency(一致性)、Isolation(封闭性)以及Durability(持续性),sql的属性关注与一致性和事务的可靠性
mongodb建立在CAP原则的基础上(一致性,可用性、分区性),CAP关注于数据的可用性
所以,我们可以得出结论:
sql数据库更安全更可靠,mongodb确保了数据的高可用性(在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性))
扩展性
sql数据库通过增加内存容量,磁盘容量或者服务器的计算能力可以实现纵向扩展,但是随着大量的查询,纵向扩展的成本会越来越高
nosql数据库通过分片支持横向扩展,在这种场景下,通过新增服务器而不是新增服务器配置来支持规模扩张,这种方法会相对降低成本,因为是通过廉价的硬件组装在一起来满足昂贵的查询操作
总结
- sql数据库用来存储结构化的数据,nosql反之
- mongodb通过json形式来存储非结构化的数据
- mongodb不支持高级查询和表连接
- mongo核心:灵活文档模型 + 高可用复制集 + 可扩展分片集群
- mongodb使用场景:
1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。
3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。不适用的场景如下:
1)要求高度事务性的系统。
2)传统的商业智能应用。
3)复杂的跨文档(表)级联查询。