公司项目数据库用的是MySQL和MongoDB这两个数据库。我还记得面试的时候问到MongoDB这个知识点,当时支支吾吾的讲不出太多,这次改bug,因为不熟悉MongoDB数据库遇到了一些小困难,所以抽时间补一补MongoDB。
什么是MongoDB?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 1.在高负载的情况下,添加更多的节点,可以保证服务器性能。 2.MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 3.MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。
功能特性
面向集合 数据被分组到若干集合,这些集合称作聚集(collections). 在数据库里每个聚集有一个唯一的名字,可以包含无限个文档 模式自由 无需知道存储数据的任何结构定义 文档型 存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档 支持动态查询 支持完全索引,包含内部对象 支持复制和故障恢复 使用复制可以将数据副本保存到多台服务器上 基于副本集,即使一台或多台服务器出错,也可以保证应用程序正常运行和数据安全 高效的二进制数据存储,包括大型对象(比如视频) 支持分片 指将用户拆分,将其分散存放在不同机器上的过程,用于处理更大的负载 支持自动分片 支持多语言 Java、Ruby、C++、PHP、Python、JavaScript等
优点:
1.更高的写负载
2.处理超大规模的单表
3.不可靠环境保证高可用性
4.使用基于位置的数据查询,查询速度快
5.非结构化数据的爆发增长
表格大于1GB的情况下,添加1个新的字段不会对表格有任何影响,这个过程会非常快速
缺点:
1.不支持事务
2.磁盘空间占用过大
3.删除记录不释放空间
MongoDB与MySQL的对比
数据库 | MongoDB | MySQL |
数据库模型 | 非关系型 | 关系型 |
存储方式 | 以类JSON的文档的格式存储 | 不同引擎有不同的存储方式 |
查询语句 | MongoDB查询方式(类似JavaScript的函数) | SQL语句 |
数据处理方式 | 基于内存,将热数据存放在物理内存中,从而达到高速读写 | 不同引擎有自己的特点 |
事务性 | 仅支持单文档事务操作,弱一致性 | 支持事务操作 |
占用空间 | 占用空间大 | 占用空间小 |
join操作 | MongoDB没有join | MySQL支持join |