1

コメントアプリケーションで作業しています。コメントの返信数やいいね数を追跡するために使用している方法について、フィードバックをお願いします。parent_idコメントと返信は同じテーブルに保存されます。コメントが返信であるかどうかを判断するために、コメントが返信である以外の場合はフィールドを使用します0

以下の表のすべての列を含めるわけではないことに注意してください。

 cid | parent_id | replies | likes 
-----+-----------+---------+-------
  2  |     0     |    3    |   0   
  3  |     2     |    0    |   0   
  4  |     2     |    0    |   2   
  5  |     2     |    0    |   0   

上記の表では、id(cid)[3,4,5]のコメントはコメントの返信です#2。列replieslikesは整数であり、それに応じて返信といいねの数を保持します。これらの列の整合性と正確性は、PHPコードによって維持および更新されます。たとえば、コメントに対する別の返信#2が追加された場合、返信列は1つ増加するか、削除された場合は1つ減少します。

また、コメントをフェッチするSQLクエリで応答数を動的に計算できることも認識していますが、SQLサーバーにさらにストレスがかかると思いました。このクエリは次のようになります。

SELECT cid, parent_id, (
    SELECT count(*)
    FROM comments as SC
    WHERE RC.parent_id = C.cid
    ) AS replies
FROM comments AS C
WHERE thread = {thread_id}

テーブルの実際の列に返信やいいねを保存することで、それを正しく行っていますか?または、上記のようなクエリがMySqlサーバーに与えるストレスについて誇張しているので、代わりにそのような複雑なクエリを使用する必要がありますか?

フィードバックをいただければ幸いです。

4

1 に答える 1

1

「返信」という列は必要ないと思います。追加の不要なスペースを占有するだけです。cidとparentIdを組み合わせたインデックスを作成します。それで十分でしょう。クエリは高速である必要があります。列を作成することで、アプリコードとmysqlにさらにストレスを加えることになります。(整合性を維持するためのアプリコードと、コメントが入力されたときの1回の書き込みの代わりにmysql coz 2回の書き込み)。

しかし、数百万行について話している場合は、mysqlを選択するのではなく、mongoを選択します。データは、美しいJSONとして構築し、mongoにダンプできます。

于 2012-12-16T03:50:00.787 に答える