本篇接着上面的四篇继续讲述在window平台下mongodb的分片集群搭建。

在分片集群中也照样能够创建索引,创建索引的方式与在单独数据库中创建索引的方式一样。因此这不再多说。本篇主要聚焦在分片键的选取问题上。

分片键通俗来说就是切割海量数据的标记符。 假设更高效的划分海量数据往往依赖于分片键的选择。 分片键选得不好。应用程序就无法利用分片集群所提供的诸多优势。

在这样的情况下。查询和插入得系能都回显著下降。

一、低效的分片键

1.1 分布差

BSON对象ID是每一个mongodb文档的默认主键。

全部的对象ID最重要的组成部分是时间戳。也就是说对象ID是升序的,遗憾的是升序对于分片键来说是非常糟糕的。因为分片是基于范围的。使用升序的分片键后。全部近期插入的文档会落在某个非常小的连续范围内。假设想让插入负载分不到多个分片上,就不能使用升序分片键。应需某些随机性更强发的的东西。

1.2 缺乏局部性

升序分片键由明白的方向,全然随机的分片键根部没有方向。前者无法分散插入。而后者则可能将插入分散太慢。

如果分片集合中每一个文档都包括一个MD5,而MD5字段就是分片键。由于MD5随着文档的不同而进行变化。

全部该分片键能确保插入的文档均匀分布在集群的分片上。

可是有个问题,对于每一个分片的MD5字段索引进行的插入过程中。索引中每一个虚拟内存分页都有可能被訪问到。

这就意外着有可能全部的索引和数据都装在内存中。从而超出了物理内存。

3. 无法拆分的块

  随机分片键和升序分片键都不好用。那么就尝试一下粗粒度分片键。

举个样例,比如用户Id上传了100张照片。那么分片键就是用户ID。第一原因对于每张照片来说具有随机性,同一时候能够通过局部性引用来提升效率。但有个问题就是当用户ID上传的照片太大时候,以至于不得不分块。而系统又不能把一个用户的照片拆分成多个快。


二、理想的分片键


通过上面分析。理想的分片键应该满足: 

1. 将插入数据均匀分布到各个分片上
2.保证crud操作可以利用局部性
3. 有足够的粒度进行块划分

举个样例:创建一个站点分析系统,一个不错的数据模型就是每一个网页每月保存一个文档。随后在那个文档中保持该月每天的数据,每次訪问某个页面添加一些计数器字段。

以下是于分片键有关的实例分析文档:


   _id: objectId("34535353245eraf32223sdarwe")
  domin:"org.mongod"
  url:"download"
 perid:"2011-12"

最简单的分片就是包括每一个网页的域名。随后是url{domain:1, url:1}全部来自指定域的页面通常都落在一个分片上。可是一些特殊的域拥有大量页面,在必要时候仍会被拆分到分片上。



备注:本篇内容大多引自《MongoDB in action》 Kyle Banker著 




【MongoDB】在windows平台下mongodb的分片集群(五)的更多相关文章

  1. 【MongoDB】在windows平台下mongodb的分片集群(六)

    在本篇博客中我们主要讨论下博客的管理.因为已经在前面五篇中写了具体的实例,因此这里就不再举例说明. 一.监控 分片集群是整个体系中比較复杂的一块,因此更应该须要监控. 主要命令: serverstat ...

  2. MongoDB最新4.2.7版本三分片集群修改IP实操演练

    背景 重新组网,需要对现有MongoDB分片集群服务器的IP进行更改,因此也需要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的通过配置来进行,需要一番折腾 ...

  3. mongodb 通过mongodump来备份Sharded Cluste分片集群

    1,mongodb所有组件官方文档地址:https://docs.mongodb.com/manual/reference/command/,所有的基础组件都在里面,包括备份恢复的mongodump. ...

  4. windows平台下MongoDB安装和环境搭建

    下载安装包或者压缩包 添加db存储和日志存储文件夹 添加服务.配置环境变量.启动Mongo 本例:安装路径:D:Program Files/MongoDB 配置文件的路径:D:MongoDB 一.安装 ...

  5. MongoDB 分片集群搭建

    一.概述 分片是一种在多台机器上分配数据的方法.MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作.有两种解决系统增长的方法:垂直扩展和水平扩展. 垂直扩展涉及增加单个服务器的容量,例如使用 ...

  6. 【MongoDB】在windows平台下搭建mongodb的分片集群(二)

    在上一片博客中我们讲了Mongodb数据库中分片集群的主要原理. 在本篇博客中我们主要讲描写叙述分片集群的搭建过程.配置分片集群主要有两个步骤.第一启动全部须要的mongod和mongos进程. 第二 ...

  7. MongoDB在windows平台分片集群部署

    本文转载自:https://www.cnblogs.com/hx764208769/p/4260177.html 前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多 ...

  8. MongoDB部署实战(一)MongoDB在windows平台分片集群部署

    前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多类型,错误的,操作的,...用MongoDB存储日志,大量的日志产生,大量读写吞吐量很大的时候,单个Server很 ...

  9. Windows 搭建MongoDB分片集群(二)

    在本篇博客中我们主要讲描述分片集群的搭建过程.配置分片集群主要有两个步骤,第一启动所有需要的mongod和mongos进程.第二步就是启动一个mongos与集群通信.下面我们一步步来描述集群的搭建过程 ...

随机推荐

  1. myeclipse 项目运行时报错:运行项目时报错:Could not publish server configuration for Tomcat v6.0 Server at localhost. Multiple Contexts have a"/"

    1.先去E:\PLZT\workspace\.metadata\.plugins\org.eclipse.wst.server.core.sever.xml看里面是否存在两个配置是的话删除一个重启服务 ...

  2. CAS单点登录(SSO)完整教程

    转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...

  3. C# mvc 验证码3

    //// <summary> /// 生成验证码 /// </summary> /// <param name="length">指定验证码的长 ...

  4. php100视频教程解压密码

    php100-75-vip.rar 解压密码:php100-18293-2938-2839-348-#php100-76_u.rar 解压密码:php100-18634-6254-1001-283-# ...

  5. 我是如何学习NodeJs

    实际上在开始的时候我已经对NodeJS有了一定的了解. 比如我知道它是居于Javascript语言的服务器端web Server,比如我知道它的优势在于它的性能,而造成性能优异的原因在于高效的V8引擎 ...

  6. Spring的applicationContext.xml文件

    以下是详解Spring的applicationContext.xml文件代码:<!-- 头文件,主要注意一下编码 --><?xml version="1.0" e ...

  7. android 判断程序是首次(第一次)进入

    很多时候,我们需要判断用户是不是第一次进入程序,以决定是不是给用户一些操作提示. 这种功能的实现,说到底还是将数据(一个标志位)存储起来,下次进入程序的时候读取数据进行判断. 我这里只给出一种较简单的 ...

  8. Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果

    1. 背景 在Java5的多线程中,可以使用Callable接口来实现具有返回值的线程.使用线程池的submit方法提交Callable任务,利用submit方法返回的Future存根,调用此存根的g ...

  9. java学习面向对象之多态

    如何理解多态,让我们举个例子来描述一下,因为单纯的说多态大家可能不理解: abstract class Animal { ; abstract void eat(); public void run( ...

  10. HDwiki文件上传导致远程代码执行漏洞

    漏洞版本: HDwiki(2011) 漏洞描述: 互动维客开源系统(HDwiki)作为中国第一家拥有自主知识产权的中文维基(Wiki)系统,由互动在线(北京)科技有限公司于2006 年11月28日正式 ...