“Every new day begins with possibilities. It’s up to us to fill it with the things that move us toward progress and peace.”
1. 介绍
MongoDB,是一个内存数据库,数据是放在内存里面的。对于数据的操作大部分是在内存中,但是MongoDB并不是单纯的内存数据库。MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
1.1 存储特点
在传统的关系型数据库中,数据是以表单为媒介进行存储的,每个表单均拥有纵向的列和横向的行。而MongoDB以一种直观文档的方式来完成数据的存储。它很像 JavaScript 中定义的 JSON 格式,不过数据在存储的时候 MongoDB 数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做 BSON 的格式,即 Binary-JSON。
1.2 应用场景
在另一方面,对开发者来说,如果是因为业务需求或者是项目初始阶段,而导致数据的具体格式无法明确定义的话,MongoDB的这一鲜明特性就脱颖而出了。相比传统的关系型数据库,它非常容易被扩展,这也为写代码带来了极大的方便。
不过 MongoDB 对数据之间事务关系支持比较弱,如果业务这一方面要求比较高的话,MongoDB 还是并不适合此类型的应用。
非关系型数据库(NoSQL ),属于文档型数据库。先解释一下文档的数据库,即可以存放 xml、json、bson 类型系那个的数据。这些数据具备自述性(self-describing),呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。存储方式为虚拟内存+持久化。
持久化方式:
MongoDB的所有数据实际上是存放在硬盘上的,所有要操作的数据通过mmap的方式映射到内存某个区域。然后,MongoDB就在这块区域里面进行数据修改,避免了零碎的硬盘操作。至于 mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,MongoDB 在内存中修改了数据后,mmap 数据flush到硬盘之前,系统宕机了,数据就会丢失。
1.3 主要特点
- MongoDB 的提供了一个面向文档存储,操作起来比较简单和容易
- 你可以在 MongoDB 记录中设置任何属性的索引 (如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得 MongoDB 有更强的扩展性。
- 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- MongoDB 支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDB 使用 update() 命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- MongoDB 中的 Map/reduce 主要是用来对数据进行批量处理和聚合操作。Map 和 Reduce。Map 函数调用 emit(key,value) 遍历集合中所有的记录,将 key 与 value 传给 Reduce 函数进行处理。 Map 函数和 Reduce 函数是使用 JavaScript 编写的,并可以通过 db.runCommand 或 mapreduce 命令来执行 MapReduce 操作。
- GridFS 是 MongoDB 中的一个内置功能,可以用于存放大量小文件。
- MongoDB 允许在服务端执行脚本,可以用 Javascript 编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C# 等多种语言。
- MongoDB 在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度,毕竟内存的 I/O 效率比磁盘高多了。
MongoDB 以 BSON 结构(二进制)进行存储,对海量数据存储有着很明显的优势。
1.4 优点
- 性能优越:快速!在适量级的内存的 MongoDB 的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
- 高扩展:第三方支持丰富(这是与其他的 No SQL 相比,MongoDB 也具有的优势)
- 自身的 Failover 机制!
- 弱一致性(最终一致),更能保证用户的访问速度
- 文档结构的存储方式,能够更便捷的获取数据: json 的存储格式
- 支持大容量的存储,内置 GridFS
- 内置 Sharding。
1.5 缺点
主要就是无事务的机制。
- MongoDB 不支持事务操作(最主要的缺点)
- MongoDB 占用空间过大
- MongoDB 没有如 MySQL 那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方.
参考文章