偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

LinkBench--社交圖譜的數(shù)據(jù)庫(kù)性能測(cè)試工具

開(kāi)發(fā) 測(cè)試
在數(shù)據(jù)庫(kù)工程團(tuán)隊(duì)實(shí)習(xí)期間,我花費(fèi)了上個(gè)暑假的時(shí)間分析了Facebook的數(shù)據(jù)庫(kù)工作負(fù)載(workload)并幫助開(kāi)發(fā)了一款稱(chēng)為L(zhǎng)inkBench的數(shù)據(jù)庫(kù)性能測(cè)試工具。這個(gè)周我們很榮幸的將LinkBench發(fā)布到了 GitHub上,并希望它能夠成為每個(gè)需要進(jìn)行性能測(cè)試和數(shù)據(jù)庫(kù)調(diào)優(yōu)工作的開(kāi)發(fā)者手中的利器。

在數(shù)據(jù)庫(kù)工程團(tuán)隊(duì)實(shí)習(xí)期間,我花費(fèi)了上個(gè)暑假的時(shí)間分析了Facebook的數(shù)據(jù)庫(kù)工作負(fù)載(workload)并幫助開(kāi)發(fā)了一款稱(chēng)為L(zhǎng)inkBench的數(shù)據(jù)庫(kù)性能測(cè)試工具。這個(gè)周我們很榮幸的將LinkBench發(fā)布到了 GitHub上,并希望它能夠成為每個(gè)需要進(jìn)行性能測(cè)試和數(shù)據(jù)庫(kù)調(diào)優(yōu)工作的開(kāi)發(fā)者手中的利器。 

Facebook社交圖譜(social graph)和MySQL

MySQL作為公司基礎(chǔ)架構(gòu)的重要組件,早期就被Facebook用于存儲(chǔ)像文章,評(píng)論,贊(likes)和頁(yè)面之類(lèi)的數(shù)據(jù)。

我們展現(xiàn)數(shù)據(jù)的一種方式就是社交圖譜(social graph),其中的對(duì)象如人(people),文章(posts),評(píng)論(comments)和頁(yè)面(pages)是通過(guò)節(jié)點(diǎn)間不同的關(guān)系類(lèi)型(模型) 相互關(guān)聯(lián)(圖中的有向邊-directed edges)的。不同的關(guān)聯(lián)關(guān)系類(lèi)型可以表示好友關(guān)系(friendship between two users),用戶(hù)喜歡某個(gè)對(duì)象的關(guān)系(user like another object),還可以表示文章屬主(ownership of post)關(guān)系等等。

 

為什么需要一款新的數(shù)據(jù)庫(kù)性能測(cè)試工具?

過(guò)去的5到10年里,數(shù)據(jù)庫(kù)領(lǐng)域又迎來(lái)了一次創(chuàng)新的高潮,像NoSQL和NewSQL已經(jīng)成為了關(guān)系數(shù)據(jù)庫(kù)(relational databases)的強(qiáng)力競(jìng)爭(zhēng)者。與此同時(shí)硬件領(lǐng)域也在迅速地發(fā)展,固態(tài)存儲(chǔ)設(shè)備和多核CPU已經(jīng)成為業(yè)界的主流,能夠?yàn)閿?shù)據(jù)庫(kù)提供巨大的性能提升。雖然我們已經(jīng)能夠通過(guò)讓MySQL使用FlashCache來(lái)發(fā)揮出固態(tài)存儲(chǔ)設(shè)備的優(yōu)勢(shì),但是對(duì)基于固態(tài)存儲(chǔ)的數(shù)據(jù)庫(kù)優(yōu)化還有很多工作要做,只有這樣才能最大限度的發(fā)掘出硬件的性能。

