Apache Kvrocks 社區近日發佈了 2.14.0 版本。作為一款基於 RocksDB 構建的分佈式鍵值(Key-Value)NoSQL 數據庫,Kvrocks 兼容 Redis 協議,旨在通過將數據存儲在磁盤(SSD)上來降低內存成本並提升數據容量,同時維持與 Redis 類似的訪問接口。
本次 2.14.0 版本主要在數據一致性選項、統計類數據結構支持以及腳本執行併發度方面進行了功能擴展與優化。以下是該版本的詳細變更介紹。
核心特性更新
1. 支持 WAIT 命令:同步複製能力的補齊
在 2.14.0 之前,Kvrocks 主要採用異步複製模式。為了滿足部分業務對數據一致性的更高要求,新版本引入了 WAIT 命令。該命令會阻塞當前客户端連接,直到之前的寫操作被成功同步到指定數量的副本節點中,或者達到設定的超時時間。
這一功能允許開發者在需要強一致性的關鍵寫入場景(如金融交易記錄)中,顯式地確認數據已複製到從節點,從而在系統故障時提供更好的數據安全性保障。
使用示例:
> SET mykey "value"
OK
# 等待寫操作同步到至少 1 個副本,超時時間為 1000 毫秒
> WAIT 1 1000
(integer) 1
2. 新增 T-Digest 數據結構
針對延時監控、流量分析等場景中常見的百分位數計算(如 P99, P95)需求,Kvrocks 2.14.0 原生支持了 T-Digest 概率數據結構。
T-Digest 是一種空間效率極高的算法,能夠在極小的內存佔用下,對流式數據的秩(Rank)和百分位數(Quantile)進行高精度的估算。直接在數據庫層面支持該結構,意味着用户無需將大量原始數據拉取到應用層計算,也無需維護額外的時序數據庫組件即可獲取分佈統計信息。
支持命令包括 TDIGEST.CREATE, TDIGEST.ADD, TDIGEST.QUANTILE 等。使用示例:
# 創建一個名為 'latency' 的 T-Digest 結構
> TDIGEST.CREATE latency
# 添加一組延時樣本數據
> TDIGEST.ADD latency 10.5 20.1 15.3 99.8
# 計算 P99 (99th percentile)
> TDIGEST.QUANTILE latency 0.99
"99.8"
# 查看最小值和最大值
> TDIGEST.MIN latency
"10.5"
> TDIGEST.MAX latency
"99.8"
3. Lua 腳本嚴格模式與併發執行
為了提升腳本執行效率,新版本引入了 Lua 腳本的“嚴格鍵訪問模式”(Strict Key-Access Mode)。
在傳統模式下,為了保證原子性,腳本執行往往會阻塞服務。而在嚴格模式下,Kvrocks 強制要求用户在執行 EVAL 或 FCALL 時,必須顯式在命令行中聲明腳本所需訪問的所有 Key。基於這些聲明,Kvrocks 能夠識別腳本的數據依賴範圍。對於操作不同 Key、互不衝突的腳本,系統現在可以並行執行。這一改進能夠有效利用多核 CPU 資源,提升高併發場景下的整體吞吐量。
使用示例:
-- 腳本中只能訪問 KEYS 數組中聲明的鍵
-- 如果嘗試訪問未聲明的 'key2',在嚴格模式下會報錯
> EVAL "return redis.call('get', KEYS[1])" 1 key1
"value1"
其他改進與修復
除了上述主要特性外,2.14.0 版本還包含以下底層更新:
- RocksDB 升級:底層存儲引擎 RocksDB 版本升級至 10.6.2,引入了上游的性能優化與缺陷修復。
- RISC-V 架構支持:新增了對 RISC-V 架構的編譯與運行支持,擴展了 Kvrocks 的硬件適配範圍。
- Search 功能優化:增強了 Search 模塊,新增 Compaction Filter,支持在查詢過程中自動跳過並清理已過期的 Key,減少無效數據對查詢性能的影響。
- 複製穩定性:針對主從複製流程進行了多項改進,提升了在網絡環境不穩定時的同步效率和系統穩定性。