数据分区

MongoDB中数据的分片是以集合为基本单位的,集合中的数据通过 片键 被分成多部分.

片键

  • 对集合进行分片时,你需要选择一个 片键 , shard key 是每条记录都必须包含的,且建立了索引的单个字段或复合字段,MongoDB按照片键将数据划分到不同的 数据块 中,并将 数据块 均衡地分布到所有分片中.为了按照片键划分数据块,MongoDB使用 基于范围的分片方式 或者 基于哈希的分片方式。

以范围为基础的分片

对于 基于范围的分片 ,MongoDB按照片键的范围把数据分成不同部分.假设有一个数字的片键:想象一个从负无穷到正无穷的直线,每一个片键的值都在直线上画了一个点.MongoDB把这条直线划分为更短的不重叠的片段,并称之为 数据块 ,每个数据块包含了片键在一定范围内的数据.

在使用片键做范围划分的系统中,拥有”相近”片键的文档很可能存储在同一个数据块中,因此也会存储在同一个分片中.

基于哈希的分片

对于 基于哈希的分片 ,MongoDB计算一个字段的哈希值,并用这个哈希值来创建数据块.

在使用基于哈希分片的系统中,拥有”相近”片键的文档 很可能不会 存储在同一个数据块中,因此数据的分离性更好一些.

基于范围的分片方式与基于哈希的分片方式性能对比

基于范围的分片方式提供了更高效的范围查询,给定一个片键的范围,分发路由可以很简单地确定哪个数据块存储了请求需要的数据,并将请求转发到相应的分片中.

不过,基于范围的分片会导致数据在不同分片上的不均衡,有时候,带来的消极作用会大于查询性能的积极作用.比如,如果片键所在的字段是线性增长的,一定时间内的所有请求都会落到某个固定的数据块中,最终导致分布在同一个分片中.在这种情况下,一小部分分片承载了集群大部分的数据,系统并不能很好地进行扩展.

与此相比,基于哈希的分片方式以范围查询性能的损失为代价,保证了集群中数据的均衡.哈希值的随机性使数据随机分布在每个数据块中,因此也随机分布在不同分片中.但是也正由于随机性,一个范围查询很难确定应该请求哪些分片,通常为了返回需要的结果,需要请求所有分片.

均衡

The balancer is a background process that manages chunk migrations. The balancer can run from any of themongos instances in a cluster.

当集群中数据的不均衡发生时,均衡器会将数据块从数据块数目最多的分片迁移到数据块最少的分片上,举例来讲:如果集合 users 在 分片1 上有100个数据块,在 分片2 上有50个数据块,均衡器会将数据块从 分片1一直向 分片2 迁移,一直到数据均衡为止.

The shards manage chunk migrations as a background operation between an origin shard and a destination shard. During a chunk migration, the destination shard is sent all the current documents in the chunk from theorigin shard. Next, the destination shard captures and applies all changes made to the data during the migration process. Finally, the metadata regarding the location of the chunk on config server is updated.

If there’s an error during the migration, the balancer aborts the process leaving the chunk unchanged on the origin shard. MongoDB removes the chunk’s data from the origin shard after the migration completes successfully.

转载于:https://www.cnblogs.com/bonelee/p/6282142.html

