1

StackOverflowまたはMyLifeIsAverageにアクセスパターンが似ているGrailsWebアプリに取り組んでいます。ユーザーはエントリに投票でき、投票数に基づいてエントリのリストを並べ替えるために投票が使用されます。ソートされた選択クエリが実行されている間に投票を行うことができます。

selectはテーブルの大部分をロックするため、通常のトランザクションロックにより、更新に永久に時間がかかるようです(十分なトラフィックがある場合)。誰かがこのようなデータアクセスパターンでアプリに取り組んだことがありますか?もしそうなら、これらの更新と選択を多かれ少なかれ同時に行うことを許可する方法を見つけましたか?SOのようなサイトがこれにどのようにアプローチするか知っている人はいますか?

私の考えは、ソートされた選択をダーティリードにすることでした。なぜなら、それらが常に完全に最新でなくても許容できるからです。これは、これらの選択と更新のパフォーマンスを改善するための私の唯一のアイデアですが、誰かがもっと良い方法を知っているかもしれないと思いました。

4

1 に答える 1

1

データベースについてあまり推測しないでください。データベースは非常に複雑な動物であり、ほとんどの場合、思ったとおりに機能しません。最新のデータベース(つまり、myisamテーブルではない)であるMVCCデータベースは、強くロックすることなくテーブルスキャンを実行します。MVCCの全体的な概念は、書き込みが読み取りをブロックしないこと、およびその逆であるということです。ただし、ここではテーブルスキャンは実行されません。質問に効率的に答えるために、おそらく投票のインデックスがあります。このインデックスは、1)テーブルから取得される行数を制限するために使用されます。2)並べ替えられた順序で(つまり、並べ替えを実行せずに)それらを取得します。

于 2010-05-19T15:26:19.837 に答える