mongoDB的读书笔记(via3.0)(05)_【Sharding】(03)_关于Shard Keys与Hash的理论知识小絮叨

紧急出个差,但是又不能不继续写,少写点,先把Shard key和Hash的一些小概念继续写一写。

Shard Keys

mongoDB的Sharding最重要的就是Shard Key。用Shard Key进行分片,并且按照指定的Chunk的大小进行Chunk的分割和移动(后面细说)。Shard Key的一些特点:

Shard Key不可以是multikey index

何为mutikey index?途中的addr[]这个数组就是所谓的mutikey index。Shard key可以是复数个字段,但是不可以是一个数组形的multikey类型的index。

Hash Shard Key

任何带有hash字样的东东就为一个目的:平均打散,高度聚合。

通过hash算法进行散装分配,通过key再迅速找回value。

对于写的横向扩展

Shard key有两个比较重要的指标,一个是分布的基数要广,即每一个collection中都要有;另外一个是要保持“单调性”,比如timestamp,比如mongoDB自己的ObjectId等等。假设我们使用的是一个timestamp来作为Shard Key,可能保证了单调性和基数广,但是这种连续存储的Shard Key很有可能使得所有的数据都是连续存储在同一个Chunk,也就是同一个Shard中,我们可能会有10个Shard节点,但是结果就是可着第一个节点一直在存储,而其余的节点都在休息。

所以,Shard Key还应该有一定的随机性,也就是说在写操作的时候应该能够发挥所有的Shard一起动作,进行类似LB一样的负载。

关于Shard中的查询

对于查询来讲,mongos是提供interface供application进行调用的。程序进行调用后,mongo会在config Server中查找相应的metadata来定位Shard,然后进行查找的工作。所以我们的Shard Key会直接影响到查询的效果和速度。

关于Shard中的独立查找

一般来讲,最快的查询操作是让mongos查找一个Shard。如果一个查询中没有包含Shard Key,那么mongos就会遍历所有的Shards。和我们普通的RDB中没有索引的全表扫描一个效果。而且因为Shard有很多,所以这个查询类似于一个分散操作后再次进行聚合操作的过程,非常费时间。而如果你的Shard Key在检索条件中有体现,那么即便是需要分散查找几个Shard,因为mongos有直接性,会知道到哪里去找,效果也会好得多。所以为collection选定一个Shard key的话,首先要确定查找的时候会经常用到哪些项目,找到这些操作中最有效的依赖关系,比如一个项目可能不是那种很好识别不是可以单独利用充分简单能把数据pick up出来的,那么是否可以增加另一个项目组合起来来扩大可选性,扩大其作为“key”的纯度等等。

关于排序

Shards中的排序其实是有一个merge后的sort的过程。其实很好想,各个Shards返回结果后,merge到一起再进行一个sort。

不可分的Chunk

后面还会细说,有些Chunk可能出现不可进行分解的情况,这很大程度上是是由于Shard key的选定的粒度不好所造成的。

明天要坐高铁。(-?-;) 。。。 后面继续写继续写。

ps,今天给mongo的jira又提Bug了。。

之前傻了吧唧的搞错了一个命令给人家提了人家还挺客气回复说是我搞错了,但是今天看文档看到一个文档的简单miss,哈哈,这次我不会错了。

つづく???

时间: 2024-12-08 10:51:04

mongoDB的读书笔记(via3.0)(05)_【Sharding】(03)_关于Shard Keys与Hash的理论知识小絮叨的相关文章

mongoDB的读书笔记(via3.0)(00)_【概览】(02)_mongoDB3.0中的mongod启动方式小试牛刀

mongod启动 本来想写Replica的非测试模式的集群架构的,但是实在是手痒痒,把mongoDB的3.0给download下来了,看了一两眼文档后决定还是先大概写一点点关于启动的话题,之后写Replica的时候基本上就用mongoDB 3.0的方式+YAML的 配置方式来做了. mongod利用mmapv1启动 这个是default的启动方式.mongod的启动参数多如牛毛,本来想有空总结一下的,我勒个去的,有些估计这辈子也用不到的场景也不知道如何写,等我再考虑一下再说吧. 准备配置文件 s

mongoDB的读书笔记(via3.x)(00)_【概览】(01)_mongoDB3.0的一些变化

先啰嗦啰嗦,真的没想到,mongoDB能这么快推出3.x,我的2.6的读书笔记还没有写完呢,3.0就杀到了,咋办...头疼中... 看了一下3.0的介绍,我觉得还是直接上3.x的读书笔记吧,2.x的东东和3.x的比较着来,这样老的延续的东西也能温习,新的东西也可以马上知道,而且3.x的x到底到几的时候才能变成相对bug fixed版本还不知道,所以一边看着一边看bug fix过程吧.3.0的变化是从底层的数据存储上面发生的变更,存储方式的api可以使得今后增加更多的底层解决方案,根据不同的需求来

