1

私は、最もトレンドの高い「記事」をリアルタイムで返す必要があるシステムを開発しています。記事のヒット数。

私の最初の考えは、各記事の番号を保存することでした。ヒット数と時間。次に、この関数を正規化し、成長率を返す一次導関数を計算します。次に、2次導関数を使用して、それがどれだけ成長しているかを知ることができ、特定のしきい値に達した場合->トレンドとしてタグ付けします.

問題は、たとえば一日の終わりに「オフライン」でできることですが、それを継続的に行う方法がわかりません...

Storm のようなものが存在することは知っていますが、これと同じくらい具体的なものを探しています (疑似コードで書かれたアルゴリズム、または一般的な問題ではなく、この問題に取り組む記事)。

4

1 に答える 1

0

最もホットな記事を追跡する簡単な方法は、LRU キャッシュを使用することです。これにより、最近アクセスされた要素が効率的に追跡されます。アクセス頻度の高い記事は LRU に保持されますが、アクセス頻度の低い記事は削除されます。ランキングを調整したい場合は、LRU を変更して、記事が受け取ったヒット数を追跡​​することができます。

確かに、もっと複雑なアプローチもありますが、これは実装が簡単で、優れた計算特性を持ち、同様の応答を提供する可能性があります。

記事ごとに循環バッファーを使用することもできます。バッファーがいっぱいになると、記事への各アクセスを使用して、記事の最も古いヒットを示す変数を更新できます。最新のヒットと最も古いヒットがわかっているので、単位時間あたりのヒット数を見積もることができます。欠点: 大量のメモリ使用量、頻繁にアクセスされる記事の不正確な統計。

<Time,Count>同様に、各記事をペアを含むリンク リストに関連付けることができます。ヒットが発生するたびに、から 1 秒未満 (または何をしたか) が経過していない場合は、リンクされたリストの上部にあるカウントに追加されますTime。時間がかかりすぎる場合は、リストの先頭に新しいペアを追加してください。その後、連結リストをデリバティブを計算するためのデータ シリーズとして扱うことができます。リストをたどると古すぎる要素を削減します。

于 2015-10-08T20:09:23.467 に答える