浅尝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掉。

最新文章

  1. vs使用
  2. C语言pow函数编写
  3. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:5.安装Oracle RAC FAQ-RAC安装DB软件runInstaller看不到节点
  4. iOS问题处理:如何在Mac下显示Finder中的所有文件
  5. FR #2题解
  6. 关于 Lua 内存泄漏的检测
  7. POJ 3107
  8. HDU-2710 Max Factor
  9. 使用HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
  10. 拓扑排序 HDU - 5695
  11. 安装vmware tool时出错
  12. 解决 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
  13. 开源项目福利-github开源项目免费使用Azure PipeLine
  14. css:伪类和伪元素
  15. 使用composer遇到的问题及解决方法
  16. 泛型c#(深入理解c#)
  17. C#删除和清空文件夹的程序
  18. libmysqlclient16 libmysqlclient-dev
  19. 【BZOJ1068】压缩(动态规划)
  20. == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable

热门文章

  1. dialog组件的jquery封装实现
  2. git配合tortoiseGit的基础使用
  3. DEDE里有个编码问题,不支持PHP5.4及以上版本!
  4. springMVC框架下JQuery传递并解析Json数据
  5. 基于visual Studio2013解决C语言竞赛题之0405阶乘求和
  6. BZOJ 2440 完全平方数
  7. Lua,Lua API,配置文件
  8. 基于内容的图像检索技(CBIR)术相术介绍
  9. 《数据通信与网络》笔记--虚电路网络:帧中继和ATM
  10. 什么是CALayer