海量数据处理 – 十亿个数中找出最大的一千0个数(top K难点)(转)

CentOS编写翻译安装MongoDB http://www.linuxidc.com/Linux/2012-02/53834.htm

(二)单机+多核+丰富大内部存款和储蓄器

       
那时能够直接在内部存款和储蓄器总使用Hash方法将数据划分成n个partition,每一个partition交给八个线程处理,线程的拍卖逻辑同(壹)类似,最终八个线程将结果归并。

       
该情势存在一个瓶颈会显明影响成效,即数据倾斜。每种线程的处理速度也许两样,快的线程须求等待慢的线程,最后的处理速度取决于慢的线程。而针对性此难点,化解的格局是,将数据划分成c×n个partition(c>一),每种线程处理完当前partition后主动取下一个partition继续处理,知道全数数据处理实现,最终由二个线程举行归并。

用户名:ftp1.linuxidc.com

(三)单机+单核+受限内部存款和储蓄器

       
那种气象下,须要将原数据文件切割成二个二个小文件,如次啊用hash(x)%M,将原来的小说件中的数据切割成M小文件,假使小文件仍大于内存大小,继续应用Hash的办法对数据文件实行私分,知道各类小文件小于内部存款和储蓄器大小,那样各类文件可停放内部存款和储蓄器中处理。选取(1)的秘诀依次拍卖每一种小文件。

假定运维符合规律,你会面到每隔拾秒YCSB打印一下当下情状,包蕴每秒的并发率以及平均响应时间。
如:
Loading workload…  
Starting test.    
0 sec: 0 operations;    
mongo connection created with localhost:27017/ycsb    
10 sec: 67169 operations; 7002.16 current ops/sec; [INSERT
AverageLatency(us)=4546.87]    
20 sec: 151295 operations; 7909.24 current ops/sec; [INSERT
AverageLatency(us)=3920.9]    
30 sec: 223663 operations; 7235.35 current ops/sec; [INSERT
AverageLatency(us)=4422.63]

top K问题

       
在广泛数据处理中,经常会遇到的一类题材:在海量数据中找出出现频率最佳的前k个数,也许从海量数据中找出最大的前k个数,这类难点普通被称作top
K难点。例如,在检索引擎中,计算搜索最吃香的13个查询词;在歌曲库中执会考查计算局计下载最高的前10首歌等。

        针对top
K类难题,平常相比好的方案是分治+Trie树/hash+小顶堆(就是地方提到的最小堆),即先将数据集根据Hash方法分解成四个小数据集,然后采取Trie树活着Hash总括各类小数码汇总的query词频,之后用小顶堆求出种种数据集中出现频率最高的前K个数,最终在颇具top
K中求出最后的top K。

正如是内部情景文件S2的内容:
recordcount=5000000  
operationcount=100000000    
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=true
readproportion=0.1  
updateproportion=0.9    
scanproportion=0    
insertproportion=0
requestdistribution=uniform
insertorder=hashed
fieldlength=250  
fieldcount=8
mongodb.url=mongodb://192.168.1.2:27017  
mongodb.writeConcern=acknowledged    
threadcount=32

再也难题

       
在海量数据中查找出双重出现的要素只怕去除重复出现的成分也是常考的难题。针对此类题材,壹般能够通过位图法完毕。例如,已知某些文件内含有部分电话号码,每一个号码为五位数字,计算分裂号码的个数。

       
本题最棒的化解办法是经过应用位图法来兑现。七人整数能够象征的最大10进制数值为9999999玖。假使每种数字对应于位图中一个bit位,那么存储七个人整数大致须要9九MB。因为1B=八bit,所以9玖Mbit折合成内部存款和储蓄器为99/8=12.37伍MB的内部存款和储蓄器,即能够只用1二.37五MB的内部存储器表示全数的六个人数电话号码的内容。

FTP地址:ftp://ftp1.linuxidc.com

实在运作:

       
实际上,最优的缓解方案应该是最符合实际设计需求的方案,在时间使用中,恐怕有充分大的内部存款和储蓄器,那么直接将数据扔到内部存款和储蓄器中2次性处理即可,也说不定机器有三个核,这样能够选取二十10②线程处理整个数据集。

       上边针对拒绝的使用场景,分析了符合相应采用场景的消除方案。

CentOS 编译安装
MongoDB与mongoDB的php增添 http://www.linuxidc.com/Linux/2012-02/53833.htm

       
优化的法子:能够把具备拾亿个数据分组存放,比如分别位居一千个文件中。那样处理就能够独家在每一个文件的10^陆个数据中找出最大的10000个数,合并到一道在再找出最终的结果。

MongoDB是当下最流行的NoSQL数据库,以其自然的文书档案型数据结构,灵活的多寡方式以及简单易用的程度扩充能力而收获了无数开发职员的推崇。
不过金无足赤人无完人,MongoDB不是未曾它的有的缺陷,比如说它的库级锁便是人们时时抱怨的一性子能瓶颈。不难的话MongoDB的库级锁正是对准某三个数据库的保有写操作,必须在获得那个数据库仅局地二个排斥锁意况下才能展开。那个听上去很倒霉,但事实上由于八个写操作只是针对于内部存款和储蓄器数据更新的那1弹指保留锁,所以每一个写锁的挤占时间1般是在阿秒级别。正因为这么,实际应用中库级锁并不曾对品质发生人们所忧虑的那样肯定的影响。

(一)单机+单核+丰裕大内部存款和储蓄器

       
假设急需摸索拾亿个查询次(每种占8B)中出现频率最高的十二个,思量到每一种查询词占八B,则10亿个查询次所需的内部存款和储蓄器大概是10^玖
*
八B=八GB内部存储器。假如有如此大内部存款和储蓄器,直接在内部存款和储蓄器中对查询次开始展览排序,顺序遍历找出拾二个冒出频率最大的即可。那种格局简便便捷,使用。然后,也足以先用HashMap求出各样词现身的频率,然后求出频率最大的10个词。

能源包下载地址

eg:有一亿个浮点数,倘使找出期中最大的一千0个?

     
  最简单想到的方法是将数据总体排序,然后在排序后的聚合中展开检索,最快的排序算法的时日复杂度一般为O(nlogn),如急忙排序。可是在三拾人的机械上,每一个float类型占五个字节,一亿个浮点数就要占用400MB的仓库储存空间,对于一些可用内部存储器小于400M的微型总括机而言,很醒目是不能够三次将全方位多少读入内部存款和储蓄器举行排序的。其实便是内部存款和储蓄器能够满足要求(小编机器内部存款和储蓄器都是八GB),该措施也并不高速,因为题材的指标是寻觅出最大的一千0个数即可,而排序却是将拥有的成分都排序了,做了成都百货上千的无用功。

     
  第二种艺术为局地淘汰法,该格局与排序方法类似,用三个器皿保存前一千0个数,然后将剩下的有着数字——与容器内的蝇头数字相比较,借使具有继续的要素都比容器内的10000个数还小,那么容器内那一个10000个数正是最大一千0个数。尽管某一无冕成分比容器内最小数字大,则删掉容器内最小元素,并将该因素插入容器,最终遍历完那1亿个数,得到的结果容器中保留的数即为终极结果了。此时的岁月复杂度为O(n+m^二),当中m为容器的尺寸,即一千0。

     
  第二种格局是分治法,将一亿个数据分为100份,每份100万个数据,找到每份数据中最大的一千0个,最终在余下的拾0*10000个数据之中找出最大的一千0个。假设100万数据选拔丰富赏心悦目,那么能够过滤掉1亿数量之中9玖%的数码。⑩0万个数据之中查找最大的一千0个数据的不2秘籍如下:用高速排序的格局,将数据分为二堆,假使大的那堆个数N大于一千0个,继续对大堆连忙排序3遍分成贰堆,倘使大的那堆个数N大于一千0个,继续对大堆火速排序贰回分成二堆,假使大堆个数N小于一千0个,就在小的这堆里面快速排序三遍,找第十000-n大的数字;递归以上进程,就足以找到第2w大的数。参考上边的找出第三w大数字,就足以接近的措施找到前10000大数字了。此种方法须要每回的内部存款和储蓄器空间为拾^陆*4=四MB,1共需求12回那样的可比。

     
  第种种方法是Hash法。假如那1亿个书里头有不少重新的数,先经过Hash法,把那壹亿个数字去重新,这样只要重复率很高的话,会收缩极大的内部存款和储蓄器用量,从而缩流年算空间,然后通过分治法或纤维堆法查找最大的一千0个数。

       
