0

タイムスタンプ付きの値を保存し、特定の時間枠より古いものを自動的に削除するシステムを探しています。

RoundRobinシステムのようなものですが、私が理解している限り、RoundRobin特定の量のレコードに基づいており、新しいレコードが来るのと同じくらい古いレコードを削除します。

このシステムでは、レコードの数に制限はなく、特定のタイム ラプスよりも古いレコードを削除するだけです。

1 つの近似は、次のようにすべてのレコードに Timeout live があるシステムです。

console.append "key", { :value => "value1", :timeout => 10.minutes_in_the_future }
console.append "key", { :value => "value2", :timeout => 10.minutes_in_the_future }
console.append "key", { :value => "value3", :timeout => 10.minutes_in_the_future }

そしてどういうわけか、システムは期限切れのレコードを削除する責任があります。

システムは、任意の高性能ストレージ システム (Redis、Memcache など) に基づくことができます。

私は完全に詳細な説明の実装を探しているわけではありません.ある種のインスピレーションや関連記事、または既存のシステムであるため、車輪を再発明するつもりはありません.

4

1 に答える 1

0

Memcache 約

オフィスでは、およそ次のことを研究しています。

前提条件

  • 時間枠10 分です。
  • 値ではなく、レコードの量だけを知る必要があります。
  • あまり正確ではない解決策を受け入れることができます。

実装

  1. 次のように毎分新しいキーmykey_<Time.now.strftime("%Y%m%d%H%M")>を作成します。
  2. それらに10 分の有効期限を与えます。
  3. レコードを追加するたびに、実際の分incrをキーにします。
  4. 時間枠の値を計算するには、過去 10 分間の10 個のキーの値を取得し、それらを合計します

短所

  • 実際の値を保存することはできませんが、蓄積するのは 1 つだけです。
  • 1 分ごとにキーの有効期限が切れると、合計値が急激に変動します。
于 2012-01-13T10:23:38.880 に答える