版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
鍵值對數(shù)據(jù)庫綜述與典型KV數(shù)據(jù)庫介紹一、鍵值數(shù)據(jù)庫概述鍵值數(shù)據(jù)庫是一種非關(guān)系數(shù)據(jù)庫,它使用簡單的鍵值方法來存儲數(shù)據(jù)。鍵值數(shù)據(jù)庫將數(shù)據(jù)存儲為鍵值對集合,其中鍵作為唯一標(biāo)識符。鍵和值都可以是從簡單對象到復(fù)雜復(fù)合對象的任何內(nèi)容。鍵值數(shù)據(jù)庫是高度可分區(qū)的,并且允許以其他類型的數(shù)據(jù)庫無法實現(xiàn)的規(guī)模進(jìn)行水平擴(kuò)展。Key-Value鍵值對數(shù)據(jù)模型實際上是一個映射,即key是查找每條數(shù)據(jù)地址的唯一關(guān)鍵字,value是該數(shù)據(jù)實際存儲的內(nèi)容。例如鍵值對:(“20091234”,“張三”),其key:“20091234”是該數(shù)據(jù)的唯一入口,而value:“張三”是該數(shù)據(jù)實際存儲的內(nèi)容.Key-Value數(shù)據(jù)模型典型的是采用哈希函數(shù)實現(xiàn)關(guān)鍵字到值的映射,查詢時,基于key的hash值直接定位到數(shù)據(jù)所在的點,實現(xiàn)快速查詢,并支持大數(shù)據(jù)量和高并發(fā)查詢。二、基本原理從API的角度來看,鍵值數(shù)據(jù)庫是最簡單的NoSQL數(shù)據(jù)庫。客戶端可以根據(jù)鍵查詢值,設(shè)置鍵所對應(yīng)的值,或從數(shù)據(jù)庫中刪除鍵。“值”只是數(shù)據(jù)庫存儲的一塊數(shù)據(jù)而已,它并不關(guān)心也無需知道其中的內(nèi)容;應(yīng)用程序負(fù)責(zé)理解所存數(shù)據(jù)的含義。由于鍵值數(shù)據(jù)庫總是通過主鍵訪問,所以它們一般性能較高,且易于擴(kuò)展?;旧纤械木幊陶Z言都帶有應(yīng)用在內(nèi)存中的鍵值對存儲。C++STL的映射容器(mapcontainer)和Java的HashMap以及Python的字典類型都是鍵值對存儲。鍵值對存儲通常都有如下接口:Get(key):獲取之前存儲于某標(biāo)示符“key”之下的一些數(shù)據(jù),或者“key”下沒有數(shù)據(jù)時報錯。Set(key,value):將“value”存儲到存儲空間中某標(biāo)示符“key”下,使得我們可以通過調(diào)用相同的“key”來訪問它。如果“key”下已經(jīng)有了一些數(shù)據(jù),舊的數(shù)據(jù)將被替換。Delete(key):刪除存儲在“key”下的數(shù)據(jù)。三、基本特性鍵值數(shù)據(jù)庫具有以下幾個特性:容錯性可擴(kuò)展性有效性四、讀寫方式分析已有key-value數(shù)據(jù)庫,其讀寫方式可分為面向磁盤的讀寫方式和面向內(nèi)存的讀寫方式兩種.后者適合于不要求存儲海量的數(shù)據(jù)但需要對特定的數(shù)據(jù)進(jìn)行高速并發(fā)訪問的場景.采用哪一種讀寫方式,通常由數(shù)據(jù)量的大小和對訪問速度的要求決定的。1)面向磁盤的讀寫方式通常情況下,NoSQL系統(tǒng)中都存儲著海量的數(shù)據(jù),且無法全部維持在內(nèi)存中,所以一般都采用面向磁盤的讀寫方式,下圖描述了NoSQL系統(tǒng)中采用的典型的面向磁盤讀寫的一般過程。圖4-1面向磁盤的讀寫過程通常,當(dāng)寫入數(shù)據(jù)時,數(shù)據(jù)首先會被寫到一個內(nèi)存結(jié)構(gòu)中,系統(tǒng)返回寫入成功.當(dāng)內(nèi)存中的數(shù)據(jù)達(dá)到指定大小或存放超過指定時限時,會被批量寫入磁盤.當(dāng)需要讀取數(shù)據(jù)時,首先訪問內(nèi)存結(jié)構(gòu),如果未命中則需要訪問磁盤上的實例化文件.當(dāng)系統(tǒng)發(fā)生意外宕機(jī)時,內(nèi)存結(jié)構(gòu)中的數(shù)據(jù)將丟失,因此,一般采用日志的方式來幫助進(jìn)行數(shù)據(jù)恢復(fù).為了進(jìn)一步提高寫入效率和并發(fā)能力,許多系統(tǒng)都采用了Append的方式,即將修改和刪除操作都追加寫到文件末尾,而讀數(shù)據(jù)時利用時間戳過濾掉舊信息,返回給用戶最新版本的數(shù)據(jù).因此,數(shù)據(jù)庫需要進(jìn)行定期的數(shù)據(jù)合并,將過期的冗余數(shù)據(jù)刪除。2)面向內(nèi)存的讀寫方式內(nèi)存數(shù)據(jù)庫將所有數(shù)據(jù)存放在內(nèi)存中。每次訪問記錄時,無需將數(shù)據(jù)從磁盤讀到內(nèi)存中,避免了磁盤操作造成的延遲。在幾十年前,由于內(nèi)存容量的限制,在數(shù)據(jù)庫中,內(nèi)存只能充當(dāng)磁盤的緩存。但隨著存儲技術(shù)的迅猛發(fā)展,單臺機(jī)器的內(nèi)存容量不斷增長。目前,高端的服務(wù)器已經(jīng)能提供幾太字節(jié)的內(nèi)存容量。這使得將所有數(shù)據(jù)存在內(nèi)存中成為可能。磁盤讀寫操作不再是性能瓶頸后,數(shù)據(jù)庫系統(tǒng)由IO受限(IO-bound)轉(zhuǎn)向CPU受限(CPU-bound)。圖6-1Memcached的基本原理Memcached作為高速運(yùn)行的分布式緩存服務(wù)器,具有以下的特點。協(xié)議簡單基于libevent的事件處理內(nèi)置內(nèi)存存儲方式memcached不互相通信的分布式許多語言都實現(xiàn)了連接memcached的客戶端,其中以Perl、PHP為主。僅僅memcached網(wǎng)站上列出的有:Perl、PHP、Python、Ruby、C#、C/C++、Lua等等。除此之外,Memcached用戶十分廣泛,如LiveJournal、Wikipedia、Flickr、Bebo、Twitter、Typepad、Yellowbot、Youtube、WordP等等。(三)LevelDB簡介LevelDB是google實現(xiàn)后現(xiàn)已開源的高效持久化的KV數(shù)據(jù)庫,對于隨機(jī)寫有著對于隨機(jī)寫有著良好的性能,適用于查詢少、寫入多的系統(tǒng)。在billion數(shù)量級下LevelDBLevelDB仍保持著高速的響應(yīng),這主要由于它采用了LSM算法,對索引變更先延時暫時保存,達(dá)到一定程度在統(tǒng)一處理,在通過合并更新至硬盤,減少系統(tǒng)的開銷。LevelDB具有以下特點:(1)LevelDB將大部分?jǐn)?shù)據(jù)存儲在磁盤上,減輕內(nèi)存負(fù)擔(dān)提高響應(yīng)速度;(2)插入記錄時鍵值默認(rèn)按照字典順序存儲,也可自定義排函數(shù);(3)提供了基本操作接口,可以批量也單獨執(zhí)行,可移植性好;(4)自動使用Snappy壓縮數(shù)據(jù),全景的snapshot(快照)使讀寫分離,保持?jǐn)?shù)據(jù)在讀操作時的一致性。(四)RocksDB簡介RocksDB是一個來自facebook的可嵌入式的支持持久化的key-value存儲系統(tǒng),也可作為C/S模式下的存儲數(shù)據(jù)庫,但主要目的還是嵌入式。RocksDB基于LevelDB構(gòu)建,因此實際上是LevelDB的優(yōu)化。下面是RocksDB對LevelDB的優(yōu)化:1)增加了columnfamily,這樣有利于多個不相關(guān)的數(shù)據(jù)集存儲在同一個db中,因為不同columnfamily的數(shù)據(jù)是存儲在不同的sst和memtable中,所以一定程度上起到了隔離的作用。2)采用了多線程同時進(jìn)行compaction的方法,優(yōu)化了compact的速度。3)增加了mergeoperator,優(yōu)化了modify的效率。4)將flush和compaction分開不同的線程池,能有效的加快flush,防止stall。5)增加了對writeaheadlog(WAL)的特殊管理機(jī)制,這樣就能方便管理WAL文件,因為WAL是binlog文件。五、參考資料ImplementingaKey-ValueStore–Part1:Whatarekey-valuestores,andwhyimplementone?:/2012/11/07/implementing-a-key-value-store-part-1-what-are-key-value-stores-and-why-implement-one/CSDN博客-鍵值存儲:/l740450789/article/details/46459053NoSQL:鍵值數(shù)據(jù)庫:/qq_39384184/article/details/83048857什么是鍵值數(shù)據(jù)庫:/cn/nosql/key-value/Redis真的那么好用嗎:/articles/20181020002.htmlMongoDB、Hbase、Redis等NoSQL優(yōu)劣勢、應(yīng)用場景:/articles/20181020003.htmlMemcached教程:/memcached/memcached-tutorial.htmlMemcached官網(wǎng):/RocksDB介紹:/weixin_36145588/article/detail
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人車位出租合同轉(zhuǎn)讓及附加條款合同2025
- 二手房分期付款交易合同
- 個人擔(dān)保合同范本
- 專項機(jī)械設(shè)備租賃合同
- 專業(yè)運(yùn)動員營養(yǎng)支持服務(wù)合同
- 臨時私人司機(jī)服務(wù)合同
- 2025年出租店面協(xié)議范本
- 2025年餐飲領(lǐng)域合作租賃協(xié)議
- 一手房購房定金合同樣本
- 產(chǎn)業(yè)融合項目合作合同
- YY/T 0698.5-2023最終滅菌醫(yī)療器械包裝材料第5部分:透氣材料與塑料膜組成的可密封組合袋和卷材要求和試驗方法
- 【深度教學(xué)研究國內(nèi)外文獻(xiàn)綜述2100字】
- 牽引管道孔壁與管道外壁之間注漿技術(shù)方案
- 新人教版四年級下冊數(shù)學(xué)教材解讀課件
- 竣工資料封面
- 膿毒血癥指南
- 中國航天知識
- 安徽華納化學(xué)工業(yè)有限公司年產(chǎn)1000噸均苯四甲酸二酐、300噸潤滑油助劑項目環(huán)境影響報告書
- YY 9706.230-2023醫(yī)用電氣設(shè)備第2-30部分:自動無創(chuàng)血壓計的基本安全和基本性能專用要求
- 第8課紅樓春趣同步練習(xí)(含答案)
- C139營銷模型簡介(含案例)課件
評論
0/150
提交評論