Index
Mongodb
1. 基本概念
1.1. 文档
1.2. 集合
1.3. 数据类型
1.4. _id 和 ObjectId
2. 基本操作
3. 索引介绍
4. 应用场景
4.1. MySQL VS MongoDB
4.2. 应用场景
4.3. 压测结果
4.4. 常见架构
5. 其他
5.1. oplog
使用Docker安装MongoDB
MongoDB用户角色配置
MongoDB是面向文档的数据库,不是关系型数据库。MongoDB的设计采用横向扩展的设计,能自动处理跨集群的数据和负载,自动中心分配文档,以及将用户的请求路由到正确的机器上。 > 基本的思路就是将原来"行"的概念换成更加灵活的"文档"模型。独特功能:
多个键及其关联的值有序地放置在一起便是文档。
集合就是一组文档。如果是MongoDB中的文档类似于关系型数据库的行,那么集合就如同表。
动态模式:一个集合里面的文档可以是各式各样的。正常会放相关类型的文档
子集合: 惯例是使用"." 分隔不同命名空间的子集合(没有任何特别的属性,只是用来命名区分)
内嵌文档可以将比如地址文档嵌入到人员文档中
MongoDB中存储的文档必须有一个_id键,这个键的值可以是任何类型的,默认是个ObjectId对象。
ObjectId的组成:
自动生成的_id:通常在客户端由驱动程序完成,减轻了数据库的负担
TODO
官网文档
插入10000条测试数据
for(i=0;i<10000;i++) {
db.helloworld.insert(
{
"i":i,
"username":"username"+i,
"age":Math.floor(Math.random()*100),
"created":new Date()
});
}
db.COLLECTION_NAME.ensureIndex({KEY:1})
语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可\
复合索引: db.col.ensureIndex({"title":1,"description":-1})
覆盖索引:一个数据库查询,索引覆盖了所有查询的字段,概念与Mysql类似。
隐式索引:针对复合索引,索引具有最左前缀的特,同mysql
索引失效: n i n 、 nin、 nin、ne 等取反的查询,会影响使用索引 与 mysql类似
db.learning.find({
"username" : { "$nin" : ["username110"]}
})
db.learning.find({
"username" : { "$ne" : "^suse.*"}
})
唯一索引: null也是一个唯一索引的值,不可重复
db.helloworld.ensureIndex({
"username":
1
}, {
"unique":
true
});
稀疏索引: 与唯一索引一起使用可以解决null值可为重复的,但是如果字段有值则必须为唯一。
db.helloworld.ensureIndex({
"username":
1
}, {
"unique": true,
"sparse":true
});
db.helloworld.dropIndex("username_1")
查询数组中的值
db.getCollection('form_answer').aggregate([
{
$unwind:{
path:'$answers',
includeArrayIndex: 'index'
}
},{"$match":{"formAnswerId":"139900001"}}
,
{
$project: {
_id: 0,
"questionId": "$answers.questionId",
}
}
])
设计的两个关键,一个重要问题:
缺点:需要两次查询组装数据
缺点:数据更新需要遍历所有文档进行更新,更新过程存在部分数据为旧值的情况
发布订阅:MongoDB提供API接口用于订阅整个数据库中的修改操作
如Java中MongoDBClient提供了Watch()方法用来接收修改的事件
Geo地理位置的数据类型
GridFS:为Mongodb的一种存储机制,可以用来存储大型的二进制文件
- 性能比较低,与文件服务器相比
- 修改GridFS的文档只能先删除再新增。
聚合框架:可以对集合中的文档进行变换和组合
MapReduce:同样用于数据的聚合、映射、归约
在MongoDB中,有一个系统库“Local”,库里有一个集合“oplog.rs”,这个集合类似于binlog文件,里面记录了MongoDB的所有操作。从节点通过读取oplog.rs里的数据做到数据同步。
oplog是local库下的一个固定集合,Secondary就是通过查看Primary 的oplog这个集合来进行复制的。每个节点都有oplog,记录这从主节点复制过来的信息,这样每个成员都可以作为同步源给其他节点。 Oplog 可以说是Mongodb Replication的纽带了。
oplog的相关字段:
“i”: insert
“u”: update
“d”: delete
“c”: db cmd