MongoDB简述

"MongoDB数据库"

Posted by ming on November 14, 2019

“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 优点

  1. 性能优越:快速!在适量级的内存的 MongoDB 的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
  2. 高扩展:第三方支持丰富(这是与其他的 No SQL 相比,MongoDB 也具有的优势)
  3. 自身的 Failover 机制!
  4. 弱一致性(最终一致),更能保证用户的访问速度
  5. 文档结构的存储方式,能够更便捷的获取数据: json 的存储格式
  6. 支持大容量的存储,内置 GridFS
  7. 内置 Sharding。

1.5 缺点

主要就是无事务的机制。

  1. MongoDB 不支持事务操作(最主要的缺点)
  2. MongoDB 占用空间过大
  3. MongoDB 没有如 MySQL 那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方.

参考文章

MySQL、MongoDB、Redis 数据库之间的区别