mongodb分片介绍—— 基于范围(数值型)的分片 或者 基于哈希的分片相关推荐

  1. MongoDB详细介绍

    一.概述 (1)版本历程 0.x 起步节点 1.x 支持复制集和分片 2.x 更加丰富的数据库功能 3.x 合并了一家专门做数据库引擎的Wired Tiger公司,更加完善的周边生态环境 4.x 支持 ...

  2. 预测数值型数据:回归源码分析(1)

    回归模型比较简单,这里先简单介绍下,后面遇到难点再具体分析. 回归的一般方法: (1)收集数据:采用任意方法收集数据. (2)准备数据:回归需要数值型数据,标称型数据将被转成二值型数据. (3)分析数 ...

  3. 一日一学--如何对数值型特征进行分桶

    点击上方"算法猿的成长",关注公众号,选择加"星标"或"置顶" 总第 120 篇文章,本文大约 1200 字,阅读大约需要 3 分钟 今天这 ...

  4. python中整型_实例介绍Python中整型

    实例介绍Python中整型 Python中有以下几个基本的数据类型: 整数 int 字符串 str 浮点数 float 集合 set 列表 list 元组 tuple 字典 dict 布尔类型 boo ...

  5. Typescript - enum 枚举类型(数值型枚举 / 字符串枚举 / 常量枚举 / 异构枚举 / 计算枚举成员 / 联合枚举和枚举成员类型 / 运行时的枚举 / 环境枚举 / 对象与枚举)教程

    前言 Enums(枚举)是 TypeScript 的少数功能之一,它不是 JavaScript 的类型级扩展,仅支持数字的和基于字符串的枚举. 使用枚举您可以定义一组带名字的常量,并且清晰地表达意图或 ...

  6. efci 计算机网络,数值型关联规则挖掘在网络入侵检测系统中的应用研究

    基于数据挖掘技术的入侵检测技术是近年来研究的热点,目前有不少入侵检测系统中都采用了关联分析和聚类分析的数据挖掘方法,然而很多攻击难以从单个网络连接来判别,如果对多个连接进行分析势必会产生大量的统计信息 ...

  7. 【数据运营】数据分析中,文本分析远比数值型分析重要!(下)

    本文是<数据分析中,文本分析远比数值型分析重要!>的下篇,以一个实际案例来聊文本分析在实际运营如何落地.行为脉络如下:先简要讲述文本分析的分支---情绪分析的基本原理,然后以亚马逊的Kin ...

  8. python 离散化_利用Python将数值型特征进行离散化操作的方法

    利用Python将数值型特征进行离散化操作的方法 如下所示: data = np.random.randn(20) factor = pd.cut(data,4) pd.get_dummies(fac ...

  9. java id值_Java实现数值型ID生成器

    基于Twitter ID 生成策略 每秒能生成几十万条 ID ID 生成要以一种非协作的(uncoordinated)的方式进行,例如不能利用一个全局的原子变量. ID 大致有序,就是说生成时间相近的 ...

最新文章

  1. tkinter之事件绑定
  2. linux netlink 编程示例(一)内核端
  3. 用Ajax将checkbox选中的值发送给后台
  4. python game_Python游戏
  5. 浅谈ARMv7-A协处理器CP15
  6. python匿名函数(lambda)
  7. codeforces-constructive algorithms(构造算法.)
  8. python音乐下载器
  9. htc magic 刷机
  10. 张正友标定法代码解释
  11. [转载]使用 JDBC 连接不同版本 DB2 数据库的兼容性问题
  12. 大数据的核心价值是什么? 本质是什么?
  13. 顺丰旗下丰鸟无人机高薪诚聘海内外英才
  14. python实现语音机器人聊天
  15. apache服务器查看网络爬虫记录的方法说明
  16. 带你学微信小程序开发
  17. OCR文字识别 少数民族文字识别 国外文字识别
  18. A Survey of Zero-Shot Learning: Settings, Methods, and Applications [reading notes]
  19. UCOS-II学习记录
  20. 三极管3种基础接法比较

热门文章

  1. linux服务器的功能需求,Linux下的各种服务器技术及配置 (毕业论文).doc
  2. php SQLite mysql_PHP实现的sqlite数据库连接类
  3. python人工智能算法很难_为什么AI很火,但是落地很难?
  4. 使用lucce分词怎么_真小叮当深度学习:自然语言处理(三)文本处理之分词专题...
  5. php 将二维数组合并,PHP二维数组合并排重的两种方式
  6. 【Java Web开发指南】解析Spring中Ioc和DI(入门Demo)
  7. python【蓝桥杯vip练习题库】ADV-233 队列操作
  8. DeepFake 入门了解
  9. 交互式SQL(数据定义部分)
  10. linux查询python的进程树_如何在Linux中查看所有正在运行的进程