2017-11-21 6 views
0

ベンダーが提供するソフトウェアは、様々なメッセージのテキストログを生成し、さまざまなネットワークインフラストラクチャ間で1日を通して送信できません。私たちはRuby on Railsアプリケーションを作成していますが、このログには分析/レポート作成のためにこのログをインポートしたいと考えています。一般的な属性と特殊な属性の組み合わせをイベントの種類にまたがって格納する

各ログエントリには一連の一般的な属性があり、その後に特定のイベントタイプ(送信に失敗したメッセージの特定のタイプ)が宣言され、そのイベントタイプに固有の属性が続きます。約20種類のイベントがあり、それぞれ5〜20種類のユニークな属性があります。

これをRuby on Railsでモデル化する最も良い方法は何ですか?私は、各種類のイベントとその特殊な属性に対してモデル/クラス/テーブルが必要だという漠然な印象を持っていますが、これらのテーブルのそれぞれには、すべてのイベントが共有する一般的な属性多くのテーブルでクエリを実行するのは困難です。

Railsには、汎用属性を集中テーブルに格納することができますか(個別にテーブル内の特殊属性を設定することができます)。アトミックな「イベント」としての特殊な属性

答えて

0

これを実行する方法はたくさんあります。 IMOは、Railsの最も良い方法は、json属性タイプを使用するPostgreSQLです。 1つのモデルでこれを行うことができます。私はこれのように設定します。属性を持つモデルEvent、:kind(or type):string message:text log_attributes:json

jsonタイプはここで重要である、あなたは、ハッシュまたはハッシュの配列を格納することができ、あなたはそれだけでハッシュされ、それを引き出したとき、あなたはそれを解析する必要はありません。これを保存するのと同じことですが、ハッシュまたはハッシュの配列を保存するだけです。 event.log_attributes['SOMEKEY']にアクセスするには、event.log_Attributes = { ruby: 'is nice', ...}を保存します。

ここには、PostgreSQLとレールで使用できるタイプのドキュメントがあります。 http://edgeguides.rubyonrails.org/active_record_postgresql.html#json-and-jsonb

PostgreSQL 9.2以降が必要です。これは今月初めにリリースされる10.1の問題ではありません。私はPostgreSQL + json + activerecordを数年間使用してきたので、私の人生はより良くなりました。

railsに属性という名前の属性を付けることができないので、私はlog_attributesという名前にします。

関連する問題