键值数据库LevelDB的优缺点及性能分析
導(dǎo)讀:LevelDB是一種為分布式而生的鍵-值數(shù)據(jù)庫(kù)。
作者:廖環(huán)宇 張仕華
來(lái)源:大數(shù)據(jù)DT(ID:hzdashuju)
01 LevelDB的特性
LevelDB是一個(gè)C++語(yǔ)言編寫(xiě)的高效鍵-值嵌入式數(shù)據(jù)庫(kù),目前對(duì)億級(jí)的數(shù)據(jù)也有著非常好的讀寫(xiě)性能。雖然LevelDB有著許多鍵-值數(shù)據(jù)庫(kù)所不具備的優(yōu)秀特性,但是與Redis等一些主流鍵-值數(shù)據(jù)庫(kù)相比也有缺陷。本節(jié)將對(duì)LevelDB的優(yōu)缺點(diǎn)進(jìn)行具體闡述。
LevelDB的優(yōu)點(diǎn)體現(xiàn)在:
key與value采用字符串形式,且長(zhǎng)度沒(méi)有限制;
數(shù)據(jù)能持久化存儲(chǔ),同時(shí)也能將數(shù)據(jù)緩存到內(nèi)存,實(shí)現(xiàn)快速讀取;
基于key按序存放數(shù)據(jù),并且key的排序比較函數(shù)可以根據(jù)用戶(hù)需求進(jìn)行定制;
支持簡(jiǎn)易的操作接口API,如Put、Get、Delete,并支持批量寫(xiě)入;
可以針對(duì)數(shù)據(jù)創(chuàng)建數(shù)據(jù)內(nèi)存快照;
支持前向、后向的迭代器;
采用Google的Snappy壓縮算法對(duì)數(shù)據(jù)進(jìn)行壓縮,以減少存儲(chǔ)空間;
基本不依賴(lài)其他第三方模塊,可非常容易地移植到Windows、Linux、UNIX、Android、iOS。
LevelDB的缺點(diǎn)體現(xiàn)在:
不是傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù),不支持SQL查詢(xún)與索引;
只支持單進(jìn)程,不支持多進(jìn)程;
不支持多種數(shù)據(jù)類(lèi)型;
不支持客戶(hù)端-服務(wù)器的訪問(wèn)模式。用戶(hù)在應(yīng)用時(shí),需要自己進(jìn)行網(wǎng)絡(luò)服務(wù)的封裝。
讀者可以綜合LevelDB的優(yōu)缺點(diǎn),有針對(duì)性地評(píng)估其是否適用于實(shí)際開(kāi)發(fā)的項(xiàng)目/產(chǎn)品,并對(duì)最終是否使用進(jìn)行決定。
02 LevelDB的性能分析
在LevelDB的源碼中,筆者寫(xiě)了一段用于測(cè)試LevelDB性能的代碼(db_bench.cc)。經(jīng)過(guò)編譯后,生成用于性能測(cè)試的可執(zhí)行程序db_bench。通過(guò)運(yùn)行該性能測(cè)試程序,用戶(hù)能直觀地了解LevelDB在海量數(shù)據(jù)讀寫(xiě)方面的性能。
可為測(cè)試程序db_bench指定相關(guān)測(cè)試參數(shù),也可以選擇默認(rèn)參數(shù)。db_bench在默認(rèn)的測(cè)試參數(shù)下讀寫(xiě)百萬(wàn)級(jí)別的數(shù)據(jù)時(shí),每一個(gè)數(shù)據(jù)的key占用16字節(jié),value占用100字節(jié)(啟用壓縮后,value占用50字節(jié),即壓縮率為50%)。
db_bench主要針對(duì)讀與寫(xiě)兩個(gè)方面進(jìn)行測(cè)試。寫(xiě)性能測(cè)試項(xiàng)具體如下。
Fillseq:以順序?qū)懙姆绞絼?chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。
Fillrandom:以隨機(jī)寫(xiě)的方式創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。
Overwrite:以隨機(jī)寫(xiě)的方式更新數(shù)據(jù)庫(kù)中某些存在的key的數(shù)據(jù)。
Fillsync:每一次寫(xiě)操作,均將數(shù)據(jù)同步寫(xiě)到磁盤(pán)中才算操作完成;而對(duì)于上述3種其他的寫(xiě)操作,只是將需要寫(xiě)的數(shù)據(jù)送入操作系統(tǒng)的緩沖區(qū)就算成功。
讀性能測(cè)試項(xiàng)具體如下。
Readrandom:以隨機(jī)的方式進(jìn)行查詢(xún)讀。
Readseq:按正向順序讀。
Readreverse:按逆向順序讀。
在終端中輸入命令執(zhí)行db_bench,測(cè)試程序即可進(jìn)行相應(yīng)的讀寫(xiě)操作,并記錄相應(yīng)的性能數(shù)據(jù)。
$ ./db_bench針對(duì)上述的幾個(gè)測(cè)試項(xiàng),表1-1對(duì)比了LevelDB官方發(fā)布的與筆者實(shí)際測(cè)試的結(jié)果。兩者硬件測(cè)試環(huán)境不同,因而相應(yīng)測(cè)試項(xiàng)的數(shù)據(jù)也不相同。但總體而言,可以得知LevelDB讀寫(xiě)性能的優(yōu)異。
▼表1-1 LevelDB測(cè)試數(shù)據(jù)
此外,為了更好地測(cè)試比較LevelDB的實(shí)際性能,Google的工程師也將LevelDB與另外兩種數(shù)據(jù)庫(kù)(SQLite3和Kyoto TreeDB)進(jìn)行了對(duì)比。經(jīng)過(guò)測(cè)試證明,LevelDB相較于另外兩種數(shù)據(jù)庫(kù),無(wú)論是在基本操作環(huán)境下,還是在某些特定配置環(huán)境下,均具有非常優(yōu)秀的讀寫(xiě)性能。
具體測(cè)試結(jié)果,可以參見(jiàn)源碼中的leveldb/doc/benchmark.html。
關(guān)于作者:廖環(huán)宇,中南大學(xué)碩士、阿里云高級(jí)算法專(zhuān)家與工業(yè)大腦算法團(tuán)隊(duì)負(fù)責(zé)人,長(zhǎng)期致力于人工智能算法與工業(yè)大數(shù)據(jù)技術(shù)的研究和實(shí)踐,主導(dǎo)過(guò)許多大型數(shù)據(jù)智能平臺(tái)的開(kāi)發(fā)與應(yīng)用。
張仕華,貝殼找房資深軟件開(kāi)發(fā)工程師,畢業(yè)于北京科技大學(xué),曾就職于360、滴滴。熱衷源碼研究與探究技術(shù)本質(zhì),合著有《Redis 5設(shè)計(jì)與源碼分析》。
本文摘編自《精通LevelDB》,經(jīng)出版方授權(quán)發(fā)布。(ISBN:9787111693260)
《精通LevelDB》
點(diǎn)擊上圖了解及購(gòu)買(mǎi)
轉(zhuǎn)載請(qǐng)聯(lián)系微信:DoctorData
推薦語(yǔ):阿里、貝殼找房專(zhuān)家聯(lián)合撰寫(xiě),深入方法與關(guān)鍵代碼層面,多注釋與講解。本書(shū)詳細(xì)剖析LevelDB從使用到設(shè)計(jì)實(shí)現(xiàn)的方方面面,讀后可了解谷歌Bigtable數(shù)據(jù)庫(kù)的設(shè)計(jì)精髓。
刷刷視頻👇
干貨直達(dá)👇
科普兩個(gè)著名人工智能思想實(shí)驗(yàn):圖靈測(cè)試和中文房間
產(chǎn)品經(jīng)理最重要的3個(gè)能力
終于有人把數(shù)據(jù)挖掘講明白了
盤(pán)點(diǎn)人工智能重點(diǎn)技術(shù)領(lǐng)域
更多精彩👇
在公眾號(hào)對(duì)話框輸入以下關(guān)鍵詞
查看更多優(yōu)質(zhì)內(nèi)容!
讀書(shū)?|?書(shū)單?|?干貨?|?講明白?|?神操作?|?手把手
大數(shù)據(jù)?|?云計(jì)算?|?數(shù)據(jù)庫(kù)?|?Python?|?爬蟲(chóng)?|?可視化
AI?|?人工智能?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?NLP
5G?|?中臺(tái)?|?用戶(hù)畫(huà)像?|?數(shù)學(xué)?|?算法?|?數(shù)字孿生
據(jù)統(tǒng)計(jì),99%的大咖都關(guān)注了這個(gè)公眾號(hào)
👇
總結(jié)
以上是生活随笔為你收集整理的键值数据库LevelDB的优缺点及性能分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 涅槃重生的下一个超级风口:8本书助你赢在
- 下一篇: 手绘导图版:深入解析机器学习在风控场景中