除了Redis,你還知道哪些鍵值數(shù)據(jù)庫?
在 DB-Engines 上挑選了五個 開源的 key-value 數(shù)據(jù)庫,一起來看看吧。
圖片
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是一個存儲在磁盤上的內(nèi)存數(shù)據(jù)庫。數(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)存,存儲大量數(shù)據(jù)時成本較高
- 單線程模型在CPU密集型任務(wù)下可能是瓶頸
- 比如 時間復(fù)雜度 O(n) 的命令 操作大 Key :LRANGE,SORT,HGETALL 等
- 復(fù)雜 Lua 腳本
使用場景
- 緩存系統(tǒng)
- 實(shí)時分析和統(tǒng)計
- 會話存儲
- 排行榜
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)存對象緩存系統(tǒng),本質(zhì)上是通用的,但旨在通過減輕數(shù)據(jù)庫負(fù)載來加速動態(tài) Web 應(yīng)用程序。
2003 年發(fā)行,C 語言編寫。
特點(diǎn)
- 內(nèi)存緩存系統(tǒng),不支持持久化
- 分布式設(shè)計,支持集群
優(yōu)點(diǎn)
- 極簡設(shè)計,極高的性能
- 易于部署和使用,擴(kuò)展性好,可以輕松橫向擴(kuò)展
缺點(diǎn)
- 只支持字符串類型的key-value存儲
- 不支持持久化,數(shù)據(jù)在重啟后會丟失
- 功能較少,不支持復(fù)雜操作
使用場景
- Web應(yīng)用的緩存
- 數(shù)據(jù)庫查詢結(jié)果緩存
- 會話存儲
3. etcd
圖片
Distributed reliable key-value store for the most critical data of a distributed system
可靠的分布式鍵值存儲,用于存儲分布式系統(tǒng)中最關(guān)鍵的數(shù)據(jù)
2013 年發(fā)行,GO 語言編寫。
特點(diǎn)
- 分布式鍵值存儲
- 使用 Raft 算法保證強(qiáng)一致性
- 支持復(fù)雜的數(shù)據(jù)查詢
- 接口簡單,可以用 HTTP 操作
優(yōu)點(diǎn)
- 強(qiáng)一致性和高可用性
- 易于與Kubernetes等容器編排工具集成
- 適用于分布式系統(tǒng)的配置管理和服務(wù)發(fā)現(xiàn)
缺點(diǎn)
- 寫入性能相對較低(Benchmarked at 1000s of writes/s per instance)
- 數(shù)據(jù)存儲限制:一般建議每個鍵值對的大小保持在較小的范圍內(nèi)(通常小于 1 MB),并且總的數(shù)據(jù)量不應(yīng)超過幾個 GB。
使用場景
- 分布式系統(tǒng)的配置管理
- 服務(wù)注冊與發(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是一個統(tǒng)一的實(shí)時數(shù)據(jù)平臺,將流處理與快速數(shù)據(jù)存儲相結(jié)合,允許客戶立即對動態(tài)數(shù)據(jù)采取行動,以獲得實(shí)時見解。
Hazelcast 最初發(fā)布于 2008 年,用 Java 編寫。
使用場景
- 對流數(shù)據(jù)或靜態(tài)數(shù)據(jù)進(jìn)行狀態(tài)數(shù)據(jù)處理
- 直接使用SQL查詢流式和批量數(shù)據(jù)源
- 通過連接器庫提取數(shù)據(jù)并使用低延遲 SQL 查詢提供數(shù)據(jù)
- 根據(jù)事件推送更新到應(yīng)用程序
- 基于低延遲隊(duì)列或發(fā)布-訂閱消息傳遞
- 通過讀/寫和后寫等緩存模式快速訪問上下文和事務(wù)數(shù)據(jù)
- 微服務(wù)的分布式協(xié)調(diào)
- 將數(shù)據(jù)從一個區(qū)域復(fù)制到另一個區(qū)域或同一區(qū)域的數(shù)據(jù)中心之間
看了官網(wǎng)和 Github 的介紹后,可以發(fā)現(xiàn)它不僅提供分布式數(shù)據(jù)存儲,更是一個分布式數(shù)據(jù)平臺,支持更廣泛的用例,包括緩存、數(shù)據(jù)處理、事件流處理和并發(fā)計算等。
它支持的 分布式數(shù)據(jù)結(jié)構(gòu) 非常豐富,第一個就是 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是一個開源的,基于標(biāo)準(zhǔn)的緩存,可以提高性能,卸載數(shù)據(jù)庫,簡化可伸縮性。
它是使用最廣泛的基于java的緩存,因?yàn)樗墙训?、?jīng)過驗(yàn)證的、功能齊全的,并且可以與其他流行的庫和框架集成。
Ehcache可以從進(jìn)程內(nèi)緩存擴(kuò)展到使用 tb級緩存的進(jìn)程內(nèi)/進(jìn)程外混合部署。
2009年發(fā)行,Java 語言編寫。
特點(diǎn)
- Java內(nèi)存緩存庫
- 支持本地和分布式緩存
- 支持多級緩存(內(nèi)存和磁盤)
- 可與Spring等框架集成
優(yōu)點(diǎn)
- 易于集成到Java應(yīng)用中
- 支持持久化和多級緩存
- 配置靈活,適應(yīng)多種使用場景
缺點(diǎn)
- 主要針對Java生態(tài)系統(tǒng),其他語言支持較弱
- 分布式功能相對較弱
使用場景
- Web應(yīng)用的頁面緩存
- 數(shù)據(jù)庫結(jié)果緩存
總結(jié)
- Redis 適用于需要豐富數(shù)據(jù)結(jié)構(gòu)、高性能讀寫、發(fā)布/訂閱功能的場景,適合實(shí)時數(shù)據(jù)處理和復(fù)雜緩存需求。
- Memcached 適用于簡單、高速緩存需求的場景,適合簡單的鍵值對存儲,不適合需要持久化或復(fù)雜數(shù)據(jù)結(jié)構(gòu)的場景。
- etcd 適用于分布式系統(tǒng)的協(xié)調(diào)、配置管理和服務(wù)發(fā)現(xiàn),適合需要強(qiáng)一致性的小數(shù)據(jù)量存儲。
- Hazelcast 適用于需要分布式緩存和計算的場景,適合需要在內(nèi)存中處理大規(guī)模數(shù)據(jù)并進(jìn)行復(fù)雜計算的應(yīng)用。
- Ehcache 適用于 Java 應(yīng)用的本地和分布式緩存需求,適合需要與 Java 框架深度集成的場景。