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

时间: 2024-08-05 04:26:50

浅尝key-value数据库(三)——MongoDB的分布式的相关文章

浅尝key-value数据库(二)——MongoDB的优与劣

浅尝key-value数据库(二)——MongoDB的优与劣 MongoDB的名字取自英文单词"humongous"的中间五个字母,是一个C++开发的基于分布式文件存储的数据库开源项目.他的文件存储格式是BSON(Binary JSON),因此可以高效存储二进制数据,例如图像.视频等大对象. 由于我是CentOS x86_64的系统,于是安装MongoDB非常简单: vi /etc/yum.repos.d/mongo.repo [10gen] name=10gen Repository

浅尝MongoDB

浅尝MongoDB NoSQL Mongo 数据库 安装mongoDB Linux 以linux环境为例,安装mongodb,最简单的方式就是 利用自带的包管理器 我的环境是 linux deepin 15.4 (基于debian 8) sudo apt install mongodb ~$ mongo -version MongoDB shell version: 3.2.11 当你看到这个说明你的mogodb已经安装完成. Windows 略 windows很容易 去官网下个包,无脑下一步即

浅尝key-value数据库(一)——一览NoSQL

浅尝key-value数据库(一)——一览NoSQL 最近由于一个项目的关系,研究了一下key-value数据库这个最近很火的概念.本系列从项目需求的角度分析并测试了几个key-value数据库的性能. key-value数据库,又称作NoSQL数据库,他的最基本的基础原理就是CAP. CAP是2000年PODC上Eric Brewer提出的一个概念,即 C -> Consistency; A -> Availability; P -> Tolerance to network Part

NoSql数据库初探-mongoDB读操作

MongoDB以文档的形式来存储数据,此结果类似于JSON键值对.文档类似于编程语言中将键和值关联起来的结构(比如:字典.Map.哈希表.关联数组).MongoDB文档是以BOSN文档的形式存在的.BSON是JSON附加了类型信息的一种二进制的表现形式. 文档中的字段可以是任何BSON类型,比如(文档类型.数组.文档数组) MongoDB将所有文档存储在collection中,collection是一组相关的文档集合,这一组文档集合拥有共同的索引,collection类似于关系型数据库中的表.

浅尝ECMAScript6

浅尝ECMAScript6 简介 ECMAScript6 是最新的ECMAScript标准,于2015年6月正式推出(所以也称为ECMAScript 2015),相比于2009年推出的es5, es6定义了更加丰富的语言特性,基于该标准的Javascript语言也迎来了语法上的重大变革.本文列举了部分es6新特性,希望之前没接触es6的小伙伴读完本文能对下一代js编程有一个初步的认识. 箭头函数 箭头函数用 "=>"简化函数定义,类似于C#, Java8中的Lambda表达式,支

xtrabackup 备份mysql数据库三: innobackupex 测试一个全量和两个增量的备份恢复测试

## 查看当前库中表的数据 ([email protected]) [test]>select count(*) from t_innodb; +----------+ | count(*) | +----------+ |        0 | +----------+ 1 row in set (0.00 sec) ## 执行插入数据操作,该操作在全备之后执行完成 ([email protected]) [test]>call addTest(100000,0); ## 执行全库备份 #

NoSql数据库初探-mongoDB环境搭建

NoSQL数据库一改关系型数据库的缺点,更容易的集成.分布式.无模式.故障恢复等特点,正在一步步餐食关系型数据库的市场,作为一个与时俱进的码农了解一下新技术是必须的,尤其是在读了<NoSql精粹>之后,更是想体验一下NoSql数据库的威力. MongoDB是一种文档数据库,也就是说对于领域模型中的每一个聚合来讲,都会作为一个文档来存储. MongoDB有如下优点: 面向文档存储.全索引支持.同步机制和高访问性.自动分片.查询.灵活的聚集和数据处理.映射化简.文件存储.   第一步:安装 从版本

浅尝CKRule规则引擎

最近在参与一家材料公司的ERP系统开发,主要负责仓储系统.由于该公司的业务流程相对复杂且多变,做得那是万般痛苦,成天沉浸在业务变更代码大改的死循环里,久而久之,有种遥遥无期的绝望. 怎样才能很好或者说比较轻松的去适应这样的复杂业务变化?最近真没少在园里看大神们的贴子,但是收获甚微,也许是我个人理解的深度不够.前两天无聊的时候,把心里的唠叨在圈子里发了下,后来有人给我推荐了个叫“CKRule”的规则引擎.规则引擎?小弟孤陋寡闻还是第一次听,一番百度后找到了CKRule的官网,果断下载了试用版.文件

node.js操作数据库之MongoDB+mongoose篇

前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件存储的开源数据库系统.本文为大家详细介绍了如何用node.js + mongoose 玩转MongoDB.希望能帮到有需要的人. 由于我用Mac开发,以下所有操作都是在Mac下进行. 一. 环境搭建 安装Node.js 有 node 环境的可以跳过. nodejs官网提供了 macOS 安装包,直接