質問

私は、Web投票システムを含むプロジェクトを持っています。電流値および関連データはいくつかのテーブルに格納されています。私もその現在のデータを定期的にに移動されますする監査テーブルを作成しましたので、過去のデータは、このプロジェクトの重要な側面になります。

私は、この戦略は非常に非効率的な見つけます。でも日常的に私だけのアーカイブデータの場合にのみ1または2のユーザーが特定の日に更新を行った場合でも、行の数は巨大になります。

私は考えることができる次の代替は変更されているエントリを記憶しています。これは、自動的に特定の日のビューを作成するためのロジックを構築することを意味します。これは、より少ない格納されている行が、かなりの複雑さを意味します。

私の最終的な考え方は少し小さい従来のものです。過去のデータは、レポートのためになりますので、Webユーザが迅速なアクセスを持つことは必要ありません。私は私のDBは、それには過去のデータを持っていることができなかったことを考えています。 DBは、現在の状態を表します。その後、毎日、全体のDBオブジェクトにロード(ユーザー/データの数が比較的低い)、その後、XMLまたはJSONのようなものにシリアライズすることができます。これらのファイルは、前日に差分を取って保存することができます。実際には、SVNは私のためにこれを行うことができます。私は与えられた過去の日のためのデータが必要な場合は、システムはその日のバージョンを取得し、オブジェクトにデシリアライズする必要があります。これは明らかにコストのかかる操作ですが、パフォーマンスは、ここではあまり問題ではありません。私は物事を単純化すると思うそれはこのためにLINQを使用して検討しています。 diffがうまく機能するために直列化手順はかなり組織的でなければならないであろう。

どちらのアプローチあなたが取るのでしょうか?

おかげ

役に立ちましたか?

解決

あなたのシステムについての私達に言ったすべては、それが票を含むことです。投票をキャストした時に限り、あなたはのためのタイムスタンプを保存するよう、あなたは、任意の時点で投票状態タリーを記述したレポートを生成することができるはず...ない?

たとえば、私はお気に入りの機能(目、笑顔、お尻、...)を集計するシステムを持っていると言います。私は特定の日付のように、特定の機能のためにあったどのように多くの票を知りたい場合は、私は単純に小さいか、またはその日付に等しいタイムスタンプを持つ機能のすべての票を集計します。

あなたが他のものの歴史を持っているしたい場合は、

、そして、あなたが同様のアプローチをたどるます。

私は、これはそれが行われている方法だと思います。

他のヒント

あなたは基本的にデータの修正は、リレーショナルデータベースに格納されているか迷っているならば、私はウィキでそれを行う方法になります。

ウィキすべての詳細改訂履歴を維持するとしています。彼らは保存のために、単純なリレーショナルデータベースを使用します。

ウィキペディアのデータベーススキーマを考えてみましょう。

あなたが本当のバージョン管理システムを使用してではなく、その場所にデータベースを押し込もしようと考えたことがありますか?私自身はgitのために非常に部分的ですが、多くのオプションがあります。彼らはすべてのバージョンの違いのために良いサポートを持っている、と彼らはよく、ワークロードのこの種のために最適化される傾向がある。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top