浅尝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掉。
浅尝key-value数据库(三)——MongoDB的分布式的更多相关文章
- 浅尝key-value数据库(二)——MongoDB的优与劣
浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源 ...
- 浅尝key-value数据库(一)——一览NoSQL
浅尝key-value数据库(一)——一览NoSQL 最近由于一个项目的关系,研究了一下key-value数据库这个最近很火的概念.本系列从项目需求的角度分析并测试了几个key-value数据库的性能 ...
- NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用
业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...
- NOSQL数据库之MongoDB
一.NoSQL概述 如今,大多数的计算机系统(包括服务器.PC.移动设备等)都会产生庞大的数据量.其实,早在2012年的时候,全世界每天产生的数据量就达到了2.5EB(艾字节,).这些数据有很大一部 ...
- 浅尝Spring注解开发_自定义注册组件、属性赋值、自动装配
Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含自定义扫描组件.自定义导入组件.手动注册组件.自动注入方法和参数.使用Spring容器底层组件等 配置 @Confi ...
- 浅尝Spring注解开发_Servlet3.0与SpringMVC
浅尝Spring注解开发_Servlet 3.0 与 SpringMVC 浅尝Spring注解开发,基于Spring 4.3.12 Servlet3.0新增了注解支持.异步处理,可以省去web.xml ...
- 浅尝ECMAScript6
浅尝ECMAScript6 简介 ECMAScript6 是最新的ECMAScript标准,于2015年6月正式推出(所以也称为ECMAScript 2015),相比于2009年推出的es5, es6 ...
- 浅谈如何用Java操作MongoDB
NoSQL数据库因其可扩展性使其变得越来越流行,利用NoSQL数据库可以给你带来更多的好处,MongoDB是一个用C++编写的可度可扩展性的开源NoSQL数据库.本文主要讲述如何使用Java操作Mon ...
- 免费试用MongoDB云数据库 (MongoDB Atlas)教程
众所周知,MongoDB包括社区版和企业版,但不止如此,MongoDB公司还有MongoDB Atlas:Database as a Service. MongoDB Atlas delivers t ...
随机推荐
- 「OC」 基本语法
一.OC简介 在C语言的基础上,增加了一层最小的面向对象语法:完全兼容C语言:可以在OC代码中混入C语言代码,甚至是C++代码:可以使用OC开发Mac OS X平台和iOS平台的应用程序. 二.OC语 ...
- Nginx中location配置[转]
关于一些对location认识的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我 ...
- beta分布
http://blog.csdn.net/sweetrryy/article/details/6436358
- jQuery tablesort插件推荐
搜索结果的第一条网址(似乎是Official Site)似乎有问题(也可能是我弄错了 总之chrome中有个叉叉) 所以还是用这个吧http://mottie.github.io/tablesort ...
- 完整的RecylerView的使用方法和例子
一.RecylerView的特点 1. 不关心Item是否显示在正确的位置,通过设置不同LayoutManager 的实例让Item显示不同的风格. 2. 不关心 Item间如何分离.要定义It ...
- for循环语句之求和,阶乘,求偶,求n次篮球蹦起高度
for循环语句格式: ;;/*循环条件*/i++/*状态改变*/) { //循环体,执行代码:(break;跳出循环体) } for 穷举法用循环把各种可能的情况都走一遍,然后用if条件把满足要求的结 ...
- 转化为用欧几里得算法判断互质的问题D - Wolf and Rabbit
Description There is a hill with n holes around. The holes are signed from 0 to n-1. A rabbit must h ...
- django中上传图片的写法
view参数 @csrf_exemptdef before_upload_avatar(request): before = True return render_to_response( ...
- CPU保护模式深入探秘
原文链接为:http://www.chinaunix.net/old_jh/23/483510.html 保护方式的体系结构 主要问题: 保护方式的寄存器模型 保护 ...
- Android Matrix(坐标矩阵)
Android Matrix 2016-02-26 14:38:10 介绍 中文名:坐标矩阵 高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matr ...