NoSQL = Not Only SQL
,支持类似 SQL
的功能, 与 Relational Database
相辅相成。其性能较高,不使用 SQL
意味着没有结构化的存储要求(SQL
为结构化的查询语句),没有约束之后架构更加灵活。
NoSQL
数据库四大家族
Hbase
Key-Value
)存储 Redis
Neo4j
MongoDB
MongoDB
是一个基于分布式文件存储的数据库,由 C++
编写,可以为 WEB
应用提供可扩展、高性能、易部署的数据存储解决方案。
MongoDB
是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富、最像关系数据库的。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。
RDBMS | MongoDB |
---|---|
database(数据库) | database(数据库) |
table(表) | collection( 集合) |
row( 行) | document( BSON 文档) |
column (列) | field (字段) |
index(唯一索引、主键索引) | index (支持地理位置索引、全文索引 、哈希索引) |
join (主外键关联) | embedded Document (嵌套文档) |
primary key(指定1至N个列做主键) | primary key (指定_id field做为主键) |
BSON
是一种类 json
的一种二进制形式的存储格式,简称 Binary JSON
,它和 JSON
一样,支持内嵌的文档对象和数组对象,但是 BSON
有 JSON
没有的一些数据类型,如 Date
和Binary Data
类型。BSON
可以做为网络数据交换的一种存储形式,是一种 schema-less
的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想。
{key:value,key2:value2}
这是一个 BSON
的例子,其中 key
是字符串类型,后面的 value
值,它的类型一般是字符串, double
, Array
,ISODate
等类型。
BSON
有三个特点
MongoDB
使用了 BSON
这种结构来存储数据和网络数据交换。把这种格式转化成一文档这个概念(Document
),这里的一个 Document
也可以理解成关系数据库中的一条记录(Record
),只是这里的 Document
的变化更丰富一些,如 Document
可以嵌套。
MongoDB
中 Document
中可以出现的数据类型
数据类型 | 说明 | 解释说明 | Document举例 |
---|---|---|---|
String | 字符串 | UTF-8 编码的字符串才是 合法的。 | {key:“cba”} |
Integer | 整型数值 | 根据你所采用的服务器, 可分为 32 位或 64 位。 | {key:1} |
Boolean | 布尔值 | 用于存储布尔值(真/ 假)。 | {key:true} |
Double | 双精度浮点值 | 用于存储浮点值 | {key:3.14} |
ObjectId | 对象ID | 用于创建文档的ID | {_id:new ObjectId()} |
Array | 数组 | 用于将数组或列表或多个 值存储为一个键 | {arr:[“a”,“b”]} |
Timestamp | 时间戳 | 从开始纪元开始的毫秒数 | { ts: new Timestamp() } |
Object | 内嵌文档 | 文档可以作为文档中某个 key的value | {o:{foo:“bar”}} |
Null | 空值 | 表示空值或者未定义的对 象 | {key:null} |
Date或者 ISODate | 格林尼治时间 | 日期时间,用Unix日期格 式来存储当前日期或时 间。 | {birth:new Date()} |
Code | 代码 | 可以包含JS代码 | {x:function(){}} |
File | 文件 | 1、二进制转码(Base64)后存储 ( <16M ) 2、GridFS(>16M) | GridFS 用两个集合来存储一个文件:fs.files与 fs.chunks 真正存储需要使用mongofiles -d gridfs put song.mp3 |