除了Redis,你還知道哪些鍵值數(shù)據(jù)庫(kù)?
在 DB-Engines 上挑選了五個(gè) 開源的 key-value 數(shù)據(jù)庫(kù),一起來看看吧。
圖片
1. Redis
圖片
Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps.
Redis是一個(gè)存儲(chǔ)在磁盤上的內(nèi)存數(shù)據(jù)庫(kù)。數(shù)據(jù)模型是鍵-值,但支持許多不同類型的值:字符串、列表、集合、排序集、哈希、流、HyperLogLogs、位圖。
2009 年發(fā)行,C 語言編寫。
特點(diǎn)
- 提供多種數(shù)據(jù)結(jié)構(gòu):字符串、哈希、列表、集合、有序集合等
- 支持Lua腳本,事務(wù),發(fā)布/訂閱(pub/sub)模式,可持久化
- 高可用性和分布式功能(通過Redis Sentinel和Redis Cluster)
優(yōu)點(diǎn)
- 數(shù)據(jù)結(jié)構(gòu)豐富,讀寫性能高
- 社區(qū)活躍,生態(tài)系統(tǒng)豐富
- 靈活的持久化策略
- 支持復(fù)雜操作和事務(wù)
缺點(diǎn)
- 主要基于內(nèi)存,存儲(chǔ)大量數(shù)據(jù)時(shí)成本較高
- 單線程模型在CPU密集型任務(wù)下可能是瓶頸
- 比如 時(shí)間復(fù)雜度 O(n) 的命令 操作大 Key :LRANGE,SORT,HGETALL 等
- 復(fù)雜 Lua 腳本
使用場(chǎng)景
- 緩存系統(tǒng)
- 實(shí)時(shí)分析和統(tǒng)計(jì)
- 會(huì)話存儲(chǔ)
- 排行榜
2. Memcached
圖片
Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
免費(fèi)開源、高性能、分布式內(nèi)存對(duì)象緩存系統(tǒng),本質(zhì)上是通用的,但旨在通過減輕數(shù)據(jù)庫(kù)負(fù)載來加速動(dòng)態(tài) Web 應(yīng)用程序。
2003 年發(fā)行,C 語言編寫。
特點(diǎn)
- 內(nèi)存緩存系統(tǒng),不支持持久化
- 分布式設(shè)計(jì),支持集群
優(yōu)點(diǎn)
- 極簡(jiǎn)設(shè)計(jì),極高的性能
- 易于部署和使用,擴(kuò)展性好,可以輕松橫向擴(kuò)展
缺點(diǎn)
- 只支持字符串類型的key-value存儲(chǔ)
- 不支持持久化,數(shù)據(jù)在重啟后會(huì)丟失
- 功能較少,不支持復(fù)雜操作
使用場(chǎng)景
- Web應(yīng)用的緩存
- 數(shù)據(jù)庫(kù)查詢結(jié)果緩存
- 會(huì)話存儲(chǔ)
3. etcd
圖片
Distributed reliable key-value store for the most critical data of a distributed system
可靠的分布式鍵值存儲(chǔ),用于存儲(chǔ)分布式系統(tǒng)中最關(guān)鍵的數(shù)據(jù)
2013 年發(fā)行,GO 語言編寫。
特點(diǎn)
- 分布式鍵值存儲(chǔ)
- 使用 Raft 算法保證強(qiáng)一致性
- 支持復(fù)雜的數(shù)據(jù)查詢
- 接口簡(jiǎn)單,可以用 HTTP 操作
優(yōu)點(diǎn)
- 強(qiáng)一致性和高可用性
- 易于與Kubernetes等容器編排工具集成
- 適用于分布式系統(tǒng)的配置管理和服務(wù)發(fā)現(xiàn)
缺點(diǎn)
- 寫入性能相對(duì)較低(Benchmarked at 1000s of writes/s per instance)
- 數(shù)據(jù)存儲(chǔ)限制:一般建議每個(gè)鍵值對(duì)的大小保持在較小的范圍內(nèi)(通常小于 1 MB),并且總的數(shù)據(jù)量不應(yīng)超過幾個(gè) GB。
使用場(chǎng)景
- 分布式系統(tǒng)的配置管理
- 服務(wù)注冊(cè)與發(fā)現(xiàn)
- 分布式鎖
- leader 選舉
4. Hazelcast
圖片
Hazelcast is a unified real-time data platform combining stream processing with a fast data store, allowing customers to act instantly on data-in-motion for real-time insights.
Hazelcast是一個(gè)統(tǒng)一的實(shí)時(shí)數(shù)據(jù)平臺(tái),將流處理與快速數(shù)據(jù)存儲(chǔ)相結(jié)合,允許客戶立即對(duì)動(dòng)態(tài)數(shù)據(jù)采取行動(dòng),以獲得實(shí)時(shí)見解。
Hazelcast 最初發(fā)布于 2008 年,用 Java 編寫。
使用場(chǎng)景
- 對(duì)流數(shù)據(jù)或靜態(tài)數(shù)據(jù)進(jìn)行狀態(tài)數(shù)據(jù)處理
- 直接使用SQL查詢流式和批量數(shù)據(jù)源
- 通過連接器庫(kù)提取數(shù)據(jù)并使用低延遲 SQL 查詢提供數(shù)據(jù)
- 根據(jù)事件推送更新到應(yīng)用程序
- 基于低延遲隊(duì)列或發(fā)布-訂閱消息傳遞
- 通過讀/寫和后寫等緩存模式快速訪問上下文和事務(wù)數(shù)據(jù)
- 微服務(wù)的分布式協(xié)調(diào)
- 將數(shù)據(jù)從一個(gè)區(qū)域復(fù)制到另一個(gè)區(qū)域或同一區(qū)域的數(shù)據(jù)中心之間
看了官網(wǎng)和 Github 的介紹后,可以發(fā)現(xiàn)它不僅提供分布式數(shù)據(jù)存儲(chǔ),更是一個(gè)分布式數(shù)據(jù)平臺(tái),支持更廣泛的用例,包括緩存、數(shù)據(jù)處理、事件流處理和并發(fā)計(jì)算等。
它支持的 分布式數(shù)據(jù)結(jié)構(gòu) 非常豐富,第一個(gè)就是 Map,還有 AP,CP 之分。
圖片
文檔:https://docs.hazelcast.com/hazelcast/latest/data-structures/distributed-data-structures
5. Ehcache
圖片
Ehcache is an open source, standards-based cache that boosts performance, offloads your database, and simplifies scalability. It's the most widely-used Java-based cache because it's robust, proven, full-featured, and integrates with other popular libraries and frameworks. Ehcache scales from in-process caching, all the way to mixed in-process/out-of-process deployments with terabyte-sized caches.
Ehcache是一個(gè)開源的,基于標(biāo)準(zhǔn)的緩存,可以提高性能,卸載數(shù)據(jù)庫(kù),簡(jiǎn)化可伸縮性。
它是使用最廣泛的基于java的緩存,因?yàn)樗墙训?、?jīng)過驗(yàn)證的、功能齊全的,并且可以與其他流行的庫(kù)和框架集成。
Ehcache可以從進(jìn)程內(nèi)緩存擴(kuò)展到使用 tb級(jí)緩存的進(jìn)程內(nèi)/進(jìn)程外混合部署。
2009年發(fā)行,Java 語言編寫。
特點(diǎn)
- Java內(nèi)存緩存庫(kù)
- 支持本地和分布式緩存
- 支持多級(jí)緩存(內(nèi)存和磁盤)
- 可與Spring等框架集成
優(yōu)點(diǎn)
- 易于集成到Java應(yīng)用中
- 支持持久化和多級(jí)緩存
- 配置靈活,適應(yīng)多種使用場(chǎng)景
缺點(diǎn)
- 主要針對(duì)Java生態(tài)系統(tǒng),其他語言支持較弱
- 分布式功能相對(duì)較弱
使用場(chǎng)景
- Web應(yīng)用的頁(yè)面緩存
- 數(shù)據(jù)庫(kù)結(jié)果緩存
總結(jié)
- Redis 適用于需要豐富數(shù)據(jù)結(jié)構(gòu)、高性能讀寫、發(fā)布/訂閱功能的場(chǎng)景,適合實(shí)時(shí)數(shù)據(jù)處理和復(fù)雜緩存需求。
- Memcached 適用于簡(jiǎn)單、高速緩存需求的場(chǎng)景,適合簡(jiǎn)單的鍵值對(duì)存儲(chǔ),不適合需要持久化或復(fù)雜數(shù)據(jù)結(jié)構(gòu)的場(chǎng)景。
- etcd 適用于分布式系統(tǒng)的協(xié)調(diào)、配置管理和服務(wù)發(fā)現(xiàn),適合需要強(qiáng)一致性的小數(shù)據(jù)量存儲(chǔ)。
- Hazelcast 適用于需要分布式緩存和計(jì)算的場(chǎng)景,適合需要在內(nèi)存中處理大規(guī)模數(shù)據(jù)并進(jìn)行復(fù)雜計(jì)算的應(yīng)用。
- Ehcache 適用于 Java 應(yīng)用的本地和分布式緩存需求,適合需要與 Java 框架深度集成的場(chǎng)景。