第陆种办法运用最小堆。首先读入前一千0个数来创设大小为一千0的细小堆,建堆的时日复杂度为O(mlogm)(m为数组的高低即为一千0),然后遍历后续的数字,并于堆顶(最小)数字实行比较。假如比相当的小的数小,则继续读取后续数字;假若比堆顶数字大,则替换堆顶成分并再一次调整堆为最小堆。整个进程直至壹亿个数全体遍历完结束。然后依据中序遍历的不贰法门出口当前堆中的全部一千0个数字。该算法的小时复杂度为O(nmlogm),空间复杂度是一千0(常数)。

澳门美高梅手机网站 1

        以上正是面试时大约关联的始末,上边整理一下这上头的题材:

* 微分片在适用的运用场景下能够鲜明的增高MongoDB并发量 

(4)多机+受限内部存款和储蓄器

       
这种情景,为了客观施用多台机械的能源,可将数据分发到多台机器上,每台机器选择(叁)中的策略解决当地的多寡。可使用hash+socket方法进行数据分发。

 

       
从骨子里运用的角度思索,(一)(2)(叁)(四)方案并不管用,因为在广大数据处理环境下,作业功效并不是第二考虑的难点,算法的扩张性和容错性才是重大思量的。算法应该有所优良的增加性,以便数据量进一步加大(随着业务的升高,数据量加大是自可是然的)时,在不改动算法框架的前提下,可达到近似的线性比;算法应该享有容错性,即当前某些文件处理失败后,能活动将其交给此外3个线程继续处理,而不是从头发轫处理。

        top
K难题很合乎采取MapReduce框架消除,用户只需编写一个Map函数和五个Reduce
函数,然后提交到Hadoop(选择Mapchain和Reducechain)上即可缓解该问题。具体而言,便是首先依照数据值恐怕把数量hash(MD伍)后的值依照范围划分到区别的机器上,最CANON够让多少划分后三次读入内部存款和储蓄器,那样分裂的机械负责处理分化的数值范围,实际上就是Map。获得结果后,各样机器只需拿出个别出现次数最多的前N个数据,然后集中,选出全体的多寡中冒出次数最多的前N个数据,那事实上正是Reduce进度。对于Map函数,采取Hash算法,将Hash值相同的数量提交同2个Reduce
task;对于第二个Reduce函数,选用HashMap总计出各类词出现的作用,对于第二个Reduce
函数,总结全部Reduce task,输出数据中的top K即可。

       
直接将数据均分到不一样的机械上实行处理是不能取得正确的结果的。因为一个多少大概被均分到不一样的机械上,而另七个则只怕完全聚集到1个机器上,同时还恐怕存在具有同样数量的数码。

 

澳门美高梅手机网站 2

以下是一些时不时被说起的此类难题。

(1)有10000000个记录,这几个查询串的重复度比较高,假设除去重复后,不超过两千000个。贰个查询串的重复度越高,表明查询它的用户越来越多,也便是越吃香。请计算最吃香的十个查询串,供给选用的内部存款和储蓄器不能够超越一GB。

