イベントを保存するシステムを設計しています。各イベントには、3つの基本的なプロパティがあります
。1。タイムスタンプ(64ビット)
2。キー(それが何であるか)。
3.値(イベントの実際の値)。
イベントキーは通常文字列であり、イベント値はほとんどの場合数字です。
これまでのところ単純ですが、ここでは少し泥だらけになります。イベントシステムは、非常に高いレベルへのドリルダウンを可能にすることになっています。これが何を意味するかは、例で最もよく説明されています。
注意:簡潔にするためにタイムスタンプを省略します。
キー:ヒット数// 1時間あたりの場合もあれば、最後の1秒の場合もあります。キーはアプリケーション固有であり、アプリケーションがこのイベントを報告する頻度をユーザーが判断する必要があります。 値:12000 //そしてここでドリルダウンが始まります。 キー:米国 値:5000 キー:State1 値:2000 キー:City1 値:500 キー:英国 値:5000 キー:StateN 値:20 //任意のレベルに。
したがって、上記のように、値は実際にはツリーになります。ええと、各k / vを個別に保存し、「親キー」を維持しないのはなぜかと言うかもしれません。これは、書き込みが増えるため(そして最終的にはイベントが検索されるときに読み取り負荷)、非効率になります。1回の操作でそれらを書き出し、一度にオブジェクト全体を読み戻す方がはるかに効率的です。
これをどのように設計するのが最善か疑問に思います。オブジェクトは本質的にC++クラスです(ただし、相互運用性のために、実際にはプロトコルバッファ/スリフトのシリアル化フレームワークです)。
イベントシステムはアプリケーションに依存しませんが、直感的なクライアントを提供する優れたAPIが必要です。
以前にこのようなものを設計したことがありますか?考え?あなたはそれについて行くための最良の方法は何だと思いますか?
前もって感謝します。
PS:1日あたり数百万のイベントが予想され、データに基づいてグラフを作成します。