這些改變對(duì)Facebook來(lái)說(shuō)意味著什么?首先,它意味著在提高響應(yīng)速度的同時(shí)我們有更多的機(jī)會(huì)來(lái)提高數(shù)據(jù)庫(kù)基礎(chǔ)設(shè)施(infrastructure) 的效率,如降低能源的使用和硬件的開(kāi)銷(xiāo)。其次,它意味著我們需要對(duì)那些為解決Facebook負(fù)載而即將上線的數(shù)據(jù)庫(kù)系統(tǒng)在適應(yīng)性 (suitability)和性能方面做一次系統(tǒng)的評(píng)估。

MySQL很好地兼顧了靈活性、性能和易于管理的特性,但是我們的數(shù)據(jù)庫(kù)項(xiàng)目團(tuán)隊(duì)仍不斷地探索在MySQL中存儲(chǔ)社交圖譜數(shù)據(jù)的其他方法。起初我們使用一些開(kāi)源的性能測(cè)試工具來(lái)評(píng)測(cè)數(shù)據(jù)庫(kù)系統(tǒng)。然而,數(shù)據(jù)庫(kù)性能測(cè)試的黃金法則是要在真實(shí)的產(chǎn)品負(fù)載情況下去測(cè)試系統(tǒng)的性能,但是一般的工具都達(dá)不到這樣的要求。當(dāng)需要對(duì)Facebook基礎(chǔ)設(shè)施中的某個(gè)重要組件進(jìn)行調(diào)整時(shí),我們需要理解在生產(chǎn)負(fù)載的情況下數(shù)據(jù)庫(kù)系統(tǒng)是如何運(yùn)作的。

并且我們認(rèn)為對(duì)于其他構(gòu)建于數(shù)據(jù)庫(kù)和社交應(yīng)用之上的社區(qū)來(lái)說(shuō)它們也能夠從基于數(shù)據(jù)存儲(chǔ)、檢索社交網(wǎng)絡(luò)和其他具有圖譜結(jié)構(gòu)數(shù)據(jù)的性能評(píng)測(cè)中獲益。對(duì)于那些迅速發(fā)展、擁有海量數(shù)據(jù)和豐富的數(shù)據(jù)模型的應(yīng)用來(lái)說(shuō),它們對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的需求都是各不相同的,但是用于測(cè)試這些系統(tǒng)負(fù)載的性能測(cè)試工具卻沒(méi)有幾個(gè)。

LinkBench通過(guò)生成(replicate)混合了數(shù)據(jù)模型,圖譜結(jié)構(gòu)和請(qǐng)求等數(shù)據(jù)來(lái)填充數(shù)據(jù)庫(kù)的方式實(shí)現(xiàn)了對(duì)存儲(chǔ)著社交圖譜的MySQL進(jìn)行負(fù)載測(cè)試的目標(biāo)。LinkBench是一個(gè)用于生成圖(graph-serving)的性能測(cè)試工具,而不是處理圖(graph-processing)的測(cè)試工具--區(qū)別在于前者會(huì)模擬在一個(gè)交互式的社交應(yīng)用中的那些具有事務(wù)性的動(dòng)作(transactional workload),而后者只是模擬動(dòng)作的流程(analytics workload)。這個(gè)測(cè)試工具不是用于解決圖的社區(qū)發(fā)現(xiàn)問(wèn)題(find graph communities)或圖的切分問(wèn)題(graph partitioning),而是用來(lái)實(shí)時(shí)地查詢(xún)并更新數(shù)據(jù)庫(kù)中的圖譜。例如,對(duì)于圖的查詢(xún)比較常見(jiàn)的形式就是找到所有來(lái)自節(jié)點(diǎn)X并且是A類(lèi)型的所有的邊,而更新操作就是插入、刪除邊或者更新圖中的節(jié)點(diǎn)或邊。舉個(gè)更新操作的例子,如“從user4插入一個(gè)好友關(guān)系的邊到user63459821”。

理解Facebook社交圖譜的工作負(fù)載

我實(shí)習(xí)的大部分時(shí)間都用于分析社交圖譜的數(shù)據(jù)和數(shù)據(jù)庫(kù)查詢(xún)時(shí)的負(fù)載,因而我提取了許多LinkBench可以用來(lái)對(duì)負(fù)載進(jìn)行建模的關(guān)鍵參數(shù)。

