日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

满足极高读写性能需求的Key-Value数据库

發(fā)布時間:2023/11/27 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 满足极高读写性能需求的Key-Value数据库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

滿足極高讀寫性能需求的Key-Value數(shù)據(jù)庫

高性能Key-Value數(shù)據(jù)庫的主要特點就是具有極高的并發(fā)讀寫性能,Redis,Tokyo Cabinet, Flare,這3個Key-Value DB都是用C編寫的,他們的性能都相當出色,但出了出色的性能,他們還有自己獨特的功能:

1、Redis
Redis是一個很新的項目,剛剛發(fā)布了1.0版本。Redis本質(zhì)上是一個Key-Value類型的內(nèi)存數(shù)據(jù)庫,很像memcached,整個數(shù)據(jù)庫統(tǒng) 統(tǒng)加載在內(nèi)存當中進行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進行保存。因為是純內(nèi)存操作,Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作,是我知道的性能最快的Key-Value DB。

Redis的出色之處不僅僅是性能,Redis最大的魅力是支持保存List鏈表和Set集合的數(shù)據(jù)結(jié)構(gòu),而且還支持對List進行各種操作,例如 從List兩端push和pop數(shù)據(jù),取List區(qū)間,排序等等,對Set支持各種集合的并集交集操作,此外單個value的最大限制是1GB,不像 memcached只能保存1MB的數(shù)據(jù),因此Redis可以用來實現(xiàn)很多有用的功能,比方說用他的List來做FIFO雙向鏈表,實現(xiàn)一個輕量級的高性 能消息隊列服務(wù),用他的Set可以做高性能的tag系統(tǒng)等等。另外Redis也可以對存入的Key-Value設(shè)置expire時間,因此也可以被當作一 個功能加強版的memcached來用。

Redis的主要缺點是數(shù)據(jù)庫容量受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫,并且它沒有原生的可擴展機制,不具有scale(可擴展)能 力,要依賴客戶端來實現(xiàn)分布式讀寫,因此Redis適合的場景主要局限在較小數(shù)據(jù)量的高性能操作和運算上。目前使用Redis的網(wǎng)站有 github,Engine Yard。

2、Tokyo Cabinet和Tokoy Tyrant
TC和TT的開發(fā)者是日本人Mikio Hirabayashi,主要被用在日本最大的SNS網(wǎng)站mixi.jp上,TC發(fā)展的時間最早,現(xiàn)在已經(jīng)是一個非常成熟的項目,也是Kye-Value 數(shù)據(jù)庫領(lǐng)域最大的熱點,現(xiàn)在被廣泛的應(yīng)用在很多很多網(wǎng)站上。TC是一個高性能的存儲引擎,而TT提供了多線程高并發(fā)服務(wù)器,性能也非常出色,每秒可以處理 4-5萬次讀寫操作。

TC除了支持Key-Value存儲之外,還支持保存Hashtable數(shù)據(jù)類型,因此很像一個簡單的數(shù)據(jù)庫表,并且還支持基于column的條件 查詢,分頁查詢和排序功能,基本上相當于支持單表的基礎(chǔ)查詢功能了,所以可以簡單的替代關(guān)系數(shù)據(jù)庫的很多操作,這也是TC受到大家歡迎的主要原因之一,有 一個Ruby的項目miyazakiresistance將TT的hashtable的操作封裝成和ActiveRecord一樣的操作,用起來非常爽。

TC/TT在mixi的實際應(yīng)用當中,存儲了2000萬條以上的數(shù)據(jù),同時支撐了上萬個并發(fā)連接,是一個久經(jīng)考驗的項目。TC在保證了極高的并發(fā)讀 寫性能的同時,具有可靠的數(shù)據(jù)持久化機制,同時還支持類似關(guān)系數(shù)據(jù)庫表結(jié)構(gòu)的hashtable以及簡單的條件,分頁和排序操作,是一個很棒的NoSQL 數(shù)據(jù)庫。

