まともなサイズのオブジェクト指向アプリケーションがあります。アプリ内のオブジェクトが変更されるたびに、オブジェクトの変更が DB に保存されます。しかし、これは理想的とは言えません。
現在、トランザクションはトランザクションと一連の transactionLI として保存されます。
transaction テーブルには、who、what、when、why、foreignKey、foreignTable のフィールドがあります。最初の 4 つは自明です。ForeignKey とforeignTable は、変更されたオブジェクトを特定するために使用されます。
TransactionLI には、timestamp、key、val、oldVal、および transactionID があります。これは基本的にキー/値/oldValue ストレージ システムです。
問題は、これら 2 つのテーブルがアプリケーション内のすべてのオブジェクトに使用されるため、かなり大きなテーブルになっていることです。それらを何かに使用するのは遅いです。インデックスは非常に役立ちます。
そのため、このようなことを行う別の方法を考えています。これまでに検討したこと: - これらのテーブルをタイムスタンプのようなものでシャーディングします。- 2 つのテーブルを非正規化して 1 つにマージします。- 上記の 2 つの組み合わせ。- 変更後に各オブジェクトをシリアル化し、subversion に格納するという行に沿って何かを行う。- おそらく他の何かですが、今は思いつきません。
全体的な問題は、トランザクション データを適切に格納および検索するための何らかのメカニズムが必要なことです。ええ、それをリレーショナル データベースに強制的にフィードすることはできますが、実際には、これはトランザクション データであり、それに応じて保存する必要があります。
他のみんなは何をしているの?