MongoDB数据库基础知识
1、数据库简介
数据库简单而言就是一个存放数据的仓库。这个仓库是按照一定的数据结构来组织、存储的,我们可以通过数据库提供的多种方式来管理数据库里的数据。
数据库历史悠久,分类繁多,功能各异。目前来看,大体可以分为两类:关系型数据库和非关系型数据库。
关系型数据库
关系型数据库模型是把复杂的数据结构归结为简单的二元关系,即二维表格形式:有行和列的概念。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联表的表格分类、合并、连接或选取等运算来实现数据的管理。
其中的典型代表就是 MySQL 和 Oracle ,后者所属的美国甲骨文软件系统公司每年凭借该产品可创造数百亿美元的市场价值。
非关系型数据库
非关系型数据库也被称为 NoSQL 数据库。NoSQL 的本意是 Not Only SQL ,意为 “不仅仅是 SQL” ,并非 “不是 SQL” 。因此,NoSQL 的产生并不是要与关系型数据库对立,而是作为传统关系型数据库的一个补充。NoSQL 数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
相比关系型数据库,NoSQL 存储数据时不支持太多约束,且各个文档集合之间没有紧密联系,尤其擅长超大规模数据的存储。
随着互联网 Web2.0 动态网站的兴起,传统的关系型数据库在应付规模日益扩大的海量数据时会显得力不从心,暴露了很多难以克服的问题,传统的关系型数据库 IO 瓶颈、性能瓶颈都难以有效突破。于是开始出现了大批针对特定场景、以高性能和使用便利为目的的功能特异化的数据库产品。NoSQL 数据库就是在这样的情景中诞生并得到了非常迅速的发展。NoSQL 不将数据的一致性作为重点,或者是作为次重点。
2、MongoDB简介
MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点可以保证服务器性能。MongoDB 旨在为 Web 应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由 Key-Value 键值对组成。MongoDB 文档类似于 JSON 对象,字段值可以包含其它文档、数组,如下图所示:

其中的 Value 支持多种数据类型,包括 Double 、String 、Object 、Array 、Date 等等。
MongoDB 是一个介于关系数据库和非关系数据库之间的数据存储工具,是非关系数据库当中功能最丰富、最像关系型数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。MongoDB 是一个面向文档集合的、模式自由的非关系型数据库。
3、MongoDB的特点
MongoDB 的主要特点如下:
- 是一个面向文档存储的数据库,操作起来比较简单和容易。
- 支持设置任何属性的索引以实现更快的排序和查询操作。
- 可以通过本地或者网络创建数据镜像,这使得 MongoDB 有更强的扩展性。
- 分布式设计,支持增加节点以提升存储空间。
- 支持丰富的查询表达式,查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。
- Map/Reduce 用来对数据进行批量处理和聚合操作。
- GridFS 用于存放大量小文件。
- 允许在服务端执行脚本,可以用 Javascript 编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- 支持 Ruby 、Python 、Java 、C++ 、PHP 、C# 等多种编程语言。
4、MongoDB的使用场景
MongoDB 的使用场景:
- 网站数据:MongoDB 非常适合实时的插入、更新与查询数据,并具备网站实时数据存储所需的复制及高度伸缩性。
- 缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之前,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载。
- 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
- 高伸缩性的场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB 的路线图中已经包含对 MapReduce 引擎的内置支持。
- 用于对象及 JSON 数据的存储:MongoDB 的 BSON 数据格式非常适合文档化格式的存储及查询。