LinkBench使用的一個(gè)特別重要的屬性就是出度分布(out-degree distribution),它控制圖中每個(gè)節(jié)點(diǎn)的出度。出度在過(guò)去人們研究過(guò)的許多網(wǎng)絡(luò)中像人際關(guān)系網(wǎng)或網(wǎng)頁(yè)間的鏈接都遵循著冪律分布(power- law distributions),這對(duì)于包含著各種節(jié)點(diǎn)類(lèi)型的社交圖譜也同樣適用,如下圖所示:

 

LinkBench也需要模擬在生產(chǎn)環(huán)境下對(duì)數(shù)據(jù)庫(kù)的查詢(xún)操作。Facebook網(wǎng)站和手機(jī)應(yīng)用所使用的數(shù)據(jù)大部分來(lái)自于內(nèi)存緩存,只有所有寫(xiě)操作和小部分讀緩存缺失(cache-miss)情況下才會(huì)使用到MySQL。Facebook的工作負(fù)載主要是以大量的讀操作為主的,因此即使在緩存命中率很高時(shí),讀操作缺失(read miss)也遠(yuǎn)大于寫(xiě)操作的。

 
通過(guò)將數(shù)據(jù)庫(kù)查詢(xún)劃分為針對(duì)關(guān)系(邊)和對(duì)象(節(jié)點(diǎn))的許多小的核心操作,我們就可以逐個(gè)地分析在生產(chǎn)數(shù)據(jù)庫(kù)環(huán)境下對(duì)社交圖譜的每個(gè)操作的性能了。下面的表列出了用于保存或查詢(xún)圖譜時(shí)所對(duì)應(yīng)的查詢(xún)或更新操作。
 

下面的圖展示了在生產(chǎn)環(huán)境中的某個(gè)數(shù)據(jù)庫(kù)實(shí)例上不同的操作隨著時(shí)間的推移而產(chǎn)生的負(fù)載變化。從圖中可以看到對(duì)于邊的操作和讀操作,特別是邊界掃描 (edge range scan)會(huì)給系統(tǒng)帶來(lái)極大的負(fù)擔(dān)。舉個(gè)邊界掃描的例子,如“按最早到最近的時(shí)間順序找出某個(gè)文章的所有評(píng)論”或“找出某個(gè)用戶(hù)的所有好友”。


 

在真實(shí)環(huán)境中的MySQL實(shí)例上,對(duì)社交圖譜的各種操作隨著時(shí)間的變化圖。百分比是按相對(duì)于當(dāng)前實(shí)例上每秒平均操作數(shù)計(jì)算得來(lái)的。

通過(guò)對(duì)負(fù)載跟蹤(workload trace),并進(jìn)一步分析了不同操作的訪問(wèn)模式(access pattern)后,我發(fā)現(xiàn)了一些更有趣的東西: 

  • 通過(guò)對(duì)數(shù)據(jù)庫(kù)中一些使用頻繁(hot)、次頻繁(warm)和大量不頻繁(cold)的行(rows)進(jìn)行實(shí)驗(yàn),發(fā)現(xiàn)對(duì)節(jié)點(diǎn)(nodes)和邊 (edges)的讀、寫(xiě)訪問(wèn)模式也都遵循著冪律分布(power-law distribution)。這對(duì)一般的數(shù)據(jù)庫(kù)來(lái)說(shuō)是正常的,但是由于Facebook使用了像memcached之類(lèi)的內(nèi)存緩存技術(shù),我們不確定這是否對(duì)訪問(wèn)模式產(chǎn)生了影響。
  • 圖譜的結(jié)構(gòu)對(duì)訪問(wèn)模式也有重要的影響:與高出度節(jié)點(diǎn)相連接的邊通常比那些與低出度節(jié)點(diǎn)相連接的邊會(huì)有更頻繁的讀、寫(xiě)操作。

我可以從產(chǎn)生這些效果的負(fù)載跟蹤中提取到相關(guān)參數(shù),并可以在LinkBench中重現(xiàn)。

