成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么說(shuō)很多NoSQL的Benchmark是扯淡?

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
正如原作者所言,本文有標(biāo)題黨之嫌,但確實(shí)道出了一個(gè)眾所周知的問(wèn)題。就是很多NoSQL產(chǎn)品的官方 benchmark 過(guò)高。雖然本人并不完全同意作者的觀點(diǎn),但是其不盲從輕信較勁的態(tài)度還是值得學(xué)習(xí)。

抱歉我用了這么一個(gè)標(biāo)題黨的題目做為標(biāo)題。

寫這篇文章只是想引起大家的注意:在選擇NoSQL產(chǎn)品時(shí),達(dá)到標(biāo)稱性能,需要諸多限制條件,例如本文主要討論的磁盤I/O。

現(xiàn)在NoSQL的產(chǎn)品已經(jīng)很多了,很多都宣稱“我們的QPS可以達(dá)到十萬(wàn),甚至百萬(wàn)”,但是當(dāng)我們?cè)谏a(chǎn)環(huán)境中使用的時(shí)候,卻明顯的感覺(jué)到,隨著數(shù)據(jù)文件不斷增大,NoSQL的性能卻指數(shù)下降,問(wèn)題處在哪里了?

這些NOSQL的Benchmark的量都有一個(gè)前提“你得內(nèi)存足夠放下你的全部數(shù)據(jù)文件”

Case1:有人說(shuō),我內(nèi)存16GB,那只能說(shuō)明你得數(shù)據(jù)規(guī)模還不夠大……我已經(jīng)經(jīng)歷被無(wú)數(shù)上百GB的數(shù)據(jù)庫(kù)折磨過(guò)了。此外,你可能需要在1GB內(nèi)存的虛擬機(jī)上支撐數(shù)10GB的數(shù)據(jù),比如我現(xiàn)在的情況。

繼續(xù)討論,一旦內(nèi)存放不下全部的數(shù)據(jù),會(huì)怎么辦呢?

有很多策略,但無(wú)非都是訪問(wèn)磁盤,將數(shù)據(jù)Cache到內(nèi)存中。

我們先討論最壞的情況,假定每條記錄的偏移是放在內(nèi)存中,但所有數(shù)據(jù)都放在磁盤,我們使用fseek等操作來(lái)查詢磁盤。

來(lái)看下面的測(cè)試代碼。

  1. void test_fseek_set() 
  2.     long offset; 
  3.     FILE*fp = NULL; 
  4.     long i; 
  5.  
  6.     fp = fopen(FILE_NAME, "r"); 
  7.     if(!fp) 
  8.     { 
  9.         printf("Open file fail.\n"); 
  10.         printf("%s\n",strerror(errno)); 
  11.         exit(-1); 
  12.     }    
  13.  
  14.     for(i=0; i<TIMES; i++) 
  15.     { 
  16.         //Because random max is 1<<30 - 1 
  17.         offset = random() * 10 % MAX_FILE; 
  18.         if(fseek(fp, offset, SEEK_SET)) 
  19.         { 
  20.             printf("fseek error.\n"); 
  21.             printf("%ld",offset); 
  22.             printf("%s\n",strerror(errno)); 
  23.         } 
  24.     }    
  25.  
  26.     fclose(fp); 

好了,你猜猜上述隨機(jī)fseek的程序在一個(gè)7200轉(zhuǎn)的硬盤上,針對(duì)一個(gè)4GB的文件隨機(jī)訪問(wèn),能跑多塊?

答案是QPS<=80。

有人說(shuō)你騙人,我跑的能到1XXX,那么請(qǐng)你執(zhí)行下述命令清空你內(nèi)存中的磁盤緩存。

  1. sync; echo 3 > /proc/sys/vm/drop_caches 

很多時(shí)候,之所以我們能在小數(shù)據(jù)時(shí)達(dá)到NoSQL官方標(biāo)稱的QPS,而大數(shù)據(jù)量卻指數(shù)下降,都是這些緩存在作怪。說(shuō)白了,我們很Happy的Benchmark半天,實(shí)際是在玩系統(tǒng)的緩存,當(dāng)然快了。

一旦你的數(shù)據(jù)文件大于內(nèi)存磁盤緩存,那么速度會(huì)馬上像我列舉的這樣,不會(huì)多余80QPS,在一個(gè)4GB的文件上。

有人說(shuō)mmap,我曾經(jīng)也是這樣YY的,但根據(jù)我的測(cè)試,事情不是這樣。

我有一個(gè)120GB的Tokyo Cabinet數(shù)據(jù)文件,把內(nèi)存開(kāi)滿,它默認(rèn)會(huì)用mmap,然后你會(huì)發(fā)現(xiàn)top中“VIRT”一列,會(huì)顯示為120GB+(換算后),而我得機(jī)器內(nèi)存卻只 有32GB。這時(shí),當(dāng)你訪問(wèn)恰好不在內(nèi)存中的那部分?jǐn)?shù)據(jù)時(shí),操作系統(tǒng)會(huì)進(jìn)行非常耗時(shí)的換入換出操作(首先就需要fseek等)。在這臺(tái)24核、32GB的 機(jī)器上,QPS勉強(qiáng)能達(dá)到3000(這已經(jīng)遠(yuǎn)遠(yuǎn)低于標(biāo)稱的QPS),而一旦清空緩存,QPS會(huì)迅速跌落到70左右……

可能還會(huì)有人說(shuō):我沒(méi)事閑的為啥要自己清空緩存?

