本篇接着上面的四篇继续讲述在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. mysql备份,还原命令

    mysql导出数据1.导出整个数据库mysqldump -u用户名 -p 数据库名 >备份文件2.导出一个表mysqldump -u用户名 -p databaseName tablename & ...

  2. Dalvik虚拟机进程和线程的创建过程分析

    从前面Dalvik虚拟机的运行过程分析一文可以知道,Dalvik虚拟机除了可以执行Java代码之外,还可以执行Native代码,也就是C/C++函数. 这些C/C++函数在执行的过程中,又可以通过本地 ...

  3. WebApi学习总结系列第三篇(Http)此篇持续更新...

    越了解Http对WebApi开发就越有帮助,因为WebApi就是建立在Http基础之上的. 一.Http: 通过 <ASP.NET Web API 2 框架揭秘>一书中 了解到 什么叫We ...

  4. codevs 1557 热浪

    传送门 题目描述 Description 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品.Farmer John此时以先天 ...

  5. Java反射的理解

    反射的作用:   1.运行时检查类的结构 2.运行时更改类的字段值 3.调用类的方法   准备知识:   Class类:虚拟机为每一个对象保存的一份对象所属类的清单: static Class for ...

  6. 高性能页面加载技术(流水线加载)BigPipe的C#简单实现(附源码)

    一,BigPipe简介 BigPipe是一个重新设计的基础动态网页服务体系.大体思路是,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理他们在不同阶段的运行.这是类似于 ...

  7. [BZOJ 3196] 213平衡树 【线段树套set + 树状数组套线段树】

    题目链接:BZOJ - 3196 题目分析 区间Kth和区间Rank用树状数组套线段树实现,区间前驱后继用线段树套set实现. 为了节省空间,需要离线,先离散化,这样需要的数组大小可以小一些,可以卡过 ...

  8. 截断WM_SYSCOMMAND的SC_CLOSE命令(VC与Delphi双版本)

    WM_SYSCOMMAND - 系统命令消息,当点击最大化按钮,最小化按钮,关闭按钮等.都会收到这个消息.常用于窗口关闭时提示用户处理.WPARAM - 具体的命令,例如 关闭 SC_CLOSELPA ...

  9. Haskell缩进规则

    Haskell也是使用缩进来表示一个表达式或者块延伸的范围的,这点与Python类似.Haskell的缩进规则简单总结起来只用下面三条:    1. 源文件中第一个顶级的定义或者声明的缩进,定义了该文 ...

  10. Oracle 字符集的查看和修改 -转

    一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库 ...