爲構建實時應用程序而優化的數據庫

DiceDB 是爲構建實時應用程序而優化的數據庫,它在某些方面可以替代 Redis,它內置了 SQL 查詢支持。

它與 Redis 有何不同?

注意:DiceDB 仍在開發中,它支持 Redis 命令的一個子集。所以,請不要在生產中使用它。但是,你可以參考學習它的設計思想。

最簡單的方法查看和了解 DiceDB 的特性是通過 Docker 安裝並運行它。

docker run dicedb/dice-server

上述命令將啓動在端口 7379 上運行的 DiceDB 服務器,你可以使用 DiceDB CLI 和 SDK 連接到它。你還可以使用 Redis CLI 和 SDK 連接到它。

dice-cli
127.0.0.1:7379>

我們來演示一個最簡單的 Hello World。

首先,你需要啓動 DiceDB,然後使用 Dice 連接它。

現在,我們存儲 “Hello World” 消息到 DiceDB。我們使用 SET 命令,執行語法和 Redis 類似,例如:

127.0.0.1:7379> SET mykey "Hello, World!"
OK

當我們存儲成功後,我們可以使用 GET 命令獲取數據

127.0.0.1:7379> GET mykey
"Hello, World!"

這只是 DiceDB 的一面,和 Redis 很相似。現在我們看看它的另一面。計算存儲遊戲排行榜。在遊戲世界中,排行榜對於跟蹤玩家排名和提高參與度至關重要。DiceDB 是一種具有實時反應性的內存數據存儲,是實現快速、可靠和可擴展排行榜的絕佳選擇。

我們來看下如何實現它。

一、錄入玩家統計數據

我們使用一些樣例數據存入到 DiceDB。我們使用 JSON.SET 命令來存儲玩家得分。

JSON.SET match:1:player:1 $ {"name": "aquaman", "score": 5}
JSON.SET match:1:player:2 $ {"name": "batman", "score": 5}
JSON.SET match:1:player:3 $ {"name": "cyclops", "score": 2}
JSON.SET match:1:player:4 $ {"name": "deadpool", "score": 9}

注意:如果你使用 Redis,那麼你需要使用 Sorted Set 來構建排行榜,但使用 DiceDB,你可以使用 JSON.SET 命令來存儲元數據,並將玩家得分作爲頂級鍵值對。

二、查詢玩家數據

你需要打開另一個終端窗口,使用 CLI 連接到 DiceDB。要獲取排行榜,你需要使用 QWATCH 命令。

QWATCH "SELECT $key, $value FROM 'match_1:%' ORDER BY $value.score DESC"

此命令將持續按值(分數)降序排列給出鍵值對列表。

三、更新玩家分數

當玩家完成遊戲時,你需要更新它們的分數。使用 JSON.SET 命令再次更新玩家的分數並將其設置爲新值。

假設我們將 cyclops 的分數增加到 10,那麼使用如下命令:

JSON.SET match:1:player:3 $.score 10

四、實時排行榜

我們已經使用 QWATCH 命令獲取排行榜,任何數據更新時,它都會重新評估查詢,並按照降序發出鍵值對列表。

因此,您的客戶端實時獲得排行榜,而無需定期輪詢的查詢數據。

查看更多內容,請參考 Github:

https://github.com/DiceDB/dice

個人建議:我粗略閱讀了 DiceDB 的使用文檔,它在實時方面,相比 Redis 還是有很大的優點,在性能方面,查看它的 Benchmark 數據和 Redis 性能差不多。但是,它還沒有成熟,也沒有 Redis 那樣廣泛運用於生產中,經過多年的改進優化。推薦你在非常需要它的實時特性方面使用它,並在運行於生產環境時謹慎選擇。可以跟蹤關注,學習它的設計思想。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/D58-cw1SUxIgq3A19AYU5g