[[Xtsdb]] ひとつハードルをクリアすると次の別のなにかがうごかなくなるを繰り返していた。 [[notes/system-engineering/Redis]]のTTL揮発イベントをPub/Subで受信しているのだけど、Subscriberに通知されるのはTTLが切れたタイミングではなく、Redis内部に実際に削除されたときのみ。削除のためのは内部実装は、TTL切れキーにアクセスされるか、Redisが内部で少量ずつキーをスキャンするというものだ。ベンチマークで負荷がかかっている状況だとどうも削除がなかなかされず、ベンチマーク後に一斉に削除されるという挙動になっているようにみえる。 それで土日にTTLではなく書き込む直前にSTRLEN で系列単位で個数を計上して、閾値以上であれば、削除予定キュー(Redis stream)に突っ込んでおくという実装をした。これは、以前の論文でカウント手法と呼んでいたもの。しかし、一旦閾値以上になったときに次回以降の書き込み時に毎回キューに入れてしまう問題があった。一旦閾値を超えたときに系列が削除されるまでは、キューにいれないというやや面倒な実装が必要になってrevertしてしまった。 最終的には、`TTL`コマンドにより揮発するまでの残り秒数を取得できるので、系列の末尾に値を書き込んだ後に残り秒数が適当な閾値以下であれば、削除予定キューに突っ込むという実装にした。 この実装もややトラブルがあったのだけどややこしすぎて書くのが難しい。