(贰)有十二个文本,各样文件1GB,每一种文件的每一行存放的都以用户的query,各种文件的query都恐怕再次。根据query的频度排序。

(3)有贰个1GB大小的文书,里面的每壹行是四个词,词的轻重缓急不超过十五个字节,内部存款和储蓄器限制大小是1MB。重返频数最高的一百个词。

(肆)提取某日访问网站次数最多的不得了IP。

(5)10亿个整数找出重新次数最多的917个整数。

(陆)搜索的输入音信是三个字符串,总计300万条输入音信中最吃香的前10条,每一趟输入的1个字符串为不超过25伍B,内部存款和储蓄器使用唯有一GB。

(七)有一千万个身份证号以及她们相应的数据,身份证号恐怕重新,找出出现次数最多的身份证号。

 

在大家测试使用微分片品质在此以前大家第叁需求汲取单机的最高质量。运转指标MongoDB服务器,登录上去后先删除ycsb数据库(要是已经存在)
# mongo 
> use ycsb    
> db.dropDatabase()

先拿一千0个数建堆,然后三回添加剩余成分,假若超出堆顶的数(一千0中型小型小的的),将那一个数替换堆顶,并调整结构使之照旧是1个小小堆,那样,遍历完后,堆中的一千0个数就是所需的最大的一千0个。建堆时间复杂度是O(mlogm),算法的时刻复杂度为O(nmlogm)(n为10亿,m为一千0)。

在运作的还要您能够用mongostat(只怕更好的挑3拣4:MMS)来监督MongoDB的实时指标,看是不是和YCSB的告知大体壹致。

是因为YCSB自身会担当非常大的工作量,一般提出布署YCSB在独立的机械上,最佳是四-八核CPU,八G内存以上。YCSB和数据库服务器最少要力保千兆的带宽,最棒是万兆级。
* 安装JDK 1.7  
* 下载达成了MongoDB驱动的YCSB编写翻译版:

本次测试是在AWS的虚拟主机上进展测试的。以下是服务器配置情状:
* OS: Amazon Linux
(和CentOS中央相仿)  
* CPU: 8 vCPU    
* RAM: 30G    
* Storage: 160G SSD    
* Journal: 25G EBS with 1000 PIOPS    
* Log: 10G EBS with 250 IOPS    
*    
* MongoDB: 2.6.0    
* Readahead:32

本条命令会在同等台机械上创立一下陆个进程:
* 1 个mongos 在27017 端口  
* 一 个布局服务器的mongod 在27020端口    
* 二 个分片服务器的mongod 在2701八和2701玖端口

在那篇小说里大家通过做壹些性质测试来看一下应用微分片技术之后对品质升高的震慑。

上述四个指令分别激活了 ”ycsb“ 数据库以及库内
“usertable”集合的分片成效。在对聚集开启分片的时候还亟需钦命分片键。在此间大家选拔了
{_id: “hashed” } 表示使用 _id
字段的哈希值作为分片键。哈希值分片键对大气写的风貌相比方便,能够把写操作均匀的分布到各类分片上。

从上表大家得以汲取以下结论

在个别超高并发写的使用场景下,库级锁会或者是1个瓶颈。那些能够经过MongoDB的MMS监控里面包车型地铁DB
Lock %(可能mongostat的命令行输出)目标来进展考查。一般景况下壹旦DB Lock
%超越70-4/5并持续就能够认为已经到饱和状态了。如何缓解这几个问题呢?

MongoDB配置