機(jī)器不是給你一個(gè)NoSQL進(jìn)程服務(wù)的,很多系統(tǒng)其他服務(wù)都需要訪問(wèn)磁盤,讀取文件,漸漸的就會(huì)把你Cache起來(lái)的內(nèi)存全部換掉,根據(jù)實(shí)際測(cè)試的 情況,一臺(tái)完全閑置的機(jī)器,開(kāi)TT能達(dá)到3000, 閑置放置48小時(shí)(不開(kāi)其他服務(wù)), 性能就會(huì)驟降到1000左右,再放置72小時(shí)左右,就回歸到70的qps了,此時(shí)Cache已經(jīng)基本完全換出。

綜上,mmap不是神,因?yàn)槟愕膬?nèi)存不夠,而其他進(jìn)程也會(huì)爭(zhēng)奪內(nèi)存來(lái)做自己的Cache。

如果你想充分發(fā)揮NoSQL的性能,建議用支持集群的NoSQL產(chǎn)品,盡量將全部數(shù)據(jù)放入內(nèi)存中。

或者你沒(méi)錢購(gòu)置很多Moster內(nèi)存的服務(wù)器,像我一樣,就不要期望NoSQL能有很驚人的性能了。此時(shí),NoSQL所能帶來(lái)的提升,只是關(guān)系數(shù)據(jù)庫(kù)所剪掉的那部分開(kāi)銷,如果你基本沒(méi)有什么join,那么可能還會(huì)不如關(guān)系數(shù)據(jù)庫(kù)。

分析性能,我們不能僅僅看官方的數(shù)據(jù)比較,要考慮機(jī)器的實(shí)際情況和自己的數(shù)據(jù)規(guī)模,最終才能分析出瓶頸出在哪里。

對(duì)于原作者的觀點(diǎn),本人提出兩點(diǎn)看法:

  • 要充分發(fā)揮NoSQL性能,并不是一定要盡量把所有數(shù)據(jù)放到內(nèi)存,實(shí)際上只要保證了熱數(shù)據(jù)都能裝在內(nèi)存中就夠了。
  • 作者舉例中的程序,主要用了磁盤seek,磁盤的seek速度慢,原本就是磁盤物理結(jié)構(gòu)的硬傷,所以許多NoSQL存儲(chǔ)采用了變隨機(jī)寫為順序?qū)懙姆绞剑瑴p少磁盤seek操作,也是提升IO性能的良方。

【編輯推薦】

  1. MongoDB之父:MongoDB勝過(guò)BigTable
  2. 主流NoSQL數(shù)據(jù)庫(kù)全方位評(píng)測(cè)之MongoDB
  3. 教你如何利用MySQL學(xué)習(xí)MongoDB
  4. 在Windows環(huán)境下MongoDB搭建和簡(jiǎn)單操作
  5. Mongodb源碼分析之Mongos分析
責(zé)任編輯:艾婧 來(lái)源: 開(kāi)源中國(guó)社區(qū)
相關(guān)推薦

2022-03-14 08:33:09

TypeScriptJavaScript前端

2020-07-03 14:05:26

Serverless云服務(wù)商

2021-11-29 18:27:12

Web Wasmjs

2011-10-27 13:37:51

網(wǎng)頁(yè)設(shè)計(jì)

2023-05-05 16:26:33

2019-09-23 13:37:09

Anthos谷歌Kubernetes

2019-09-23 13:10:02

容器進(jìn)程

2018-01-23 11:48:17

Vue.js前端開(kāi)發(fā)

2021-01-14 15:34:53

區(qū)塊鏈比特幣機(jī)器

2018-07-02 14:31:47

健康品牌

2019-01-18 15:01:17

云計(jì)算運(yùn)維管理

2023-03-21 10:16:36

2023-05-04 07:44:13

編程界小語(yǔ)言Java

2021-02-25 14:09:55

人工智能數(shù)據(jù)機(jī)器學(xué)習(xí)

2015-04-16 15:42:21

關(guān)系型數(shù)據(jù)庫(kù)NoSQL

2011-05-05 08:51:18

PHP

2025-04-07 08:30:00

緩存Java開(kāi)發(fā)

2012-02-08 10:02:53

Web

2025-05-27 10:10:00

Java緩存開(kāi)發(fā)

2017-10-02 11:53:17

數(shù)據(jù)庫(kù)SQLNoSQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美三区视频 | 日韩伦理一区二区 | 91看片网| 亚洲精品在线免费看 | 亚洲播放一区 | 欧美成人精品一区二区男人看 | www.v888av.com | 欧美三级三级三级爽爽爽 | 亚洲 欧美 精品 | 国产女人第一次做爰毛片 | 精品久久久久久红码专区 | 性色av香蕉一区二区 | 中文字幕乱码一区二区三区 | 日韩中文一区二区三区 | 欧美精品一区三区 | 国产精品久久在线观看 | 精品久久久久久久久久久久久久久久久 | 欧美成人一区二区三区 | 日韩精品一区二区三区 | 免费观看一级特黄欧美大片 | 中文在线一区 | 中文字幕日韩欧美一区二区三区 | 男女网站在线观看 | 国产亚洲精品91 | 成人一级片在线观看 | 伊人爽| 久久精品视频免费观看 | 欧美一a| 亚洲综合色丁香婷婷六月图片 | 二区中文字幕 | 国产一级毛片精品完整视频版 | 欧州一区二区三区 | 青青久在线视频 | 超碰成人免费 | 日本高清视频网站 | 精品视频国产 | 久久九| 久久久久国产一区二区三区 | 国产精品不卡一区二区三区 | 羞羞色在线观看 | a视频在线观看 |