アイテムの状態 (既読/未読) を知る必要がある Symfony 2.1 アプリケーションを構築しようとしていますが、アイテムの状態 (多くのアイテム) を保存する効率的な方法はありますか? SQLリレーショナルテーブルを使用するのが最善の選択ですか? それとも、MongoDB のような NoSQL データベースは、読み取り/未読ステータスを処理するためのより良いアイデアでしょうか?
質問する
437 次
1 に答える
1
これを正確に管理する (つまり手抜きをせずに) 最善の方法は、連想テーブルです。データベースにitemsとusersが含まれていると仮定すると、次のように別のテーブルを作成します。
item_users (id, user_id, item_id, time_added)
そこに存在するフィールド (ユーザーとアイテムの組み合わせ) は、「ユーザーがこれを読んだ」として扱われます。これにより大量のデータが生成されますが、巧妙なインデックス作成/シャーディングによって非常に簡単に処理できます。例えば:
- ユーザー数とアイテム数が多い場合は、ユーザーごとのシャーディングがおそらく最適です
- 誰が特定の投稿を読んだかをよく知りたい場合は、アイテムごとに分割することも価値があります
- user_id と index_id の両方に個別にインデックスを作成することを検討してください (INDEX + FOREIGN KEY および UPDATE と DELETE の両方でカスケード)
これにより、非常に簡単にテーブルをクエリできます。多くのユーザーと投稿がある場合、データが大きくなる可能性があることに注意してください。その時点で、シャーディングが本当に必要になります。
于 2013-03-29T14:57:27.147 に答える