1

イベントを保存するシステムを設計しています。各イベントには、3つの基本的なプロパティがあります
。1。タイムスタンプ(64ビット)
2。キー(それが何であるか)。
3.値(イベントの実際の値)。

イベントキーは通常文字列であり、イベント値はほとんどの場合数字です。

これまでのところ単純ですが、ここでは少し泥だらけになります。イベントシステムは、非常に高いレベルへのドリルダウンを可能にすることになっています。これが何を意味するかは、例で最もよく説明されています。

注意:簡潔にするためにタイムスタンプを省略します。

キー:ヒット数// 1時間あたりの場合もあれば、最後の1秒の場合もあります。キーはアプリケーション固有であり、アプリケーションがこのイベントを報告する頻度をユーザーが判断する必要があります。
値:12000
 //そしてここでドリルダウンが始まります。
 キー:米国
 値:5000
  キー:State1
   値:2000
    キー:City1
    値:500
 キー:英国
 値:5000
  キー:StateN
   値:20
 //任意のレベルに。

したがって、上記のように、値は実際にはツリーになります。ええと、各k / vを個別に保存し、「親キー」を維持しないのはなぜかと言うかもしれません。これは、書き込みが増えるため(そして最終的にはイベントが検索されるときに読み取り負荷)、非効率になります。1回の操作でそれらを書き出し、一度にオブジェクト全体を読み戻す方がはるかに効率的です。

これをどのように設計するのが最善か疑問に思います。オブジェクトは本質的にC++クラスです(ただし、相互運用性のために、実際にはプロトコルバッファ/スリフトのシリアル化フレームワークです)。

イベントシステムはアプリケーションに依存しませんが、直感的なクライアントを提供する優れたAPIが必要です。

以前にこのようなものを設計したことがありますか?考え?あなたはそれについて行くための最良の方法は何だと思いますか?

前もって感謝します。

PS:1日あたり数百万のイベントが予想され、データに基づいてグラフを作成します。

4

2 に答える 2

0

頭に浮かぶ 1 つのアイデアは、エントリに 4 番目のプロパティである親ログ エントリ ID を与えることです。ActiveRecord のような ORM を使用すると、自然なツリーを形成できます。例えば:

class LogEntry < ActiveRecord::Base
    has_one :parent_log_entry
    has_many :log_entries
end

(それは確かに現状では正しくありませんが、アイデアは得られます)。

さまざまな言語で ActiveRecord スキームのさまざまな実装があるため、言語 (および DB) にとらわれません。

于 2011-01-17T12:01:15.863 に答える
0

ログ ファイルの定義を拡張して、「グループ」または「パッケージ」タイプのログ タグを提供できますか?

例えば ​​:

グループ: US キー: State1
値: 7000
キー: State2
値: 65191

グループ:英国...

そうすれば、各グループごとに解析を解決できます...それがあなたが探しているものなら...

于 2011-01-17T11:58:10.203 に答える