MongoDB:分片(简介 & 自动分片 & 片键)
分片(增加服务器,水平扩展)是MongoDB的扩展方式,通过分片能过增加更多的机器来应对不断增加的负载和数据,还不影响应用。
【简介】
分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。在关系型数据库中,当一个表太大(超过几亿行数据)时,我们也有分表的做法,和这里的分片是类似的概念。
手动分片:当我们应用的瓶颈出现在数据库系统时,如果我们使用的是关系型数据库,我们通常要进行手动分片。即通过我们的应用层代码去维护与若干个数据库系统的连接,并且每个连接都是独立的。我们应用层代码负责屏蔽底层的多个数据库实例,查询时导向到特定的实例上进行,这种方式有个缺点,就是维护起来太麻烦!比如向底层数据库集群添加或删除节点,调整数据分布和负载模式等,都是对我们这层应用层代码提出不小的挑战!
MongoDB从设计时考虑的就是横向扩展,其支持自动分片!我们可以很轻松的向一个MongoDB数据库服务器集群添加或删除机器,集群会自动切分数据、进行负载均衡!
【自动分片】
“片”是一个独立的MongoDB服务(即mongod服务进程,在开发测试环境中)或一个副本集(在生产环境中)。将数据分片,其思想就是将一个大的集合拆成一个一个小的部分,然后放置在不同的“片”上。每一个“片”只是负责总数据的一部分。自动分片就是:应用层根本不知道数据已被分片,也全然不会知道具体哪些数据在哪个特定的“片”上。在MongoDB中,提供了一个路由服务mongos,在分片之前需要先运行这个服务,这个路由服务具体知道数据和“片”的关系。应用程序和这个路由服务通信即可,路由服务会将请求转发给特定的“片”,得到响应后,路由会收集响应数据,返回给应用层程序。下面两幅图展示了不使用分片和使用分片,用户发送请求的处理路径:
分片前:
分片后:
那我们该何时给我们的老系统(上图)改进为分片后的新系统(下图),通常有如下原则:
1》 机器的磁盘不够用了,数据量太大
2》 单个mongod已经无法满足写数据的性能需要了(这里复习一下,如果想要增加读性能,较好的方案是采用搭建主从结构,且让从节点可以响应查询请求)
3》 想将大量的数据放到内存中提高性能,一台机器的内存大小永远有极限(这就是纵向扩展和横向扩展的区别)
【片键】
设置分片时,需要从集合中选取一个键,用该键作为数据拆分的依据。这个键就称为“片键”。我们可以提供一个简单的例子,对于一个存储人员信息的集合users,我们要将其分片,选择的片键是人员姓名name,则最后分片的结果就可能为:第一片中存放的人员名称是A-F开头的,第二片中是G-P开头的,第三篇中是Q-Z开头的。当用户提交的查询是:db.users.find({"name" : "jimmy"}),该查询请求会分配给第二片进行处理;当用户提交的查询是:db.users.find({"name" : {"$lt" : "j"}},则这个查询请求会被分配给第一片和第二片进行处理;当用户提交的查询并不包含片键的信息,则这个查询会被发送到所有片上进行处理。对于插入操作,路由服务会根据插入文档的键name对应的值将这个请求发送到特定片上进行!这就是片键的作用。
随着数据的增减,可能会出现某一片负载很大,另一片负载轻松的情况,对于这种情况,MongoDB也会自动平衡数据和负载,是最后每片的流量基本相同!
对于选择哪个键作为片键?有个原则就是,片键应该有较多变化的值,如果片键设定为性别,只有“男”和“女”两种值,则这个集合就最多被分为两片,如果集合太大,这种分片不会最终解决效率的问题!这里我们可以看出,片键的选择和创建索引时键的选择原则是相似的,实际使用中,通常片键就是创建索引使用的键!
这里先介绍一下分片的简介和原理等内容,下一篇我们会搭建自己的第一个分片出来!
MongoDB:分片(简介 & 自动分片 & 片键)的更多相关文章
- Mongodb 笔记07 分片、配置分片、选择片键、分片管理
分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...
- mongoDB——自动分片(转)
原文地址:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会 ...
- 13.MongoDB系列之分片简介
1. 分片概念 分片是指跨机器拆分数据的过程,有时也会用术语分区.MongoDB既可以手工分片,也支持自动分片 2. 理解集群组件 分片的目标之一是由多个分片组成的集群对应用程序来说就像是一台服务器. ...
- MongoDB 自动分片 auto sharding
MongoDB部署实验系列文章 MongoDB做为NoSQL数据库,最近几年持续升温,越来越多的企业都开始尝试用MongoDB代替原有Database做一些事情.MongoDB也在集群,分片,复制上也 ...
- 转】MongoDB 自动分片 auto sharding
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/4/ 感谢! MongoDB 自动分片 auto shard ...
- 测试MongoDB的自动分片
MongoDB的自动分片: test库分片配置: db.shards.find(){ "_id" : "shard0000", "host" ...
- MongoDB集群之分片
原文:点击打开链接 MongoDB分片 分片(sharding)是将数据拆分,将其分散在不同的机器上的过程.MongoDB支持自动分片 片键(shard key)设置分片时,需要从集合里面选一个键,用 ...
- Mongodb主从复制/ 副本集/分片集群介绍
前面的文章介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集). Mong ...
- MongoDB Sharding(二) -- 搭建分片集群
在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...
随机推荐
- tomcat 修改默认端口8080 为 80端口
首先,找到你的安装目录,如图: 打开server.xml文件,找到8080,如图: 将 8080 改成你想要的端口,如 80 即可.改完后,记得要重启tomcat! 将端口改成 80 后,访问就不需 ...
- skkyk:题解 洛谷P3865 【【模板】ST表】
我不会ST表 智推推到这个题 发现标签中居然有线段树..? 于是贸然来了一发线段树 众所周知,线段树的查询是log(n)的 题目中"请注意最大数据时限只有0.8s,数据强度不低,请务必保证你 ...
- 【Spring和SpringMVC】自动扫描注解类的问题
尊重原创原文链接:http://blog.csdn.net/u014277445/article/details/52282697 Spring MVC项目中通常会有二个配置文件,spring-ser ...
- 【javascript面试题】之一
1.求y和z的值是多少?<script type="text/javascript">var x = 1;var y = 0;var z = 0;function ad ...
- hdu2063 二分图匹配,匈牙利算法
#include <stdio.h> #include <string.h> int n1,n2,m,ans; ]; //记录V2中的点匹配的点的编号 ]; //记录V2中的每 ...
- BZOJ2780 [Spoj]8093 Sevenk Love Oimaster 【广义后缀自动机】
题目 Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXun was dat ...
- bzoj3743 [Coci2015]Kamp 常州模拟赛d6t2
3743: [Coci2015]Kamp Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 484 Solved: 229[Submit][Status ...
- 济南学习 Day 5 T2 晚
等比数列(sequence) [题目描述] 判断一个数列是否为等比数列. 等比数列的定义为能被表示成a,aq,aq^2,aq^3...的数列,其中a和q不等于0. [输入说明] 输入文件的第一行有一个 ...
- Codeforces 271D - Good Substrings [字典树]
传送门 D. Good Substrings time limit per test 2 seconds memory limit per test 512 megabytes input stand ...
- mongo安装-docker
拉取官方镜像(可以自己使用dockerFile构建): docker search mongo //查询Docker Hub 上的mongo镜像 docker pull mongo // 拉取官方镜像 ...