1

さて、この問題は今日一日中私の頭を悩ませていました。

問題: 現在、マルチキャストを介して非常に高いレートで株価データを受信して​​います。私はすでにこのデータを解析しており、次の形式で受け取っています。

-StockID: Int-64
-TimeStamp: エポックからの
マイクロ秒 -Price: Int
-Quantity: Int

何百ものデータ パケットが毎秒解析されます。このデータをストックID(キー==ストックID)(値==[タイムスタンプ、価格、数量]要素の配列)でハッシュされた辞書/ハッシュテーブルにパッケージ化することにより、ストレージ側での計算を削減しようとしています。

また、各辞書が 5 分間隔内のタイムスタンプを表すようにしたいと考えています。着信データのタイムスタンプが 5 分の時間間隔を過ぎたら、この新しいデータを次の時間間隔を表す新しい辞書に入れたいと思います。また、特別なキーがキー -1 でハッシュされ、この辞書が属する 1 日あたりの特定の 5 分間隔が示されます (したがって、午前 12 時 32 分に何かを受信した場合、キー -1 で値 7 を持つ辞書にハッシュする必要があります)。 、これはその特定の日の午前 0 時 30 分から午前 12 時 35 分までの時間間隔を表すため)。時間が経過すると、期限が切れた dict を dataWrapper に送信できます。

さて、あなたは今、いくつかのアイデアを思いついているかもしれません。しかし、ここに大きな制約があります。入ってくるタイムスタンプは必ずしも厳密に増加しているわけではありません。ただし、間隔が終了してから約 10 秒待機すると、入ってくるすべてのデータが現在の間隔に属していると想定しても問題ありません。

このように複雑なことをすべて行っているのは、アプリケーションのストレージ側の計算を減らすためです。上記の設定により、ストレージ側のスレッドは、ディクショナリ内のすべてのキーと値のペアを単純に反復処理し、ファイルを再度開いたり、グループを再割り当てしたり、ディレクトリを変更したりすることなく、ストレージ システムの同じ場所に格納できます。

幸運を!ところで、どんな答えでも大歓迎です。:)

Python で何かを送っていただけると助かりますが (これでプロジェクトを行っています)、Java、C++、Ruby、または PHP を完全に理解できます。

概要

各辞書の5分間隔を表す辞書に株式データを入れようとしています。データに付属するタイムスタンプは、どの特定のディクショナリに配置する必要があるかを決定します。これは、タイムスタンプが入ってくるときに厳密に増加しないことを除いて比較的簡単です。そのため、5 分が経過するとすぐに辞書をデータラッパーに送信できません。 10 秒以内にそれ以上データを受信しないことが保証されていないため、この後はラッパーに送信しても問題ありません。

これのスケジューリングに役立つあらゆる種類のアイデア、アルゴリズム、または部分的な実装が必要です。タイムスタンプ (データ用) と実際の時間 (10 秒のバッファー) の両方で、辞書の現在の使用を切り替えるにはどうすればよいでしょうか。

明確化 編集

5 分のウィンドウは (タイムスタンプに基づいて) データ駆動型である必要がありますが、10 秒のタイムアウトは時計時間のようです。

4

1 に答える 1

2

おそらく私は何かが欠けている....

データを 5 分のバケットに保持したいようですが、バケットがロールオーバーした後、最大 10 秒間、バケットのすべてのデータがあるかどうかを確認することはできません。

これは、インストゥルメントごとに、現在のバケットと前のバケットを保持する必要があることを意味します。5 分の境界を 10 秒過ぎたら、古いバケットを公開/書き出すことができます。

于 2012-06-26T16:09:34.893 に答える