0

私は実際に1つを完了しましたが、よく研究された、おそらく学術的なアルゴリズムと私のものを比較したいと思いました。直接または組み合わせて私の特定のニーズを解決する統計オブジェクトのライブラリがあるかもしれません。

私のシステム(OpenSourceを使用する予定です)には、NetFlowデータのストリームがあります。データベースに保存してSQL関数を使用するよりも、データベースのないシステムを使用して一連の統計を維持し、新しいフローごとに更新し、1秒あたり(またはそれ以上)にスクロールすることを好みます。

私のソリューションには、秒、分、時間、日、週などを表すサイズ[60、59、23、6、...]のジャグ配列を効果的に作成するためのuintの単一配列が含まれます。

各スロットには、その時間の合計バイト数が含まれています。したがって、60秒後、1分間の統計がAvg(seconds)として作成されます。もちろん、これは比較的時間スケールで継続します。

単に数千秒の増分があるのではなく、次の理由によるものです。

  1. メモリの制約と、より多くの統計ノードを持つ可能性。と
  2. ユーザーへの理想的なプレゼンテーション

...タイムスケールをロールアップします。

フローが統計の階層内の複数のノード(WANリンク、IPアドレス、宛先アドレス、SourcePort-DestinationPort)に適用される可能性があることを考えると、デルタを1回計算して(GenerateDelta)、アクティブであるすべてのノードに適用するだけです。これはフローメタデータと一致します。

次の潜在的なケースでは、特定のノードの統計が「スクロール」されます。

  1. 読み取り/表示時(HTTP \ JSON AJAXリクエスト経由)
  2. デルタが適用されているとき(関連するフローのため)
  3. 単にn秒ごと(nは通常1)

全体として、時間の経過とともに(秒、分などで)実行中の合計を維持するための十分に確立されたアルゴリズムがある可能性があります。しかし、それに失敗すると、私のコードのより小さなサブセクションで比較するための適切なアルゴリズムもあるかもしれません:

  • GenerateDelta-これは、統計配列のスロット全体の期間でフローを分解および平均化するために固有であるため、可能性は低いです。
  • スクロール-秒しかない場合、これはもちろん簡単ですが、私のソリューションでは、60秒を60秒ごとに新しい分の合計に結合する必要があります。

レスポンダーが独自のアルゴリズムを提案することを望んでいません。私はすでに(ほぼ)すべてのアルゴリズムを問題なく完了し、多くのパフォーマンスを考慮しています。そして、私がオープンソースとして公開し終えたときに、他の人が私のアルゴリズムを見ることができるでしょう。

私が見たいのは、比較のための「十分に確立された」アルゴリズムです。おそらく私のものは良くなるでしょう、おそらく私のものは悪くなるでしょう。グーグルはこの種の質問が得意ではありません、私はあなたの助けが必要です。

ありがとう!

4

1 に答える 1

2

@riciからのコメントのおかげで、「StreamStatistics」ドメインが必要であることがわかりました。ストリーム統計を処理するためのデータストリーム管理システム(DSMS)があります。SQL RDBMSシステムはSQLクエリによって生成された統計を使用してデータを格納できますが、データストリーム管理システムは、1つ以上のクエリが与えられた場合にデータの連続ストリームの処理を可能にします。

このホワイトペーパーでは、DSMSについて次のように説明しています。

  1. 定性的な使用のために品質を犠牲にすることができる
  2. データが膨大なため、シングルパスであること
  3. データをセットではなくシーケンスとして扱うクエリを使用するなど...

これは、そのようなDSMSの図を示し、ネットワークトラフィック分析の問題ドメインを参照しています。

このホワイトペーパーでは、連続クエリを定義するための、SQLに似た構文であるStreamSQLについて説明します。

独自のソリューションにアクセスできなくても。確かに確立されたアルゴリズムがあります。したがって、一般的なストリームクエリツールに対して専用システムのパフォーマンスをテストできます。

DSMSのいくつかの製品/プロトタイプがこのwikiページにあります。特に、JavaベースのオープンソースであるOdysseusが興味深いものです。

于 2012-12-22T14:15:16.840 に答える