ankur-anand/unisondb
A streaming multimodal database for Edge AI, and Edge Computing.
UnisonDB – 面向邊緣AI的原生日誌即時資料庫
是什麼 – UnisonDB 是一個以 Go 編寫的開源多模型資料庫,將寫前日誌(WAL)視為主要資料來源。每次寫入都會同時持久化至 B+ 樹儲存體 並 透過 gRPC 或物件儲存體複製,即時傳送到任意數量的副本。此設計針對 邊緣優先 工作負載,要求資料必須靠近運算節點,並在亞秒級延遲內傳播至數千個節點。
核心理念
- 原生日誌:WAL(以 WALFS 子系統實作)為記憶體映射、分段且可即時讀取。副本直接尾隨日誌,因此儲存的資料同時也是複製串流。
- 基於 Raft 的寫入:可選的多數派寫入為主節點提供強一致性與耐久性。
- Blob 扇出:WAL 段僅需上傳一次至 S3/MinIO/GCS/Azure,任意數量的邊緣讀取器皆可輪詢,無需為每個副本維持永久的 gRPC 連接。
- 多模型 API:透過單一 HTTP/JSON 接口支援鍵值、寬欄位與大物件(LOB)存取模式。
- Zero-mq 通知:側車程序以亞毫秒級延遲推送變更事件,適用於反應式應用。
對 AI / 邊緣運算的重要性
- 邊緣的 AI 推論流程通常需要 狀態(模型版本、特徵快取、感測器讀數),這些狀態必須 既可查詢,又能即時廣播 到其他裝置。
- 傳統架構結合資料庫 + 訊息代理(Kafka、Pub/Sub、CDC),增加運維複雜性與延遲。UnisonDB 將這兩層整合為一個引擎。
- 複製模型可在數秒內擴展至 10,000+ 節點,適用於物聯網裝置群、自主機器人或分散式推論服務。
主要功能(於倉儲中列出)
| 功能 | 提供內容 |
|---|---|
| 高可用寫入 | 主節點上的 Raft 多數派,ISR 風格副本 |
| 流式複製 | WAL 透過 gRPC 或 基於物件儲存體的扇出 |
| Blob 扇出 | 將不可變 WAL 段發布至 S3/MinIO 等;無限讀取器 |
| 多模型儲存 | KV、寬欄位、大物件 |
| 即時通知 | ZeroMQ 側車,亞毫秒延遲 |
| 持久化 B+ 樹引擎 | 透過 BoltDB 或 LMDB 後端實現 ACID 相容儲存 |
| 命名空間隔離 | 透過邏輯命名空間實現多租戶支援 |
效能亮點(來自 README)
- 吞吐量:在 Apple M2 Pro 上,1KB 值時每秒 60k–80k
SET操作,同時向 >10,000 個節點傳播。 - 延遲:亞毫秒級變更通知;在雙跳拓撲中,複製延遲在數百毫秒範圍內。
- 基準測試:Redis 相容基準顯示,UnisonDB 在
GET與SET工作負載上與 BadgerDB、BoltDB 和 LMDB 性能相當。
快速入門
git clone https://github.com/ankur-anand/unisondb && cd unisondb
go build -o unisondb ./cmd/unisondb
./unisondb server --config config.toml # 啟動主節點
curl -X PUT http://localhost:4000/api/v1/default/kv/mykey \
-H "Content-Type: application/json" \
-d '{"value":"bXl2YWx1ZQ=="}'
文件與生態
- 入門指南、設定參考、架構概覽、HTTP API 文件、備份/還原、部署拓撲等全部托管於
unisondb.io。 - 可插拔儲存後端:BoltDB(單一檔案)或 LMDB(記憶體映射)用於 B+ 樹層。
- MinIO 複製範例(
cmd/examples/blobstore-minio)。
狀態 – 標記為 Alpha;CI 活躍(Go 測試、覆蓋率),GitHub Wiki 上有開放式路線圖。
誰可能使用它
- 需要在邊緣裝置上部署 AI 推論模型並需要共享一致狀態的團隊。
- 需要耐久儲存與即時事件串流但無需獨立訊息代理的應用程式。
- 分散式感測器網路、機器人車隊,或任何需要低延遲狀態變更扇出的系統。
相關
- 專案
- 專案
- 專案
- 專案