ユーザーが投票できるシンプルなWebアプリを構築しています。ユーザーがすでに投票したかどうかを確認するための最速の方法は何ですか。リレーショナルデータベースとドキュメントベースのデータベースの両方に興味があります(mongodb、...)
アイデアはほとんどありませんが、改善できると確信しています。
リレーショナルデータベース
投票用に別のテーブルを作成します。
|userid|articleid|
記事の投票を増やす前に、useridとarticleidの両方を含む行があるかどうかを確認してください。2つのクエリがあります。トリガーでこれを改善することは可能ですか?例えば:
|useridarticleid| unique column
投票する前に、アプリケーション側でuseridarticleidを生成します。useridarticleidを挿入してみてください。フィールドが新しい場合、トリガーが起動し、記事の投票列が増加します。
ドキュメントベース
これはもう少しトリッキーです。したがって、ドキュメントを次のように構成します。
{
"id": "123",
"content": "something",
"num_votes": 2,
"votes" : [
"userid1",
"userid2"
]
}
最初の「クエリ」-useridがvotes配列にあるかどうかを確認します。2番目の「クエリ」-そうでない場合はnum_votesをインクリメントします。
再び2つのクエリ。したがって、これを変更できると思いましたが、パフォーマンスが向上するかどうかはわかりません。
投票配列にユーザーIDを挿入します。ユーザーが記事の「開票」を配列で確認したい場合。ただし、トラフィックが多いとすべての記事が少し無駄になるため、パフォーマンスが低下する可能性があると思います。ここでRedditを想像してみてください。