MongoDB是一个开源文档型数据库,其具有高性能、高可用和自动扩展特性
【文档型数据库】
MongoDB里的每条记录都是一个文档,其是一个由键值对组成的数据结构,MongoDB文档类似JSON对象,字段的值也可以包含其他文档、数组和文档数组
{
name: "sue",
age: 26,
status: "A",
groups: ["news","sports"]
}
使用文档的优势有:
- 文档(对象)符合多数编程语言的原生数据类型
- 内嵌的文档和数组可以减少昂贵join的需要
- 动态模式支持文档结构的多样式变化
【关键特性】
1. 高性能
MongoDB提供高效地数据持久化,尤其是:
- 支持内嵌的数据模式以减小数据库的系统IO活动
- 支持索引以加快查询,且可对内嵌的文档和数据创建索引
2. 丰富的查询语言
MongoDB支持丰富的查询语言,除了读写操作(CRUD),还支持:
- 数据聚合
- 文本搜索
- 地理位置查询
3. 高可用
MongoDB的复制能力,称为复本集,提供:
- 自动故障切换
- 数据冗余
一套复本集是一组MongoDB实例,它们存储相同的数据集合,通过冗余来提升数据可用性
4. 水平扩展
MongoDB的核心功能之一,就是其支持水平扩展性:
- 数据分片把数据分布在整个集群中
- MongoDB 3.4支持在分片键的基础上创建数据区,在一个数据平衡的集群中,MongoDB只会把读写请求发送到数据区里的分片上
5. 支持多种存储引擎
MongoDB支持多种存储引擎,例如:
- WiredTiger
- MMAPv1
另外,MongoDB提供插件式的存储引擎API,以支持为MongoDB开发的第三方存储引擎
== 数据库和集合 ==
MongoDB以BSON文档形式存储数据记录在集合中,集合存储在数据库中
【数据库】
MongoDB中,数据库用于保存集合,集合用于保存文档
在mongo shell里,要选择使用的数据库,可发出 use
语句,如下:
> use myDB
如果某个数据库不存在,当第一次存储数据到该库时,MongoDB会自动创建,因为,可以切换到一个尚不存在的数据库,执行以下操作:
> use myNewDB
> db.myNewCollection1.insert( { x: 1 } )
insert()操作即会创建myNewDB库,也会创建myNewCollection1集合,如果它们尚不存在的话
【集合】
MongoDB把文档存储在集合里,集合类似于关系型数据库里的表
如果集合不存在,MongoDB会在第一次对其存储数据时自动创建该集合
> db.myNewCollection2.insert( { x: 1 } )
> db.myNewCollection3.createIndex( { y: 1 } )
insert()和createIndex()操作会创建各自的集合,如果它们尚不存在的话
MongoDB也提供 db.createCollection() 方法来手动创建一个集合,并可带有多个选项,例如集合最大大小,或文档检验规则,如果不需要设置这些选项,可不必手动创建集合,因为在第一次对其存储数据时,MongoDB会自动创建该集合
默认地,MongoDB的集合不须要它的文档都有相同的固定模式,即在同一个集合里的文档不需要有相同的字段和数据类型,不过从MongoDB 3.2开始,可以在update和insert操作时为集合指定文档检验规则
要改变集合中文档的结构,如增加一个新字段、移除已有字段,或将某字段的值改成新的类型,直接以新结构更新文档即可
== 视图 ==
从MongoDB 3.4开始,MongoDB支持通过已经存在的集合创建只读视图,且也可以通过视图再创建出新视图
【创建视图】
创建或定义一个视图的mongo shell命令如下:
> db.createView(,
阅读(996) | 评论(0) | 转发(0) |