#p#

LinkBench的架構(gòu)

LinkBench被設(shè)計(jì)為可定制和可擴(kuò)展的。它允許我們通過(guò)生成社交圖譜的子集來(lái)模擬負(fù)載,這一特性對(duì)評(píng)估數(shù)據(jù)庫(kù)處理特定關(guān)聯(lián)類(lèi)型的性能來(lái)說(shuō)是至關(guān)重要的。例如,將以寫(xiě)為主(write-heavy)和讀為主(read-heavy)的關(guān)聯(lián)類(lèi)型分別存儲(chǔ)到不同的數(shù)據(jù)庫(kù)后端是有必要的,因此我們可以針對(duì)每種類(lèi)型做單獨(dú)的性能測(cè)試。它也允許我們使用比較容易的方法來(lái)編寫(xiě)適配器從而支持新的數(shù)據(jù)庫(kù)系統(tǒng),因此我們可以比較出在相同的負(fù)載下它與MySQL的性能差異。

真正的性能測(cè)試工作是由LinkBench driver負(fù)責(zé)的,它是一個(gè)用于生成社交圖譜和各種操作的Java程序。測(cè)試工作分為兩個(gè)階段:載入階段(load phase),會(huì)生成一個(gè)初始的圖譜并載入(loaded in bulk)到數(shù)據(jù)庫(kù)中;請(qǐng)求階段(request phase),許多請(qǐng)求線程會(huì)用各種操作對(duì)數(shù)據(jù)庫(kù)進(jìn)行并發(fā)訪問(wèn)。在請(qǐng)求階段,各種操作的延遲和吞吐量都會(huì)被統(tǒng)計(jì)并給出報(bào)告。

Driver在兩個(gè)階段的具體行為是通過(guò)一個(gè)配置文件進(jìn)行控制的,通過(guò)這個(gè)配置文件可以輕松地控制性能測(cè)試中的各個(gè)參數(shù)。
 
 

測(cè)試結(jié)果

