浅尝key-value数据库(三)——MongoDB的分布式
浅尝key-value数据库(三)——MongoDB的分布式
测试了单机MongoDB的随机读和写入性能,这一节来讲一讲MongoDB的分布式。
MongoDB的分布式分成两种,一种是Replication,一种是Sharding。我们主要来看一下Sharding。
先贴一张结构示意图:
MongoDB Auto-Sharding的配置非常简单,在不同的机器分别开启shard, config server, mongos的进程即可。(假设config serevr的IP为192.168.1.11)
mongod --shardsvr --dbpath /var/db/mongo_shade --port 10000 --fork --logpath /var/log/mongodb.log --logappend --nohttpinterface
mongod --configsvr --dbpath /var/db/mongo_config/ --port 20000 --fork --logpath /var/log/mongodb_config.log --logappend --nohttpinterface
mongos --configdb 192.168.1.11:20000 --fork --logpath /var/log/mongodb_shard.log --logappend
这里需要注意的是,如果你的多台shard是打算用ip连接,那么mongos中也要用ip连接config server,如果是用机器名,则都要用机器名。不然会报错。
之后使用客户端连接到mongos服务上(默认还是27017端口),进行分布式的设置(假设两台shard的IP分别为192.168.1.12和192.168.1.13,共享数据库a的collection b)
./mongo
MongoDB shell version: 1.6.0
connecting to: test
> use admin
switched to db admin
> db.runCommand( { addshard : "192.168.1.12:10000" } )
{ "shardadded" : "shard0000", "ok" : 1 }
> db.runCommand( { addshard : "192.168.1.13:10000" } )
{ "shardadded" : "shard0001", "ok" : 1 }
> db.runCommand( { enablesharding : "a" } )
{"ok" : 1}
> db.runCommand( { shardcollection : "a.b", key : {_id : 1} } )
{"ok" : 1}
之后用db.runCommand({ listShards : 1}) 或db.printShardingStatus()就可以看到分布式的状态了。
性能测试下来发现速度和未使用分布式的时候速度差不多,插入的数据以chunk_size为单位,插入到某台shade server。有一个单独的Balancer线程比较各个shade server的chunk数,将他们分布平均。这样的算法显然不会提高写入性能。
在测试的过程中发现两个bug。一是当某台shade server断掉再恢复时,Balancer线程运行不正常,也就是说之后所有数据都会往一台上插。。-.- 很挫的bug吧。还有一个是当插入数据部采用safe=True模式(见Python的客户端文档)时,一定时间后某一台server会因Out of Memory被系统kill掉。。不知这两个bug何时能fix掉。
最新文章
- vs使用
- C语言pow函数编写
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:5.安装Oracle RAC FAQ-RAC安装DB软件runInstaller看不到节点
- iOS问题处理:如何在Mac下显示Finder中的所有文件
- FR #2题解
- 关于 Lua 内存泄漏的检测
- POJ 3107
- HDU-2710 Max Factor
- 使用HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
- 拓扑排序 HDU - 5695
- 安装vmware tool时出错
- 解决 React-Native mac 运行报错 error Failed to build iOS project. We ran ";xcodebuild"; command but it exited with error code 65. To debug build logs further, consider building your app with Xcode.app, by ope
- 开源项目福利-github开源项目免费使用Azure PipeLine
- css:伪类和伪元素
- 使用composer遇到的问题及解决方法
- 泛型c#(深入理解c#)
- C#删除和清空文件夹的程序
- libmysqlclient16 libmysqlclient-dev
- 【BZOJ1068】压缩(动态规划)
- == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable