MongoDB的分布式部署
一、分片的概念
分片(sharding)是指根据片键,将数据进行拆分,使其落在不同的机器上的过程。如此一来,不需要功能,配置等强大的机器,也能储存大数据量,处理更高的负载。
二、分片的原理和思想
MongoDB分片的基本思想就是将集合切分成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。
对于客户端来说,无需知道数据被拆分了,也无需知道服务端哪个分片对应哪些数据。数据在分片之前需要运行一个路由进程,进程名为mongos。这个路由器知道所有数据的存放位置,知道数据和片的对应关系。对客户端来说,它仅知道连接了一个普通的mongod,在请求数据的过程中,通过路由器上的数据和片的对应关系,路由到目标数据所在的片上,如果请求有了回应,路由器将其收集起来回送给客户端

二、分片的简单实现
(1)片键的概念
设置分片时,需要从集合里面选一个键,用该键的值作为数据拆分的依据。这个键称为片键(shard key)。
{department:"IT",name:"zhangsan"},{department:"HR",name:"lisi"},{department:"SUPPORT",name:"zhaowu"}
以该数据为例,表示的是职员名字以及所在的部门,假若我们设置部门(department)为片键,那么第一片可能存放名称以字母A-F开头的部门,第二片存放名称以G~P开头的部门,第三片存Q~Z,如此类推。随着添加或者删除片,MongoDB会重新平衡数据,使每片的流量都比较均衡,数据量也在合理范围内。
(2)本地模拟实现
a、首先mongod开启服务端3个节点,端口分别为8080,8081,8082
b、开启config服务器 。mongos要把mongod之间的配置放到config服务器里面,所以首先开启它,这里就使用8083端口。 命令为:
mongod --dbpath E:\sharding\config_node --port 8083
c、开启mongos服务器 。端口8084,同时指定下config服务器。命令为:
mongos --port 8084 --configdb=127.0.0.1:8083
d、 路由指定服务端节点。客户端直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将8080,8081,8082的mongod交给mongos,添加分片也就是addshard()。需要进到路由节点的admin数据库进行配置。allowLocal表示该服务端节点,可被客户端直接连接而无需经过路由。
db.runCommand({"addshard":"127.0.0.1:8080",allowLocal:true})
db.runCommand({"addshard":"127.0.0.1:8081",allowLocal:true})
db.runCommand({"addshard":"127.0.0.1:8082",allowLocal:true})
e、 开启数据库分片功能,命令为enablesharding(),并指定数据库名称,如下指定每个mongod都有的test数据库
db.runCommand({"enablesharding":"test"})
f、 指定集合中分片的片键,这里就指定为company.department键.
db.runCommand({"shardcollection":"company.department","key":{"depatment":1}})
g、 通过向mongos节点插入100万条数据,查看各节点保存的数据。
h、 通过向mongos插入一条数据,查看数据被分配到哪个片
MongoDB的分布式部署的更多相关文章
- Hadoop1 Centos伪分布式部署
前言: 毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...
- ActiveMQ5.14.1+Zookeeper3.4.9高可用伪分布式部署
本文借鉴http://www.cnblogs.com/gossip/p/5977489.html,在此基础上进行了完善,使之成为一个完整版的伪分布式部署说明,在此记录一下! 一.本文目的 ...
- Memcache分布式部署方案
基础环境 其实基于PHP扩展的Memcache客户端实际上早已经实现,而且非常稳定.先解释一些名词,Memcache是danga.com的一个开源项目,可以类比于MySQL这样的服务,而PHP扩展的M ...
- hadoop2.6分布式部署时 livenodes等于1的原因
1.问题描述 在进行hadoop2.x版本的hdfs分布式部署时,遇到了一个奇怪的问题: 使用start-dfs.sh命令启动dfs之后,所有的datanode节点上均能看到datanode进程,然而 ...
- 项目分布式部署那些事(2):基于OCS(Memcached)的Session共享方案
在不久之前发布了一篇"项目分布式部署那些事(1):ONS消息队列.基于Redis的Session共享,开源共享",因为一些问题我们使用了阿里云的OCS,下面就来简单的介绍和分享下相 ...
- 项目分布式部署那些事(1):ONS消息队列、基于Redis的Session共享,开源共享
因业务发展需要现在的系统不足以支撑现在的用户量,于是我们在一周之前着手项目的性能优化与分布式部署的相关动作. 概况 现在的系统是基于RabbitHub(一套开源的开发时框架)和Rabbit.WeiXi ...
- Memcached常规应用与分布式部署方案
1.Memcached常规应用 $mc = new Memcache(); $mc->conncet('127.0.0.1', 11211); $sql = sprintf("SELE ...
- Redis分布式部署,一致性hash
一致性哈希 由于hash算法结果一般为unsigned int型,因此对于hash函数的结果应该均匀分布在[0,2^32-1]区间,如果我们把一个圆环用2^32 个点来进行均匀切割,首先按照hash( ...
- Zabbix监控和分布式部署实施方案
最近在研究Zabbix监控,由于机房分布在多个城市,因此采用zabbix proxy做为监控方案,在每 个节点部署zabbix proxy,由zabbix proxy收集agentd数据,然后将采集到 ...
随机推荐
- JS 拖动原理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【cf490】D. Chocolate(素数定理)
http://codeforces.com/contest/490/problem/D 好神的一题,不会做.. 其实就是将所有的质因子找出来,满足: 最终的所有质因子的乘积相等 但是我们只能操作质因子 ...
- 【BZOJ】1068: [SCOI2007]压缩(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1068 发现如果只设一维的话无法转移 那么我们开第二维,发现对于前i个来说,如果确定了M在哪里,第i个 ...
- Elasticsearch JVM Heap Size大于32G,有什么影响?
0.引言 在规划ES部署的时候,会涉及到data node的分配堆内存大小,而Elasticsearch默认安装后设置的内存是1GB,对于任何一个业务部署来说,这个都太小了. 设置Heap Size的 ...
- c#用run32dll打开系统dll(如系统图片查看器,并置最顶层)
[DllImport("user32.dll", EntryPoint = "SetWindowPos",CharSet = CharSet.Auto)] st ...
- 说说JSON和JSONP 也许你会豁然开朗
说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决 前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只 ...
- Android5.0新特性-Material Design
概述 2014年,Google携Android5.X重装归来.全新的UI设计和更加优化的性能,令开发人员眼前一亮 安装和配置Android5.0开发环境 开发Android还得靠AS.下载地址 htt ...
- TcpClient和Tcplistener
前天去面试,让写这东西 之前的项目也做过这东西,好长时间没看,就给忘了,惭愧!今天重新拾起来,做了个简单的demo Client端 static void Main(string[] args) { ...
- 如何访问局域网的Access数据库?
1]用共享打印机来打开文件共享, 2]把Access文件.mdb所在的文件夹 共享,然后其他的就和本地一样了. 设置如下: Data Source="\\192.168.7.49\user\ ...
- 关于python类型创建、反射(自醒)与反序列化
一.反序列化漏洞与新式类 在pickle和cPickle以及shelve这三个序列化类中,想要构造反序列化漏洞执行命令或者代码,都需要用到新式类. shelve其实底层就是调用的pickle和cPic ...