TC的主要缺點是在數(shù)據(jù)量達到上億級別以后,并發(fā)寫數(shù)據(jù)性能會大幅度下降,NoSQL: If Only It Was That Easy提到,他們發(fā)現(xiàn)在TC里面插入1.6億條2-20KB數(shù)據(jù)的時候,寫入性能開始急劇下降。看來是當數(shù)據(jù)量上億條的時候,TC性能開始大幅度下降, 從TC作者自己提供的mixi數(shù)據(jù)來看,至少上千萬條數(shù)據(jù)量的時候還沒有遇到這么明顯的寫入性能瓶頸。

這個是Tim Yang做的一個Memcached,Redis和Tokyo Tyrant的簡單的性能評測,僅供參考

3、Flare
TC是日本第一大SNS網(wǎng)站mixi開發(fā)的,而Flare是日本第二大SNS網(wǎng)站green.jp開發(fā)的,有意思吧。Flare簡單的說就是給TC添加了 scale功能。他替換掉了TT部分,自己另外給TC寫了網(wǎng)絡(luò)服務(wù)器,Flare的主要特點就是支持scale能力,他在網(wǎng)絡(luò)服務(wù)端之前添加了一個 node server,來管理后端的多個服務(wù)器節(jié)點,因此可以動態(tài)添加數(shù)據(jù)庫服務(wù)節(jié)點,刪除服務(wù)器節(jié)點,也支持failover。如果你的使用場景必須要讓TC可 以scale,那么可以考慮flare。

flare唯一的缺點就是他只支持memcached協(xié)議,因此當你使用flare的時候,就不能使用TC的table數(shù)據(jù)結(jié)構(gòu)了,只能使用TC的 key-value數(shù)據(jù)結(jié)構(gòu)存儲。

二、滿足海量存儲需求和訪問的面向文檔的數(shù)據(jù)庫:MongoDB,CouchDB

面向文檔的非關(guān)系數(shù)據(jù)庫主要解決的問題不是高性能的并發(fā)讀寫,而是保證海量數(shù)據(jù)存儲的同時,具有良好的查詢性能。MongoDB是用C++開發(fā)的, 而CouchDB則是Erlang開發(fā)的:

1、MongoDB
MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似 json的bjson格式,因此可以存儲比較復雜的數(shù)據(jù)類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾 乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。

Mongo主要解決的是海量數(shù)據(jù)的訪問效率問題,根據(jù)官方的文檔,當數(shù)據(jù)量達到50GB以上的時候,Mongo的數(shù)據(jù)庫訪問速度是MySQL的10 倍以上。Mongo的并發(fā)讀寫效率不是特別出色,根據(jù)官方提供的性能測試表明,大約每秒可以處理0.5萬-1.5次讀寫請求。對于Mongo的并發(fā)讀寫性 能,我也打算有空的時候好好測試一下。

因為Mongo主要是支持海量數(shù)據(jù)存儲的,所以Mongo還自帶了一個出色的分布式文件系統(tǒng)GridFS,可以支持海量的數(shù)據(jù)存儲,但我也看到有些 評論認為GridFS性能不佳,這一點還是有待親自做點測試來驗證了。

最后由于Mongo可以支持復雜的數(shù)據(jù)結(jié)構(gòu),而且?guī)в袕姶蟮臄?shù)據(jù)查詢功能,因此非常受到歡迎,很多項目都考慮用MongoDB來替代MySQL來實 現(xiàn)不是特別復雜的Web應(yīng)用,比方說why we migrated from MySQL to MongoDB就是一個真實的從MySQL遷移到MongoDB的案例,由于數(shù)據(jù)量實在太大,所以遷移到了Mongo上面,數(shù)據(jù)查詢的速度得到了非常顯著 的提升。

MongoDB也有一個ruby的項目MongoMapper,是模仿Merb的DataMapper編寫的MongoDB的接口,使用起來非常簡 單,幾乎和DataMapper一模一樣,功能非常強大易用。

2、CouchDB
CouchDB現(xiàn)在是一個非常有名氣的項目,似乎不用多介紹了。但是卻對CouchDB沒有什么興趣,主要是因為CouchDB僅僅提供了基于HTTP REST的接口,因此CouchDB單純從并發(fā)讀寫性能來說,是非常糟糕的,這讓我立刻拋棄了對CouchDB的興趣。

三、滿足高可擴展性和可用性的面向分布式計算的數(shù)據(jù)庫:Cassandra,Voldemort

