- Redkaは、Redisの利点をSQLiteで再実装しつつ、Redis APIとの互換性を持たせることを目標としている
- 主な特徴:
- データをRAM容量に収める必要がない
- ACIDトランザクションをサポート
- SQLビューによってデータ参照やレポーティング機能を強化
- In-process(Go API)とStandalone(RESP)サーバーの両方をサポート
- Redis互換のコマンドとプロトコルをサポート
- 現在も開発が進行中で、対応状況とロードマップは以下のドキュメントを参照
対応コマンド
- Redkaは、Redisの5つの中核データ型であるString、List、Set、Hash、Sorted Setをサポートすることを目標としている
- String、Hash、Key管理、トランザクションコマンドはすでに対応しており、List、Set、Sorted Setは開発中
- 詳細なコマンド一覧は原文を参照
インストール方法
スタンドアロンサーバー
- ReleaseページからOSに合ったバイナリをダウンロードして実行
- Dockerを使う場合は
docker pull nalgeon/redka でイメージをダウンロード
Goモジュール
go get github.com/nalgeon/redka でモジュールをインストール
- SQLiteドライバーとして
github.com/mattn/go-sqlite3 または modernc.org/sqlite を使用
使い方
スタンドアロンサーバー
- ダウンロードしたバイナリを
redka [-h host] [-p port] [db-path] の形式で実行
- デフォルトは host
localhost、port 6379、DBパスなし(インメモリ)
- Docker使用時は
docker run コマンドで実行。詳しいオプションは原文を参照
- サーバー起動後は
redis-cli や redis-py、go-redis のようなRedis互換クライアントで接続可能
In-processサーバー
redka.Open() 関数でDBオブジェクトを作成。ドライバーのインポートが必須
redka.DB オブジェクトのメソッドを呼び出して各種コマンドを実行
View(読み取り専用)と Update(書き込み可)メソッドでトランザクション処理
永続性
- RedkaはSQLiteデータベース内の rkey、rstring、rhash テーブルを使ってデータを保存
- 各データ型ごとのビュー(vstring、vhash など)を通じて、SQLでデータを参照可能
パフォーマンス
- redis-benchmark ツールでRedisとRedkaの性能を比較
- RedkaはSETで約6倍、GETで約2倍遅い
- それでも毎秒23K writes、57K reads程度の性能を示す
- コンテナ上で実行した場合、性能低下が起こる可能性がある
ロードマップ
- 1.0リリースではRedis 2.x時代の主要機能を中心に実装予定
- String、Hash、Key管理、トランザクション対応は完了
- Sorted Setは開発中
- List、Setは今後開発予定
- 今後のバージョンでは、Stream、HyperLogLog、Geoのようなデータ型やPub/Sub機能を追加予定
- Luaスクリプティング、認証/ACL、マルチDB、Watch/Unwatchなどは実装予定なし
- クラスターとSentinel機能も実装しない予定
GN⁺の意見
- Redisと大部分で互換性を保ちながら永続性を提供するRedkaのアプローチは興味深いです。ACIDトランザクションをサポートしている点も強みになりそうです。
- パフォーマンス面ではRedisには及ばないものの、永続性が必要な場合には十分に検討に値する代替案だと思います。
- ただし、まだ開発初期段階なので、安定性についてはもう少し見守る必要がありそうですし、ロードマップから外れている機能がかなりある点は、実運用で導入する際の考慮事項です。
- インメモリ用途では最終的にRedisに勝てないでしょうが、SQLiteベースの永続性レイヤーとしては有用に使えそうです。
- 最近はエッジコンピューティング環境で軽量スタックへの需要が高まっており、そのような分野ではRedisの代わりにRedkaを使ってみる価値がありそうです。
2件のコメント
スケジューラにredisを付ける必要があるときに使うと便利そうですね(笑)
Hacker Newsの意見