本篇接着上面的四篇继续讲述在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. .net中String是引用类型还是值类型 以及 C#深层拷贝浅层拷贝

    http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html http://www.cnblogs.com/zwq194/archive/20 ...

  2. linux 查看端口号命令

    Linux下如果我们需要知道2809号端口的情况的话,我们可以这样,如下命令: $netstat -pan|grep 24800 tcp        0      0 0.0.0.0:24800   ...

  3. 【读书笔记】【CLR via C#】【第一章】The CLR’s Execution Model

    内容提要 本章的目的是对.Net 框架的设计做一个总体的介绍,包括介绍框架中使用的一些技术.定义一些术语.同时会展示从源代码生成应用程序(或者一些包含了一些自定义类型的可以发布的组件),并且会解释程序 ...

  4. iOS 中KVC、KVO、NSNotification、delegate 总结及区别-b

    1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.KVO 就是基于 KVC 实现的 ...

  5. 关于Android中传递数据的一些讨论--备用

    在Android中编写过程序的开发人员都知道.在Activity.Service等组件之间传递数据(尤其是复杂类型的数据)很不方便.一般可以使用Intent来传递可序列化或简单类型的数据.看下面的代码 ...

  6. String、StringBuffer和StringBuilder——个人学习

    1.首先说一下他们的名称区别: String——字符串常量,StringBuffer——字符串变量(线程安全),StringBuilder——字符串变量(非线程安全) 从名称就可以很明显的看出他们的基 ...

  7. UFLDL教程之(一)sparseae_exercise

    下面,将UFLDL教程中的sparseae_exercise练习中的各函数及注释列举如下 首先,给出各函数的调用关系 主函数:train.m (1)调用sampleIMAGES函数从已知图像中扣取多个 ...

  8. 【HTTP】HTTP access control (CORS)

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS Cross-site HTTP requests are H ...

  9. 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

    初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...

  10. lua metatable和metamethod元表和元方法

    Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时, ...