コアデータパフォーマンス

キャッシュ

最もホットなデータをメモリに保持し、すべてのコアを働かせるエンジンで、読み取りに1ミリ秒を大きく下回る時間で応答します。

GET/s(パイプライン、実測)
36.6M
TTLの精度
ns
既存のクライアントで動作
RESP2/3
ステップ 1 / 5
キャッシュ経由で読み取る

ヒットはメモリから直接返ります。データベースには触れません。

サンプルセッションplaying
# キャッシュ経由で読み取る
hotkv> GET product:1001
"{\"name\":\"Desk lamp\",\"price\":39}"

実際のHotKVコマンドと応答例を使ったアニメーションのウォークスルーです。任意のステップをクリックすると、そこに移動します。 コマンドと応答は、HotKVで実際に入力し表示されるとおり英語のままです。

課題

1秒間に何千回も読まれるデータのためにデータベースにアクセスするのは、遅く高価です。ページの表示、API呼び出し、ダッシュボードの更新のたびに同じクエリが繰り返され、アプリケーションよりもずっと先にデータベースがボトルネックになります。

HotKVでの解決方法

HotKVはデータベースの前に置かれ、結果をメモリに保持します。アプリケーションはまずHotKVから読み取り、ミスしたときだけデータベースに問い合わせます。HotKVは多数のスレッドで同時にコマンドを実行するため、忙しいキャッシュでもすべてのクライアントが1つのコアに集中することはありません。さらにタグを使えば、元のデータが変わったときにエントリーのグループ全体を無効化できます。

ステップごとに

コマンドごとに何が起きるか

  1. 01

    キャッシュ経由で読み取る

    ヒットはメモリから直接返ります。データベースには触れません。

    GET product:1001
  2. 02

    ミスなので一度読み込んでキャッシュ

    ミスすると、アプリケーションはデータベースを一度読み取り、結果を5分間キャッシュします。

    SET product:2002 "{\"name\":\"Oak desk\",\"price\":420}" EX 300
  3. 03

    依存するものでエントリーにタグ付け

    照明商品を表示するキャッシュ済みのページには、すべて同じタグが付きます。

    TAG.SET product:1001 catalog:lighting
  4. 04

    グループを無効化

    価格が変わりました。タグの付いたキーをすべて一覧にし、1つのパイプラインで削除します。

    TAG.MEMBERS catalog:lighting
  5. 05

    ごく短命なエントリー

    設定済みのフラッシュトークンで、ナノ秒の精度で250 ms後に消えなければなりません。

    NEXPIRE flash:token:9 250000000
活用シーン

実際のシナリオ

オンラインショップ

商品ページ、価格、在庫数は毎秒何千回も読み取られ、カタログが変わるとタグで更新されます。

APIとモバイルバックエンド

人気のエンドポイントの応答を短いTTLでキャッシュするため、トラフィックの急増はデータベースではなくメモリが受け止めます。

コンテンツサイト

レンダリング済みのフラグメントと記事のメタデータを数分間キャッシュし、編集者が公開するとタグで無効化します。

標準搭載

得られるもの

秒からナノ秒までのTTL

EXPIREとPEXPIREは期待どおりに動作します。NEXPIREはナノ秒の精度を追加します。

EXPIREPEXPIRENEXPIRE

タグで無効化

TAG.SETでキーにラベルを付け、そのラベルを持つすべてのキーを見つけます。

TAG.SETTAG.MEMBERS

任意の圧縮

大きなペイロードを圧縮できるため、ワーキングセットのより多くをメモリに収められます。

マルチスレッドの読み取り

コマンドは並列のスレッドで実行されるため、スループットはコア数に応じて伸びます。数値はパフォーマンスのページにあります。

GETMGET
リファレンス:SETNEXPIRETAG.SETTAG.MEMBERS

よくある質問

既存のRedisクライアントを使えますか?

HotKVはRedisプロトコル(RESP2とRESP3)に対応しているため、標準的なRedisクライアントで接続できます。依存しているコマンドについては、コマンドリファレンスを確認してください。

キャッシュ済みのキーのグループを無効化するには?

キャッシュするときにTAG.SETでキーにタグを付け、TAG.MEMBERSを呼び出して返ってきたものを削除します。

36.6Mという数値の出典は?

HotKVが公開しているベンチマークの、パイプライン化したGETのスループットです。手法とハードウェアはパフォーマンスのページにあります。

関連するユースケース

ご自身のワークロードで試してみましょう

HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。