2011-11-12 7 views
0

DBの構築方法に関する質問があります。私はreddit'esque投票システムを持っています。アイテムは投票権を得ることができます。しかし、各項目はトピックに属し、各トピックはカテゴリに属します。アイテムだけが投票権を得ることができますが、トピック内でもカテゴリ内でも投票数にアクセスできるようにしたいと考えています。どのようにこれを達成するための任意の提案?分類された投票データベースを構成する方法は?

私はこれを行うための4つの主要な方法を参照してください。

  1. 票をデ正規化し、アイテムテーブルの属性、トピックテーブル、およびカテゴリ表内の票を保存します。私は投票/ダウンボートが発生するたびに3つすべてを更新する必要があります。
  2. 別の '投票'モデルを作成します。投票は、アイテム、トピックへのアイテム、およびトピックへのトピックに属します。それから私は何かにアクセスする必要があるときはいつでもチェーンを通して投票数を照会することができます。
  3. アイテムと投票権があります。アイテムにはカテゴリとトピックの属性があります。トピック内のアイテムをクエリし、それらの投票をカウントします。
  4. NoSQLデータベースシステムを使用する方法を学びます。

追加情報:私はRailsを使用していますが、現時点ではMYSQLのみしか認識していません。これは私がモンゴーのようなものを学ぶべき時でしょうか?これは実際にはHadoopで達成できますか?私はこれをMySQLで達成できますか?ありがとう!

+0

あなたの質問に答えるためのツールについては十分に分かっていませんが、データベースの観点からはオプション番号2が賢明な解決策です。このタイプのものはまさにRDBMSのためのものです。 –

答えて

1

別の投票モデルを作成します。投票は項目に属し、項目は トピックに属し、トピックはカテゴリに属します。それから私は何かにアクセスする必要があるときはいつでもチェーンを通して番号 の質問をすることができます。

これは、あなたが話していることを行う最も柔軟な方法です。

NoSQLデータベースシステムを使用する方法を学びます。

現在のプロジェクトではありません。

これは私がモンゴーのようなものを学ぶべき時でしょうか?

これだけは本当にHadoopを用いて達成することができますか?

いいえ、すべてのSQLデータベースがこれを行うことができます。 SQLデータベースが計画しているものを管理できるかどうかは、別の質問です。異なるプラットフォームの規模は異なっています。

私はこれをMySQLで実行できますか?

はい、簡単です。

1

私はあなたがおそらく各項目の一票にユーザーを制限したいと思うので、あなたはオプション2.

のためにあなたは、とにかく投票モデルを作成する必要がありましたべきだと思います。

の場合、後でパフォーマンスの問題が発生する場合は、アイテム、トピックまたはカテゴリの投票数を常にキャッシュできます。

これらの番号を更新する方法は、慎重に検討する必要があります。上の数字をすべて自動的に更新する投票のトリガーは、書き込み操作が多すぎる可能性があります。もう1つの方法は、統計ストアドプロシージャを定期的に実行することです。

とにかく、問題があることがわかるまで、は最適化されません。

関連する問題