【英语魔法俱乐部——读书笔记】 0 序&前沿

[英语魔法俱乐部——读书笔记] 0 序&前沿 0.1 以编者自身的经历引入“不求甚解,以看完为目的”阅读方式,即所谓“泛读”.找到适合自己的文章开始“由浅入深”的阅读,在阅读过程中就会见到各种句型和常见单词,在上下文中学习单词和句型.阅读是积累Input的过程,有了足够的Input才能有Output,从而为写作打下基础. 0.2 异国文化.历史.人文的了解,对实事.政治.新闻.暗语双关文体的理解大有益处. 0.3 <文法俱乐部>是解决句子结构和语法的问题,为阅读和写作打下扎实的基础.&

《梦断代码》读书笔记 第0篇

<梦断代码>读书笔记 第0篇 第0章:软件时间 第1章:死定了 第2章:Agenda之魂 从老师布置这个作业之后,我便按照自己的计划开始阅读识字以来的第一本关于软件工程的小说——<梦断代码>,周一至周五每天睡前读几页. 首先,第一遍从第0章至第1章看完,我愣是不知道书上到底在说些什么,感觉这小说跟教科书一样好催眠,说实话,每次还没看多少行就困得不行了.所以,我看了第二遍(而且还寻思着再看不懂也不看第三遍了),果然,我还是没有与作者产生共鸣.不过,在再次阅读的过程中我勾画了一些给自己

mongoDB的读书笔记(04)_【Replica】(05)_初探Replica set副本集的搭建 By Test模式

Replica set Deployment On Test Mode 为啥是测试模式 实战 先絮叨絮叨操作系统 在一台机器上创建模拟5个节点 进入非db连接模式 建立5个节点的test script 启动所有的节点 配置节点 进入一个节点 配置Replica的config 进行初始化 check心跳和log 查看Replia的详细 查看Secondary Replia的详细 写数据实验 Primary写入 Secondary查看 Replica set Deployment On Test M

mongoDB的读书笔记(05)_【Sharding】(02)_分片的一些概念和小细节

分片的一些概念与细节 Primary Shard 在Replica set中有Primary和Secondary的概念,那么在Sharding中其实也有一个Primary的概念. 任何一个mongoDB中都有一个未分区的整体DB的collection在某一个Shard中.如下图. Collection1在ShardA中有一部分Chunks在ShardB中也有一部分Shards,而在ShardA 中却有一个Collection2保存整体的ShardA+ShardB的Collection1的和. C

《梦断代码》读书笔记第0篇——“软件时间”、“死定了”、“Agenda之魂“

第0章  软件时间 在未读这本书前,刚看到名字觉得是本讲代码的书,后来老师说是一个个的故事,这引起了我的兴趣,于是我便速速开始了第0章的阅读,读完一遍大概能读懂在讲什么,可能由于是译过来的书,书里面一个人的名字我都记不住,更多的专有名词也看不懂(虽然有注释),只是知道大概在讲什么,读完第0章,我感受到了程序员的不易,他们也要承受巨大的挫败感,有的人没放弃,然后他在编程的路上越走越远,有的人放弃了,于是他在这条路上止步不前.现在软件飞速发展,软件开发者必须跟得上时代的脚步,而且我懂得了开发软件是个

读书笔记: 博弈论导论 - 14 - 不完整信息的静态博弈 机制设计

读书笔记: 博弈论导论 - 14 - 不完整信息的静态博弈 机制设计 机制设计(Mechanism Design) 本文是Game Theory An Introduction (by Steven Tadelis) 的学习笔记. 机制设计的概念 机制设计的目标是设计一个可以达到期望收益的博弈. 由于这是根据博弈结果来推导博弈的形式,也被称为反向博弈论(reverse game theory). 这个理论明显在经济和政治方面有很多用途. 我们假象这样一个例子: 某个政府需要设计一个关于化工厂的环

读书笔记: 博弈论导论 - 06 - 混合的策略

读书笔记: 博弈论导论 - 06 - 混合的策略 混合的策略 本文是Game Theory An Introduction (by Steven Tadelis) 的学习笔记. 策略,信念和期望收益 混合策略 玩家i的有限纯策略集合\(S_i = {s_{i1}, s_{i2}, \cdots, s_{im}}\). 将\(\Delta S_i\)定义为\(S_i\)的单纯形,是在\(S_i\)上所有概率分布的集合. 玩家i的一个混合策略(mixed strategy)是\(\sigma_i \