面向scale能力的數(shù)據(jù)庫其實主要解決的問題領(lǐng)域和上述兩類數(shù)據(jù)庫還不太一樣,它首先必須是一個分布式的數(shù)據(jù)庫系統(tǒng),由分布在不同節(jié)點上面的數(shù)據(jù) 庫共同構(gòu)成一個數(shù)據(jù)庫服務(wù)系統(tǒng),并且根據(jù)這種分布式架構(gòu)來提供online的,具有彈性的可擴展能力,例如可以不停機的添加更多數(shù)據(jù)節(jié)點,刪除數(shù)據(jù)節(jié)點等 等。因此像Cassandra常常被看成是一個開源版本的Google BigTable的替代品。Cassandra和Voldemort都是用Java開發(fā)的:

1、Cassandra
Cassandra項目是Facebook在2008年開源出來的,隨后Facebook自己使用Cassandra的另外一個不開源的分支,而開源出來 的Cassandra主要被Amazon的Dynamite團隊來維護,并且Cassandra被認為是Dynamite2.0版本。目前除了 Facebook之外,twitter和digg.com都在使用Cassandra。

Cassandra的主要特點就是它不是一個數(shù)據(jù)庫,而是由一堆數(shù)據(jù)庫節(jié)點共同構(gòu)成的一個分布式網(wǎng)絡(luò)服務(wù),對Cassandra的一個寫操作,會被 復制到其他節(jié)點上去,對Cassandra的讀操作,也會被路由到某個節(jié)點上面去讀取。對于一個Cassandra群集來說,擴展性能是比較簡單的事情, 只管在群集里面添加節(jié)點就可以了。看到有文章說Facebook的Cassandra群集有超過100臺服務(wù)器構(gòu)成的數(shù)據(jù)庫群集。

Cassandra也支持比較豐富的數(shù)據(jù)結(jié)構(gòu)和功能強大的查詢語言,和MongoDB比較類似,查詢功能比MongoDB稍弱一些,twitter 的平臺架構(gòu)部門領(lǐng)導Evan Weaver寫了一篇文章介紹Cassandra:http://blog.evanweaver.com/articles/2009/07/06 /up-and-running-with-cassandra/,有非常詳細的介紹。

Cassandra以單個節(jié)點來衡量,其節(jié)點的并發(fā)讀寫性能不是特別好,有文章說評測下來Cassandra每秒大約不到1萬次讀寫請求,也看到一 些對這個問題進行質(zhì)疑的評論,但是評價Cassandra單個節(jié)點的性能是沒有意義的,真實的分布式數(shù)據(jù)庫訪問系統(tǒng)必然是n多個節(jié)點構(gòu)成的系統(tǒng),其并發(fā)性 能取決于整個系統(tǒng)的節(jié)點數(shù)量,路由效率,而不僅僅是單節(jié)點的并發(fā)負載能力。

2、Voldemort
Voldemort是個和Cassandra類似的面向解決scale問題的分布式數(shù)據(jù)庫系統(tǒng),Cassandra來自于Facebook這個SNS網(wǎng) 站,而Voldemort則來自于Linkedin這個SNS網(wǎng)站。說起來SNS網(wǎng)站為我們貢獻了n多的NoSQL數(shù)據(jù)庫,例如 Cassandar,Voldemort,Tokyo Cabinet,Flare等等。Voldemort的資料不是很多,因此沒有特別仔細去鉆研,Voldemort官方給出Voldemort的并發(fā)讀寫 性能也很不錯,每秒超過了1.5萬次讀寫。

從Facebook開發(fā)Cassandra,Linkedin開發(fā)Voldemort,我們也可以大致看出國外大型SNS網(wǎng)站對于分布式數(shù)據(jù)庫,特 別是對數(shù)據(jù)庫的scale能力方面的需求是多么殷切。前面提到,web應(yīng)用的架構(gòu)當中,web層和app層相對來說都很容易橫向擴展,唯有數(shù)據(jù)庫是單點 的,極難scale,現(xiàn)在Facebook和Linkedin在非關(guān)系型數(shù)據(jù)庫的分布式方面探索了一條很好的方向,這也是為什么現(xiàn)在Cassandra這 么熱門的主要原因。

總結(jié)

以上是生活随笔為你收集整理的满足极高读写性能需求的Key-Value数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。