0

私は自分の会社の投票システムに取り組んでいます。このシステムでは、各ユーザーが1つ以上のトピックに投票できます。トピックに投票すると、このトピックのレピュテーションは+1になり、他のすべてのトピックのレピュテーションは-1になります。(これらの数値はかなり任意であり、実際の値は複雑な式です)。

各トピックのID、このトピックの投票の合計、他のトピックの投票の合計、および計算されたレピュテーションを格納するビューを作成するデータベースを構築することを考えていました。

私の問題は、パフォーマンス/スケーラビリティに関するものです。このソリューションはあまり効果的ではないと思います。100のトピックと1秒あたり2票がある場合、すべてのトピックのすべての値を1秒間に2回更新する必要があり、合計で1秒あたり200レコードになります。

この分析は正しいですか?mssqlエンジンはそれを簡単に処理しますか?または、他のアプローチを探す必要がありますか?何を指示してるんですか?

ありがとう、オスカー

4

1 に答える 1

2

これはデータベースでは非常に困難になります。

あなたの数式はどの変数に依存していますか?加算および減算する金額がある程度グローバルである場合は、それらを追跡し、表示する必要がある場合にのみ各トピックのスコアを計算できます。

たとえば、1つのトピックのスコアのみをインクリメントできますが、合計で「賛成」がいくつあるかを追跡するグローバル変数をインクリメントすることもできます。そうすれば、トピックのスコアを表示したいときに、データベースに負荷をかけることなく、その場でスコアを計算できます。

数式に関する詳細情報は、より良いアドバイスを得ることができます。

編集:

あなたはこの式を持っています:

origninalRep + (upvotes*10 - otherVotes) 

originalRep1つのクエリで簡単に取得できます。

についても同じですupvotes

「トリッキー」な部分はですotherVotes。しかし、それは単純globalVotesCount - upvotesなことであり、グローバルな賛成票の数を追跡していれば、それらがあります。

これがお役に立てば幸いです。

于 2012-07-30T15:47:41.370 に答える