鍵值對數據庫綜述_第1頁
鍵值對數據庫綜述_第2頁
鍵值對數據庫綜述_第3頁
鍵值對數據庫綜述_第4頁
鍵值對數據庫綜述_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

鍵值對數據庫綜述與典型KV數據庫介紹一、鍵值數據庫概述鍵值數據庫是一種非關系數據庫,它使用簡單的鍵值方法來存儲數據。鍵值數據庫將數據存儲為鍵值對集合,其中鍵作為唯一標識符。鍵和值都可以是從簡單對象到復雜復合對象的任何內容。鍵值數據庫是高度可分區(qū)的,并且允許以其他類型的數據庫無法實現的規(guī)模進行水平擴展。Key-Value鍵值對數據模型實際上是一個映射,即key是查找每條數據地址的唯一關鍵字,value是該數據實際存儲的內容。例如鍵值對:(“20091234”,“張三”),其key:“20091234”是該數據的唯一入口,而value:“張三”是該數據實際存儲的內容.Key-Value數據模型典型的是采用哈希函數實現關鍵字到值的映射,查詢時,基于key的hash值直接定位到數據所在的點,實現快速查詢,并支持大數據量和高并發(fā)查詢。二、基本原理從API的角度來看,鍵值數據庫是最簡單的NoSQL數據庫??蛻舳丝梢愿鶕I查詢值,設置鍵所對應的值,或從數據庫中刪除鍵。“值”只是數據庫存儲的一塊數據而已,它并不關心也無需知道其中的內容;應用程序負責理解所存數據的含義。由于鍵值數據庫總是通過主鍵訪問,所以它們一般性能較高,且易于擴展?;旧纤械木幊陶Z言都帶有應用在內存中的鍵值對存儲。C++STL的映射容器(mapcontainer)和Java的HashMap以及Python的字典類型都是鍵值對存儲。鍵值對存儲通常都有如下接口:Get(key):獲取之前存儲于某標示符“key”之下的一些數據,或者“key”下沒有數據時報錯。Set(key,value):將“value”存儲到存儲空間中某標示符“key”下,使得我們可以通過調用相同的“key”來訪問它。如果“key”下已經有了一些數據,舊的數據將被替換。Delete(key):刪除存儲在“key”下的數據。三、基本特性鍵值數據庫具有以下幾個特性:容錯性可擴展性有效性四、讀寫方式分析已有key-value數據庫,其讀寫方式可分為面向磁盤的讀寫方式和面向內存的讀寫方式兩種.后者適合于不要求存儲海量的數據但需要對特定的數據進行高速并發(fā)訪問的場景.采用哪一種讀寫方式,通常由數據量的大小和對訪問速度的要求決定的。1)面向磁盤的讀寫方式通常情況下,NoSQL系統(tǒng)中都存儲著海量的數據,且無法全部維持在內存中,所以一般都采用面向磁盤的讀寫方式,下圖描述了NoSQL系統(tǒng)中采用的典型的面向磁盤讀寫的一般過程。圖4-1面向磁盤的讀寫過程通常,當寫入數據時,數據首先會被寫到一個內存結構中,系統(tǒng)返回寫入成功.當內存中的數據達到指定大小或存放超過指定時限時,會被批量寫入磁盤.當需要讀取數據時,首先訪問內存結構,如果未命中則需要訪問磁盤上的實例化文件.當系統(tǒng)發(fā)生意外宕機時,內存結構中的數據將丟失,因此,一般采用日志的方式來幫助進行數據恢復.為了進一步提高寫入效率和并發(fā)能力,許多系統(tǒng)都采用了Append的方式,即將修改和刪除操作都追加寫到文件末尾,而讀數據時利用時間戳過濾掉舊信息,返回給用戶最新版本的數據.因此,數據庫需要進行定期的數據合并,將過期的冗余數據刪除。2)面向內存的讀寫方式內存數據庫將所有數據存放在內存中。每次訪問記錄時,無需將數據從磁盤讀到內存中,避免了磁盤操作造成的延遲。在幾十年前,由于內存容量的限制,在數據庫中,內存只能充當磁盤的緩存。但隨著存儲技術的迅猛發(fā)展,單臺機器的內存容量不斷增長。目前,高端的服務器已經能提供幾太字節(jié)的內存容量。這使得將所有數據存在內存中成為可能。磁盤讀寫操作不再是性能瓶頸后,數據庫系統(tǒng)由IO受限(IO-bound)轉向CPU受限(CPU-bound)。圖6-1Memcached的基本原理Memcached作為高速運行的分布式緩存服務器,具有以下的特點。協(xié)議簡單基于libevent的事件處理內置內存存儲方式memcached不互相通信的分布式許多語言都實現了連接memcached的客戶端,其中以Perl、PHP為主。僅僅memcached網站上列出的有:Perl、PHP、Python、Ruby、C#、C/C++、Lua等等。除此之外,Memcached用戶十分廣泛,如LiveJournal、Wikipedia、Flickr、Bebo、Twitter、Typepad、Yellowbot、Youtube、WordP等等。(三)LevelDB簡介LevelDB是google實現后現已開源的高效持久化的KV數據庫,對于隨機寫有著對于隨機寫有著良好的性能,適用于查詢少、寫入多的系統(tǒng)。在billion數量級下LevelDBLevelDB仍保持著高速的響應,這主要由于它采用了LSM算法,對索引變更先延時暫時保存,達到一定程度在統(tǒng)一處理,在通過合并更新至硬盤,減少系統(tǒng)的開銷。LevelDB具有以下特點:(1)LevelDB將大部分數據存儲在磁盤上,減輕內存負擔提高響應速度;(2)插入記錄時鍵值默認按照字典順序存儲,也可自定義排函數;(3)提供了基本操作接口,可以批量也單獨執(zhí)行,可移植性好;(4)自動使用Snappy壓縮數據,全景的snapshot(快照)使讀寫分離,保持數據在讀操作時的一致性。(四)RocksDB簡介RocksDB是一個來自facebook的可嵌入式的支持持久化的key-value存儲系統(tǒng),也可作為C/S模式下的存儲數據庫,但主要目的還是嵌入式。RocksDB基于LevelDB構建,因此實際上是LevelDB的優(yōu)化。下面是RocksDB對LevelDB的優(yōu)化:1)增加了columnfamily,這樣有利于多個不相關的數據集存儲在同一個db中,因為不同columnfamily的數據是存儲在不同的sst和memtable中,所以一定程度上起到了隔離的作用。2)采用了多線程同時進行compaction的方法,優(yōu)化了compact的速度。3)增加了mergeoperator,優(yōu)化了modify的效率。4)將flush和compaction分開不同的線程池,能有效的加快flush,防止stall。5)增加了對writeaheadlog(WAL)的特殊管理機制,這樣就能方便管理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:鍵值數據庫:/qq_39384184/article/details/83048857什么是鍵值數據庫:/cn/nosql/key-value/Redis真的那么好用嗎:/articles/20181020002.htmlMongoDB、Hbase、Redis等NoSQL優(yōu)劣勢、應用場景:/articles/20181020003.htmlMemcached教程:/memcached/memcached-tutorial.htmlMemcached官網:/RocksDB介紹:/weixin_36145588/article/detail

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論