MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。在这里我们有必要先简单介绍一下非关系型数据库(NoSQL)。
NoSQL,指的是非关系型的数据库。NoSQL 有时也称作Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL 用于超大规模数据的存储。(例如谷歌或Facebook 每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
关系型数据库PK 非关系型数据库
关系型数据库 | Nosql数据库 |
高度组织化结构化数据 | 代表着不仅仅是sql |
结构化查询语言(sql) | 没有声明行查询语言 |
数据和关系都存储在单独的表中 | 没有预定义的模式 |
数据操作语言,数据定义语言 | 键-值对存储,列存储,文档存储,图形数据库 |
严格的一致性 | 最终一致性,而非ACID属性 |
基础事物 | 非结构化和不可预知的数据 |
CAP定理 | |
高性能,高可用性和可伸缩性 |
NoSQL数据库分类
类型 | 典型代表 | 特点 |
列存储 | Hbase Cassandra Hypertable | 顾名思义,是按照列存储数据的。最大的特点是方便存储结构化和半结构化的数据,方便做数据压缩,对针对谋一列或者某几列的查询有非常大的io优势 |
文档存储 | MongoDB CounchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。 |
Key-value 存储 | MongoDB CounchDB | 文档存储一般用类似json 的格 式存储,存储的内容是文档型的。 这样也就有机会对某些字段建立 索引,实现关系数据库的某些功 能。 |
图存储 | Neo4J FlockDB | 图形关系的最佳存储。使用传统 关系数据库来解决的话性能低 下,而且设计使用不方便。 |
对象存储 | Db4o Versant | 通过类似面向对象语言的语法操 作数据库,通过对象的方式存储 数据。 |
XML 数据库 | Berkeley DB XML BaseX | 高效的存储XML 数据,并存储XML 的内部查询语法, 比如 XQuery,Xpath。 |
MongoDB 的数据结构与关系型数据库数据结构对比
关系型数据库术语/概念 | MongoDB 术语/概念 | 解释/说明 |
Database | Database | 数据库 |
Table | Collection | 数据库表/集合 |
Row | Document | 数据记录行/文档 |
Column | Field | 数据列/数据字段 |
Index | Index | 索引 |
Table joins | 表关联/MongoDB 不支持 | |
Primary Key | Object ID | 主键/MongoDB 自动将_id 设置为 主键 |
MongoDB 中的数据类型
数据类型 | 说明 | 解释 | 举例 |
Null | 空值 | 表示空值或者未定义的对象 | {“X”:null} |
Boolean | 布尔值 | 真或者假: true 或者 false | {“x”:true} |
Integer | 整数 | 整型数值。用于存储数 值。根据你所采用的服务 器,可分为32 位或64 位。 | |
Double | 浮点数 | 双精度浮点值。 | {“x”:3.14,”y”: 3} |
String | 字符串 | UTF-8 字符串 | |
Symbol | 符号 | 符号。该数据类型基本上 等同于字符串类型,但不 同的是,它一般用于采用 特殊符号类型的语言。 | |
ObjectID | 对象ID | 对象ID。用于创建文档 的ID。 | {“id”: ObjectId()} |
Date | 日期 | 日期时间。用UNIX 时 间格式来存储当前日期 或时间。 | {“date”:new Date()} |
Timestamp | 时间戳 | 从标准纪元开始的毫秒 数 | |
Regular | 正则表达式 | 文档中可以包含正则表 达式,遵循JavaScript 的语法 | {“foo”:/testdb/i} |
Code | 代码 | 可以包含JavaScript 代码 | {“x”:function() {}} |
Undefined | 未定义 | 已废弃 | |
Array | 数组 | 值的集合或者列表 | {“arr”: [“a”,”b”]} |
Binary Data | 二进制 | 用于存储二进制数据。 | |
Object | 内嵌文档 | 文档可以作为文档中某个key的value | “x”:{“foo”:”bar”}} |
Min/Max keys | 最小/大值 | 将一个值与BSON(二进 制的JSON)元素的最低 值和最高值相对比。 |