我們對(duì)打了Facebook補(bǔ)丁(請(qǐng)看http://www.facebook.com/MySQLatFacebook) 的MySQL 5.1.53進(jìn)行性能測(cè)試。我們?cè)跀?shù)據(jù)庫(kù)中生成了12億個(gè)節(jié)點(diǎn)和49億條邊,用MySQL標(biāo)準(zhǔn)的未經(jīng)壓縮的InnoDB表存儲(chǔ),占用了1.4TB硬盤(pán)空間。MySQL服務(wù)器擁有2個(gè)CPU,8+核心(8+ cores/socket),144G內(nèi)存,以及16kB讀取延遲(read latency at 16kB)小于500μs的固態(tài)硬盤(pán)。

我們對(duì)不同級(jí)別的負(fù)載進(jìn)行了一系列的性能測(cè)試。為了測(cè)試MySQL服務(wù)器的最大吞吐量,我們運(yùn)行了100個(gè)請(qǐng)求線程,每個(gè)線程都以最快的速度對(duì)MySQL 進(jìn)行請(qǐng)求。我們獲得了一個(gè)在每秒11029個(gè)請(qǐng)求條件下系統(tǒng)吞吐量的測(cè)試結(jié)果。這次試驗(yàn)的請(qǐng)求延遲如下表所示,表明系統(tǒng)在極高的負(fù)載下仍能進(jìn)行響應(yīng)。即使 MySQL處于吞吐量滿(mǎn)載的情況時(shí),延遲的中位數(shù)(median latencies)也是很低的。為了模擬真實(shí)產(chǎn)品環(huán)境下服務(wù)器不會(huì)一直滿(mǎn)載運(yùn)行的場(chǎng)景,LinkBench能夠調(diào)節(jié)(throttle)請(qǐng)求的數(shù)量,在這種情況下延遲還可以再低。
 

MySQL LinkBench的操作延遲是以ms計(jì)算的。延遲指的是從LinkBench driver調(diào)用Graph Store adapter開(kāi)始,到返回時(shí)為止。

我們也收集了系統(tǒng)資源利用的跟蹤報(bào)告來(lái)更好地理解服務(wù)器的行為。

下面展示的吞吐量和I/O利用率隨時(shí)間的變化圖表明服務(wù)器需要一些時(shí)間來(lái)“熱身(warm up)”才能達(dá)到一個(gè)穩(wěn)定的狀態(tài)。當(dāng)MySQL處于“熱身”狀態(tài)時(shí),兩種競(jìng)爭(zhēng)效應(yīng)(two competing effects)會(huì)引起吞吐量上下波動(dòng)。數(shù)據(jù)庫(kù)緩沖池(buffer pool)起初是空的,因此很少的操作可以通過(guò)緩存的數(shù)據(jù)來(lái)完成。當(dāng)數(shù)據(jù)庫(kù)“熱身”完后,緩沖池充滿(mǎn)了來(lái)自磁盤(pán)的頁(yè)面(pages),因此大部分的讀就不需要進(jìn)行I/O操作并能迅速地完成。然而,隨著時(shí)間的推移,緩沖池中的大部分頁(yè)面(pages)都變成了臟數(shù)據(jù)--例如,頁(yè)面包含了還未寫(xiě)入磁盤(pán)的數(shù)據(jù)- 因此當(dāng)清除臟數(shù)據(jù)(dirty pages)時(shí)會(huì)導(dǎo)致對(duì)磁盤(pán)更頻繁的寫(xiě)操作。

CPU利用率統(tǒng)計(jì)圖表明MySQL服務(wù)器的性能在當(dāng)前負(fù)載下是不依賴(lài)于計(jì)算量(not compute-bound)大小的,因?yàn)橛脩?hù)的CPU利用率一直處于50%左右。以 每秒的操作數(shù)(operations/second) 或MB/s測(cè)得的高I/O利用率表明MySQL在固態(tài)存儲(chǔ)設(shè)備上可獲得更高的I/O能力。


 
 

獲取LinkBench

想要獲取LinkBench以及更多關(guān)于使用LinkBench和按需定制的信息請(qǐng)?jiān)L問(wèn)我們的Github頁(yè)面: http://github.com/facebook/linkbench

英文原文:LinkBench: A database benchmark for the social graph

譯文鏈接:http://www.oschina.net/translate/linkbench-a-database-benchmark-for-the-social-graph

責(zé)任編輯:林師授 來(lái)源: OSCHINA編譯
相關(guān)推薦

2017-09-19 18:34:16

Mysql數(shù)據(jù)庫(kù)性能測(cè)試

2014-07-11 09:48:42

2010-10-15 09:37:14

MySQL性能測(cè)試

2010-06-07 14:42:47

Linux性能測(cè)試工具

2012-08-01 10:50:48

性能測(cè)試測(cè)試架構(gòu)

2010-06-04 16:07:09

Linux 性能測(cè)試工

2025-01-26 11:05:23

2024-03-06 18:09:06

Linux性能工具

2011-08-04 09:57:03

dbmonsterMySQL

2016-09-14 11:09:06

Web工具運(yùn)維

2010-06-10 17:37:08

Linux 性能測(cè)試工

2013-07-26 09:51:12

網(wǎng)站性能網(wǎng)站測(cè)試性能測(cè)試

2011-09-08 17:31:29

Steply社交圖片

2022-11-28 11:31:37

2015-08-17 13:29:36

大數(shù)據(jù)社交

2009-07-31 16:29:47

ibmdwXML

2011-03-28 15:44:45

惠普數(shù)據(jù)庫(kù)Oracle數(shù)據(jù)庫(kù)

2017-06-19 16:20:09

數(shù)據(jù)庫(kù)性能工具

2016-10-08 18:13:55

數(shù)據(jù)庫(kù)性能工具數(shù)據(jù)庫(kù)管理系統(tǒng)

2011-04-07 13:53:25

Web工具
點(diǎn)贊
收藏

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