redis和couchbase的比較


一、redis

1 Redis數據庫完全在內存中,因此處理速度非常快,每秒能執行約11萬集合,每秒約81000+條記錄;

2 Redis的數據能確保一致性——所有Redis操作是原子性(Atomicity,意味着操作的不可再分,要么執行要么不執行)的,這保證了如果兩個客戶端同時訪問的Redis服務器將獲得更新后的值。

3 通過定時快照(snapshot)和基於語句的追加(AppendOnlyFile,aof)兩種方式,redis可以支持數據持久化——將內存中的數據存儲到磁盤上,方便在宕機等突發情況下快速恢復。

優點:

1. 非常豐富的數據結構;

2. Redis提供了事務的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷;

3. 數據存在內存中,讀寫非常的高速,可以達到10w/s的頻率。

缺點:

1. Redis3.0后才出來官方的集群方案,但仍存在一些架構上的問題(出處);

2. 持久化功能體驗不佳——通過快照方法實現的話,需要每隔一段時間將整個數據庫的數據寫到磁盤上,代價非常高;而aof方法只追蹤變化的數據,類似於mysql的binlog方法,但追加log可能過大,同時所有操作均要重新執行一遍,恢復速度慢;

3. 由於是內存數據庫,所以,單台機器,存儲的數據量,跟機器本身的內存大小。雖然redis本身有key過期策略,但是還是需要提前預估和節約內存。如果內存增長過快,需要定期刪除數據。

適用場景:

適用於數據變化快且數據庫大小可遇見(適合內存容量)的應用程序。

couchbase

Couchbase Server 是個面向文檔的數據庫(其所用的技術來自於Apache CouchDB項目),能夠實現水平伸縮,並且對於數據的讀寫來說都能提供低延遲的訪問(這要歸功於Membase技術)。

1.特點

1.1 數據格式

Couchbase 跟 MongoDB 一樣都是面向文檔的數據庫,不過在往 Couchbase 插入數據前,需要先建立 bucket —— 可以把它理解為“庫”或“表”。

因為 Couchbase 數據基於 Bucket 而導致缺乏表結構的邏輯,故如果需要查詢數據,得先建立 view(跟RDBMS的視圖不同,view是將數據轉換為特定格式結構的數據形式如JSON)來執行。

Bucket的意義 —— 在於將數據進行分隔,比如:任何 view 就是基於一個 Bucket 的,僅對 Bucket 內的數據進行處理。一個server上可以有多個Bucket,每個Bucket的存儲類型、內容占用、數據復制數量等,都需要分別指定。從這個意義上看,每個Bucket都相當於一個獨立的實例。在集群狀態下,我們需要對server進行集群設置,Bucket只側重數據的保管。

每當views建立時, 就會建立indexes, index的更新和以往的數據庫索引更新區別很大。 比如現在有1W數據,更新了200條,索引只需要更新200條,而不需要更新所有數據,map/reduce功能基於index的懶更新行為,大大得益。

要留意的是,對於所有文件,couchbase 都會建立一個額外的 56byte 的 metadata,這個 metadata 功能之一就是表明數據狀態,是否活動在內存中。同時文件的 key 也作為標識符和 metadata 一起長期活動在內存中。

1.2 性能

couchbase 的精髓就在於依賴內存最大化降低硬盤I/O對吞吐量的負面影響,所以其讀寫速度非常快,可以達到亞毫秒級的響應。

couchbase在對數據進行增刪時會先體現在內存中,而不會立刻體現在硬盤上,從內存的修改到硬盤的修改這一步驟是由 couchbase 自動完成,等待執行的硬盤操作會以write queue的形式排隊等待執行,也正是通過這個方法,硬盤的I/O效率在 write queue 滿之前是不會影響 couchbase 的吞吐效率的。

鑒於內存資源肯定遠遠少於硬盤資源,所以如果數據量小,那么全部數據都放在內存上自然是最優選擇,這時候couchbase的效率也是異常高。

但是數據量大的時候過多的數據就會被放在硬盤之中。當然,最終所有數據都會寫入硬盤,不過有些頻繁使用的數據提前放在內存中自然會提高效率。

1.3 持久化

其前身之一 memcached 是完全不支持持久化的,而 Couchbase 添加了對異步持久化的支持:

Couchbase提供兩種核心類型的buckets —— Couchbase 類型和 Memcached 類型。其中 Couchbase 類型提供了高可用和動態重配置的分布式數據存儲,提供持久化存儲和復制服務。

Couchbase bucket 具有持久性 —— 數據單元異步從內存寫往磁盤,防范服務重啟或較小的故障發生時數據丟失。持久性屬性是在 bucket 級設置的。

Couchbase 群集所有點都是對等的,只是在創建群或者加入集群時需要指定一個主節點,一旦結點成功加入集群,所有的結點對等。

對等網的優點是,集群中的任何節點失效,集群對外提供服務完全不會中斷,只是集群的容量受影響。

由於 couchbase 是對等網集群,所有的節點都可以同時對客戶端提供服務,這就需要有方法把集群的節點信息暴露給客戶端,couchbase 提供了一套機制,客戶端可以獲取所有節點的狀態以及節點的變動,由客戶端根據集群的當前狀態計算 key 所在的位置。

3. 優缺點

優勢

1. 高並發性,高靈活性,高拓展性,容錯性好;

2. 以 vBucket 的概念實現更理想化的自動分片以及動態擴容(了解更多);

缺點

1. Couchbase 的存儲方式為 Key/Value,但 Value 的類型很為單一,不支持數組。另外也不會自動創建doc id,需要為每一文檔指定一個用於存儲的 Document Indentifer;

2. 各種組件拼接而成,都是c++實現,導致復雜度過高,遇到奇怪的性能問題排查比較困難,(中文)文檔比較欠缺;

3. 采用緩存全部key的策略,需要大量內存。節點宕機時 failover 過程有不可用時間,並且有部分數據丟失的可能,在高負載系統上有假死現象;

4. 逐漸傾向於閉源,社區版本(免費,但不提供官方維護升級)和商業版本之間差距比較大。

適用場景

1. 適合對讀寫速度要求較高,但服務器負荷和內存花銷可遇見的需求;

2. 需要支持 memcached 協議的需求。

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM