1

私のアプリケーションには、アプリケーションのライフサイクル全体を通して存続するオブジェクトのセットがあり、それらの履歴データベースを作成する必要があります。

これらのオブジェクトは、Hibernateアノテーションが付けられたJava / Scalaクラスの階層のインスタンスであり、アプリケーションで起動時にロードするために使用します。幸い、すべてのクラスにはすでにタイムスタンプが含まれています。つまり、履歴レコードを作成できるようにするためにオブジェクトモデルを変更する必要はありません。

最も適切なアプローチは何ですか:

  1. アノテーションなしでHibernateを使用し、外部xmlマッピングを提供します。これは、主キー(以前の主キーとタイムスタンプで構成される複合キー)以外のアノテーションと同じです。

  2. 履歴レコードには他のクラスを使用します(単一のクラスではなくクラスの階層があるため、これは非常に複雑に聞こえます。また、レコードを再構築するために、すべてのタイプのレコードに対してHistoricalRecordClassをサブクラス化する必要があります)。引き続きHibernateを使用する

  3. まったく異なるアプローチを使用してください(ORMSは好きではありません。それは単に利便性の問題です)

いくつかの考慮事項:

履歴レコードを保存する目的は、ユーザーが単一のGUIを介して、日付を指定するだけで、特定のデータのリアルタイム値または履歴値の両方にアクセスできるようにすることです。

4

1 に答える 1

1

過去の記録をどのように活用するつもりですか。最も簡単な解決策は、それらを JSON としてシリアル化し、ファイルに記録することです。

ハイバネート xml マッピングをハイバネート アノテーションと組み合わせたことは一度もありませんが、うまくいけば、2 つの並列オブジェクト モデルを実行するよりも魅力的に思えます。

いつでもアプリケーションの状態を再作成できるようにする必要がある場合は、多かれ少なかれそれらをデータベースに書き込むことになります (高速なランダム アクセスのため)。ID + タイムスタンプ + タイプの複合キーを持つ「履歴」テーブルをごまかして、「json」フィールドをマーシャリングして保存することができます。これは、a) 一連のクローン テーブルの代わりに 1 つの履歴テーブルを保持するのに役立ち、b) スキーマが変更された場合にある程度の柔軟性を提供します (つまり、JSON のオープン スキーマの性質を活用します)。

しかし、これは使用パターンが異なるアーカイブ データであるため (レコード全体を読み書きするだけです)、ライブ データと同じ厳密なスキーマを使用する以外の方法で保存することを考えます。

これは「write once」パラダイムの優れたアプリケーションです...Hadoop は利用できますか? ;)

于 2013-01-09T07:20:20.623 に答える