mongodb分库
来源:互联网 发布:修真四万年 知乎 编辑:程序博客网 时间:2024/06/18 14:28
mongodb
目录[-]
- 测试机配置
- mongodb
- 分库前测试结果
- 给常用查询的字段加索引
- 分库
- 添加replicaset集群
测试机配置
- SAS 硬盘
- 16GB内存
- 千兆网
- 8 cores cpu
mongodb
- 版本: 2.2.3
- replicaset: 3台物理机
- driver:pymongo2.5.2(w=2,safe=True,use_greenlets)
分库前测试结果
之前有测试过mongodb的读写性能 对于单条数据比较小的应用场景 非常适合 读写的吞吐量很不错但是我们的应用场景是单条数会超过1MB 实际测试下来的结果是写锁非常严重 吞吐量保持在20qps左右但是mongodb的CPU占用率不到70% 内存占用量在40% - 50% 磁盘IO也未到瓶颈mongostate
查看状态的时候 写锁的比例非常高
给常用查询的字段加索引
开始测试时 没有给查询的字段加索引 使用explain
的结果如下:
viewsourceprint?
01
db.users.find({
'uid'
:
'123456789'
}).explain()
02
{
03
"cursor"
:
"BasicCursor"
,
04
"isMultiKey"
:
false
,
05
"n"
:
0
,
06
"nscannedObjects"
:
2
,
07
"nscanned"
:
2
,
08
"nscannedObjectsAllPlans"
:
2
,
09
"nscannedAllPlans"
:
2
,
10
"scanAndOrder"
:
false
,
11
"indexOnly"
:
false
,
12
"nYields"
:
0
,
13
"nChunkSkips"
:
0
,
14
"millis"
:
9
,
15
"indexBounds"
: {},
16
}
在查询的时候 使用的是BasicCursor
没有对查询uid
添加索引导致查询时需要遍历所有的ns
添加索引db.users.ensureIndex({'uid':1})
后 再看查询的解释
viewsourceprint?
01
db.users.find({
'uid'
:
'123456789'
}).explain()
02
{
03
"cursor"
:
"BtreeCursor uid_1"
,
04
"isMultiKey"
:
false
,
05
"n"
:
0
,
06
"nscannedObjects"
:
0
,
07
"nscanned"
:
0
,
08
"nscannedObjectsAllPlans"
:
0
,
09
"nscannedAllPlans"
:
0
,
10
"scanAndOrder"
:
false
,
11
"indexOnly"
:
false
,
12
"nYields"
:
0
,
13
"nChunkSkips"
:
0
,
14
"millis"
:
0
,
15
"indexBounds"
: {
16
"uid"
: [
17
[
18
"123456789"
,
19
"123456789"
20
]
21
]},
22
}
添加索引后 吞吐有一定的提升 但是非常有限 我们测试的主要场景是大量的更新操作查看mongostat
的结果 还是写锁严重
分库
mongodb在2.2后的写锁是数据库级别的 所以我们尝试着进行分库 在单个replicaset集群上部署多个数据库然后进行测试 实际的测试结果为 写锁被分散到多个数据库上 但是local这个数据库的写锁比例突然上升了很多 能到120%+
查看local这个数据库 里面存的数据
viewsourceprint?
1
switched to dblocal
2
dds:PRIMARY> showcollections;
3
me
4
oplog.rs
5
replset.minvalid
6
slaves
7
system.indexes
8
system.replset
上述collections中 me是mongodb的host信息 slaves里面存了secondary和oplog同步的信息opslog.rs里面记录的是oplog 怀疑是oplog同步导致local写锁比例上升
添加replicaset集群
为了验证上述猜测 我们在测试的三台物理机上又搭建了一个replicaset 然后再进行测试 结果非常好 local写锁有明显下降吞吐量提高到150qps
0 0
- mongodb分库
- mongodb分片时的片键选择
- 分库 分表
- 分库
- 分库
- sql分库、分表
- 数据库分库、分表
- 分表和分库
- 初始分库--分表
- mysql 分表,分库
- 数据库分库、分表
- mysql分库 分表
- MongoDB和MySQL性能测试及其结果分…
- MongoDB分表与分片选择的一次实践
- Mongodb文档中字段是否有先后顺序之分?
- 分库备份+分库恢复
- MySql 分区 分库 分表
- mysql分库、分表、分区
- mongodb集群与分片的配置说明
- android 样式简单介绍
- mongodb数据库导入导出
- mongodb与mysql命令对比
- DIV+CSS区块框浮动设计
- mongodb分库
- mongodb常用管理命令
- MongoDB与内存
- java自定义注解
- 卡特兰数
- mongodb架构mongodb分片集群与简易…
- MongoDB基本管理命令
- linux下八步安装mongodb数据库
- windows下安装redis