質問

クエリを実行できるデータ構造が必要です 最後に何項目ありましたか バツ. 。アイテムは単純な識別子である場合もあれば、より複雑なデータ構造である場合もあります。アイテムのタイムスタンプは、(ハッシュなどとして)外部に保存されるのではなく、アイテム内にあることが望ましいため、複数のアイテムが同じものを持つことで問題が発生することは望ましくありません。タイムスタンプ)。

これまでのところ、LINQ を使用すると、指定された時刻よりも大きいタイムスタンプを持つ項目を簡単にフィルターし、カウントを集計することができたようです。ただし、.NET 3.5 固有のものを運用環境に組み込むのはまだためらっています。同様のデータ構造に関する他の提案はありますか?

私が興味を持っている他の部分は、 エージング 古いデータを出力します。6 時間以内の項目数のみを要求する場合は、長時間実行されるプログラムである可能性があるため、それより古いものはデータ構造から削除したいと考えています。

役に立ちましたか?

解決

これには、単純なリンク リストを使用できます。

基本的には新しい項目を末尾に追加し、古い項目は最初から削除するという、安価なデータ構造です。

コード例:

list.push_end(new_data)
while list.head.age >= age_limit:
    list.pop_head()

リストが一度に 1 つよりも大きな部分を切り取る必要があるほど忙しい場合は、私は次のことに同意します。 dmo, 、より高いレベルでの枝刈りを可能にするツリー構造などを使用します。

他のヒント

重要な考慮事項は、クエリの頻度とクエリの頻度であると思います。追加/削除。頻繁にクエリを実行する場合 (特に大規模なコレクションがある場合)、B ツリーが最適な方法になる可能性があります。

http://en.wikipedia.org/wiki/B-tree

スレッドを実行してこのツリーを定期的にクリーンアップするか、検索の一部にすることができます (これも使用状況に応じて)。基本的に、ツリー検索を実行して「x 分前」のスポットを見つけてから、新しい時刻を持つノード上の子の数を数えます。ノードの下の子の数を最新の状態に保っておけば、この合計をすばやく実行できます。

スライド式の有効期限を持つキャッシュがその仕事をします...

アイテムを詰め込むと、キャッシュが老化を処理します。

http://www.sharedcache.com/cms/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top