MongoDB介绍
MongoDB是一个基于分布式文件存储的开源文档数据库。由C++语言编写。旨在为WEB应用提供高性能、高可用性和高伸缩数据存储解决方案。
MongoDB优点
MongoDB使用场景
-
数据缓存
由于性能很高,MongoDB适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB搭建的持久化缓存层可以避免下层的数据源过载。
-
对象和json存储
MongoDB的BSON(二进制JSON)数据格式非常适合文档化格式的存储及查询,而且JSON格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代,灵活的模式让你不在为了不断变化的需求而去频繁修改数据库字段和结构。
-
高伸缩性场景
MongoDB通过分片集群,使MongoDB服务能力易于水平扩展。
-
弱事务类型业务
MongoDB不支持多文档事务,所以像银行系统这种需要大量原子性复杂事务的程序不适合使用MongoDB。(注:MongoDB 4.0将支持跨文档的事务)。
MongoDB概念
通过和关系型数据库mysql的对照,让我们更容易的理解MongoDB的一些概念
关系型数据库(sql)概念 | MongoDB概念 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据行/文档 |
column | filed | 数据字段/域 |
index | index | 索引 |
数据库
-
一个MongoDB中可以建立多个数据库。
-
MongoDB的默认数据库为"db",该数据库存储在data目录中
集合
-
集合名不能以"system."开头
-
关系型数据库中的表(table)中的每一条数据(row)的格式是事先约定好的的,而MongoDB中的集合(collection)中文档(document)的数据格式是不固定的,也就是说我们可以将如下数据插入统一文档中。
{
"site":"www.wuhuan.me"}
{
"site":"www.baidu.com","name":"百度"}
文档
- 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)
例如:在关系型数据库中有一张students表和course表,表的结构和数据如下:
students表
id | name | sex | age |
---|---|---|---|
1 | 李雷 | 0 | 12 |
2 | 韩梅梅 | 1 | 12 |
course表
id | course_id | course_name | score | user_id |
---|---|---|---|---|
1 | 1 | 语文 | 99 | 1 |
2 | 2 | 数学 | 100 | 1 |
3 | 1 | 语文 | 96 | 2 |
4 | 2 | 数学 | 98 | 3 |
以上数据和结构在MongoDB中可以使用内嵌文档来表示(一对多)的关系:
{
"_id":ObjectId("5349b4ddd2781d08c09890f3"),
"name":"李雷",
"sex":"0",
"age":"12",
"course":[{
"course_id":1,
"course_name":"语文",
"score":99,
},{
"course_id":2,
"course_name":"数学",
"score":100,
}]
}
{
"_id":ObjectId("5349b4ddd2781d08c09890f4"),
"name":"韩梅梅",
"sex":"1",
"age":"12",
"course":[{
"course_id":1,
"course_name":"语文",
"score":96,
},{
"course_id":2,
"course_name":"数学",
"score":98,
}]
}
- 文档中的键/值对是有序的,文档中的键是不能重复,且区分大小写。
数据类型
数据类型 | 描述 |
---|---|
String | 字符串。存储数据常用的数据类型。在 MongoDB 中 |