下载全部场景文件(S1 – S伍)(见上面包车型大巴Linux公社下载地址
并解压到地方创造的ycsb目录下面:

——————————————分割线——————————————

前几日我们早已在数据库内有了500万测试数据,以往大家得以测一下任何的几个场景。注意:YCSB的第二个参数是测试阶段。刚才是数量导入所以率先个参数是”load”。导入完数据后接下去就是运转阶段所以第一个参数都是”run”。

mtools是多少个MongoDB相关工具的集合,在那之中的mlaunch能够帮忙我们轻而易举地在单机上创建复制集或分片集群。

Ubunu
14.04下MongoDB的设置指南 http://www.linuxidc.com/Linux/2014-08/105364.htm

测试完之后要用下述命令关闭全数集群:
# mlaunch stop

首先大家停掉单机上MongoDB数据库。
接下去我们要建一个分片集群。在此处让本身要推荐给我们1个13分有利的MongoDB工具:mtools https://github.com/rueckstiess/mtools 

安装mtools(必要Python以及Python的包管理工科具pip 或然easy_install):
# pip install mtools

在开首测试在此之前,笔者想首先花点时间介绍一下YCSB这些工具。原因是多如牛毛时候小编看来开发工程师或然DBA们做测试的时候屡次会用壹些格外简单的工具作为客户端实行高并发的插入或读取测试。MongoDB本人是贰个高品质的数据库,并发量在适当调优的场馆下得以完成每秒数万级。即使客户端的代码是大约粗暴型的,甚至动用单线程的客户端,那么品质测试的瓶颈首先正是在客户端本人,而不是服务器。所以选取三个高速的客户端是二个好的性质测试的第二的第二步。

Ubuntu 13.04下安装MongoDB2.4.3 http://www.linuxidc.com/Linux/2013-05/84227.htm

运营甘休后可以看来类似于如下输出:
[OVERALL], RunTime(ms), 687134.0  
[OVERALL], Throughput(ops/sec), 7295.168457372555    
…    
[INSERT], Operations, 5000000    
[INSERT], AverageLatency(us), 4509.1105768    
[INSERT], MinLatency(us), 126    
[INSERT], MaxLatency(us), 3738063    
[INSERT], 95thPercentileLatency(ms), 10    
[INSERT], 99thPercentileLatency(ms), 37    
[INSERT], Return=0, 5000000    

* 微分片对混合读写的情景(也是实际上中最普遍的光景)的优化最棒:26分三   

一部分验证:
* 测试数据包蕴500万个文书档案(recordcount)  
* 每一个文书档案大小差不离2KB(田野同志length x
田野(field)count)。数据总江西共产主义劳动大学小是十G+600M的目录    
* MongoDB数据库的url是1玖二.16八.1.二:270壹柒    
* MongoDB的写安全设置(mongodb.writeConcern)是acknowledged    
* 线程数是3二(threadcount)    
* 插入文书档案的顺序:哈希/随机 (insertorder)    
* 更新操作: 九成 (0.九)    
* 读操作: 10% (0.1)

微分片测试

在 2015年LinuxIDC.com\7月\选取YCSB测试MongoDB的微分片品质

单机基准测试

场景S一: 数据插入
接下去开首运转YCSB。进到ycsb目录下,运营以下命令(确认当前目录下1度有意况文件S1,
S二, S三, S4,S5)
./bin/ycsb load mongodb -P S1 -s

结论

下载形式见 http://www.linuxidc.com/Linux/2013-10/91140.htm

MongoDB
的详细介绍
请点那里
MongoDB
的下载地址
请点这里

MongoDB 3.0
正式版发布下载  http://www.linuxidc.com/Linux/2015-03/114414.htm

动用YCSB测试差异情况只必要提供不一致的场景文件就足以。YCSB会根据你的景观文件的质量而自动生成响应的客户端请求。在我们此次测试里大家会利用到三种情景:
场景S一: 百分之百布置。用来加载测试数据  
场景S二: 写多读少 十分九 更新 1/10读    
场景S叁: 混合读写 陆伍%读, 2伍% 插入, 一成 更新    
场景S四: 读多写少 9/10 读, 10% 插入、更新    
场景S5: 100%读

刚刚大家早已取得了单机在几个现象下的品质指标。接下来大家得以起来测试在微分片以及不一致数量微分片的气象下的质量指标。

以次类推,能够对四个,陆个,和七个分子的微分片集群分别创制独立的目录相提并论新陆个场景的测试。如下是具有测试结果:

方案三:等待
MongoDB 二.八即将发表。2.八的最大转移就是把库级锁改成了文书档案级锁。由库级锁引起的习性难点应有有相当大几率得到较大革新。

场景S3: 混合读写(陆5%read)
命令:
./bin/ycsb run mongodb -P S3 -s
结果  
…    
[OVERALL], Throughput(ops/sec), 15982.39239483840

其1输出告诉大家插入了500万条记下,
耗时6捌7秒,平均并发量每秒72九伍条,平均响应时间肆.5ms。注意这么些数值本身来说对于MongoDB的质量指标未有别的参考价值。要是您的条件有私下一点不平等,可能插入数据的轻重缓急,也许索引的多少不均等,都会造成结果相当的大的比不上。所以那几个值只可以在作为这次测试和微分片质量相比的基准值。

* 五个微分片就已经主导到了饱和状态,再充实越多分片已经远非显明改进。
这些数字只怕会一碗水端平。

YCSB场景文件

安装YCSB

那四个进度组成了颇具三个分片的微分片集群。值得建议的是纵然大家已经搭建了3个分片集群,在这一年全部的多少照旧只会去到当中二个分片,那几个分片叫做主分片。要让MongoDB把数据分布到种种分片上,必须显式地激活须要分片的数据库以及集合名。
# mongo    
mongos> sh.enableSharding(“ycsb”)    
{ “ok” : 1 }    
mongos> sh.shardCollection(“ycsb.usertable”, {_id:”hashed”})    
{ “collectionsharded” : “ycsb.usertable”, “ok” : 1 }

场景S2: 写多读少
命令:
./bin/ycsb run mongodb -P S2 -s
结果  
…    
[OVERALL], Throughput(ops/sec), 12102.2928384723

——————————————分割线——————————————

接下来建一个新的目录并在新目录下创制微分片集群:
# mkdir shard2    
# cd shard2    
# mlaunch –sharded 2 –single

场景S5: 100% 读
命令:
./bin/ycsb run mongodb -P S5 -s
结果  
…    
[OVERALL], Throughput(ops/sec), 49020.29394020022

CentOS 六 使用 yum
安装MongoDB及服务器端配置 http://www.linuxidc.com/Linux/2012-08/68196.htm

澳门美高梅手机网站,场景S四: 读多写少
命令:
./bin/ycsb run mongodb -P S4 -s
结果  
…    
[OVERALL], Throughput(ops/sec), 19102.39099223948

为了找到一个相比理��的客户端线程数,笔者对同样的操作重复了往往,每2回修改了气象文件之中的threadcount数值。测试的结果发现到了二伍个线程左右并发量就到达了最高值。再充实线程数量质量不再提高。因为笔者的场景文件中的threadcount值设为3二。

* 解压缩    
* 进入到ycsb目录并运转(本地要有五个Mongo数据库在 270一柒端口上):    
./bin/ycsb run mongodb -P workloads/workloada
* 倘若YCSB能够运作则注明安装成功
你也得以用Git把源文件拉下来本身编写翻译。供给JDK和Maven工具。Github地址是:https://github.com/achille/YCSB 能够参考这些页面进行编写翻译安装YCSB: https://github.com/achille/YCSB/tree/master/mongodb

澳门美高梅手机网站 3

几点表达:  
MongoDB的数量,恢复生机日志(journal)以及系统日志(log)分别用了3个不一样的积存盘。那是多少个常见的优化措施,以有限援助写日记的操作不会潜移默化到数量的刷盘IO。此外服务器的readahead设置改到了引进的3二。关于readahead等得以参见: http://www.linuxidc.com/Linux/2015-07/120173.htm

YCSB是Yahoo开发的2个专门用来对新一代数据库实行标准测试的工具。全名是Yahoo!
Cloud Serving Benchmark。
他们开发这么些工具的指标是可望有二个正经的工具用来衡量分化数据库的习性。YCSB做了众多优化来提升客户端品质,例如在数据类型上用了最原始的比特数组以减掉数量对象自作者成立转换所需的日子等。YCSB的几大特色:
* 援助广大的数据库读写操作,如插入,修改,删除及读取  
* 多线程援助。YCSB用Java达成,有很好的二十八线程支持。
* 灵活定义场景文件。能够经过参数灵活的钦定测试场景,如百分之百插入,
2/4读二分之一写等等  
*
数据请求分布格局:扶助随机,zipfian(惟有小部分的数码得到多数的拜会请求)以及新型数据三种请求分布格局 
  
* 可扩大性:能够通过扩充Workload的点子来修改只怕扩大YCSB的成效

MongoDB入门必读(概念与实战同样重视) http://www.linuxidc.com/Linux/2013-07/87105.htm

依照CentOS
6.5操作系统搭建MongoDB服务 http://www.linuxidc.com/Linux/2014-11/108900.htm

密码:www.linuxidc.com

MongoDB的库级锁

Nagios监察和控制MongoDB分片集群服务实战 http://www.linuxidc.com/Linux/2014-10/107826.htm

方案二:分库
这是个十一分管用的变更手段。具体做法正是把您的数额分到多少个不等的数据Curry,然后在应用程序里的多少访问层达成叁个路由切换,有限支撑数据读写会被指向到对应的数据Curry。3个比较好的例子在壹个人普的数据Curry,你能够为各个省建二个单身的库。311个数据库组成2个逻辑大库。不过那种做法不是何许时候都能用的,比如说假使你供给多多整库数据的询问排序那样的操作,那么和谐四个库的结果就会来得很麻烦只怕不能落到实处。

接下去我们得以按顺序运营以下三个情景并募集测试结果(注意ycsb的第叁个参数):
./bin/ycsb load mongodb -P S1 -s    
./bin/ycsb run mongodb -P S2 -s    
./bin/ycsb run mongodb -P S3 -s    
./bin/ycsb run mongodb -P S4 -s    
./bin/ycsb run mongodb -P S5 -s

《MongoDB 权威指南》(MongoDB: The Definitive
Guide)英文文字版[PDF] http://www.linuxidc.com/Linux/2012-07/66735.htm

在MongoDB方面,要特别注意一下mongostat或然MMS汇报的page
faults,network,DB Lock %等目标。借使您的network是1Gb/s
而mongostat汇报了100m的数字,那您的网络就着力是饱和了。1Gb/s的带宽也便是12八m/s的传输速率。在自身的那些测试里network
in保持在1四-一伍m/s的旗帜,和每秒的并发率及文书档案大小(7300x2KB)是一模壹样的。

YCSB 质量测试工具

# easy_install mtools

* 微分片对只读的行使场景未有别的援救   

方案一: 分片
其壹是MongoDB的标准答案假若您有丰盛的硬件财富。
分片是解决一大半属性瓶颈难点的极端方法。

方案四:微分片
微分片的定义就是选择MongoDB的分片技术,不过四个大概全部分片Mongod运转在同等台服务器(服务器能够是物理机大概虚机)上。由于库级锁的留存,以及MongoDB对多核CPU的利用率不是很高的特征,微分片在满足以下条件的地方下会是一个不错的特性调优手段:  
壹) 服务器有多核(肆或八或越多)CPU    
2) 服务器并未出现IO瓶颈    
三) 有丰硕内部存款和储蓄器装下热数据(未有出现反复的 page faults)

发表评论

电子邮件地址不会被公开。 必填项已用*标注