0

Web投票システムを含むプロジェクトがあります。現在の値と関連データは、複数のテーブルに保存されます。履歴データはこのプロジェクトの重要な側面になるため、現在のデータが定期的に移動される監査テーブルも作成しました。

この戦略は非常に非効率的だと思います。毎日データをアーカイブするだけでも、1 日に 1 人か 2 人のユーザーが更新を行うだけでも行数は膨大になります。

私が考えることができる次の代替手段は、変更されたエントリのみを保存することです。これは、特定の日のビューを自動的に作成するロジックを構築する必要があることを意味します。これは、保存される行が少なくなることを意味しますが、かなり複雑になります。

私の最終的なアイデアは、少し慣習的ではありません。履歴データはレポート用であるため、Web ユーザーがすばやくアクセスする必要はありません。私のデータベースには履歴データが含まれていない可能性があると考えています。DB は現在の状態のみを表します。次に、毎日、データベース全体をオブジェクトにロードし (ユーザー/データの数は比較的少ない)、XML や JSON などにシリアル化できます。これらのファイルは、前日と差分をとって保存できます。実際、SVN は私のためにこれを行うことができます。特定の過去 1 日のデータが必要な場合、システムはその日のバージョンを取得し、オブジェクトに逆シリアル化する必要があります。これは明らかにコストのかかる操作ですが、ここではパフォーマンスはそれほど重要ではありません。これにはLINQを使用することを検討しています。これにより、物事が簡素化されると思います。

どのアプローチをとりますか?

ありがとう

4

3 に答える 3

0

代わりにデータベースを押し付けようとするのではなく、実際のバージョン管理システムを使用することを検討しましたか? 私自身、git にはかなり偏っていますが、選択肢はたくさんあります。それらはすべて、バージョン間の違いを適切にサポートしており、この種のワークロードに対して適切に最適化される傾向があります。

于 2009-04-14T07:04:06.240 に答える
0

あなたのシステムについてあなたが私たちに話したのは、それが投票を伴うということだけです。投票が行われたときのタイムスタンプを保存している限り、いつでも投票状態の集計を説明するレポートを生成できるはずです...いいえ?

たとえば、お気に入りの機能 (目、笑顔、お尻など) を集計するシステムがあるとします。特定の日付の特定の機能に対する投票数を知りたい場合は、その日付以下のタイムスタンプを持つ機能のすべての投票を単純に集計します。

他のことの履歴が必要な場合は、同様のアプローチに従います。

これがそのやり方だと思います。

代替テキスト

于 2009-04-14T14:18:29.800 に答える