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)元素的最低 值和最高值相对比。 |
本文深入探讨了MongoDB,一种基于分布式文件存储的数据库,特别适用于Web应用。MongoDB使用C++编写,提供高性能和可扩展性的数据存储解决方案。文章对比了关系型数据库与非关系型数据库(NoSQL)的特点,详细介绍了MongoDB的数据结构、术语和数据类型。
791





