Масштабируемое решение для многопоточных комментариев - PullRequest
0 голосов
/ 27 января 2010

Я не уверен, как создать систему многопоточных комментариев в PHP и MySQL, которая может обрабатывать сотни комментариев одновременно.

Что-то вроде этого - единственное, что я могу придумать

$query = execute_query...('SELECT * FROM `comments` WHERE `post` = "1"');
foreach($query as $comment){
    $replies = execute_query...('SELECT * FROM `comment_replies` WHERE `comment` = "' . $comment['id'] . '"');
    if($replies){
        echo $comment['body']; //....
        foreach($replies as $reply){ /*....*/ }
    }
    else{
        echo $comment['body'];
    }
}

Так что мне нужны советы по структуре базы данных и тому, как я могу получить все многопоточные комментарии с учетом производительности, пожалуйста:)

Ответы [ 3 ]

6 голосов
/ 28 января 2010

Я уверен, что вы найдете статью Управление иерархическими данными в MySQL полезной. Эти две таблицы могут быть легко объединены в одну

1 голос
/ 08 августа 2012

Я бы выбрал модель списка смежности, а не модель вложенного множества, потому что с моделью вложенного множества мне пришлось бы строить всю древовидную структуру на каждой операции INSERT и DELETE, выполняемой в таблице, и если у меня было 1000 записей, одна операция INSERT или DELETE - все записи должны обновляться, что занимает больше времени для выполнения. Моя структура базы данных будет: enter image description here

Также я написал небольшую систему комментариев с php mysql jquery и ajax. Взгляните на http://pradipchitrakar.com.np/programming/threaded-comment-system/

1 голос
/ 28 января 2010

Почему бы не объединить комментарии и таблицу comment_replies?

затем просто добавьте дополнительное сгенерированное поле, которое показывает, является ли это комментарием или comment_reply. И выберите их, если в foreach, как:

if($type == 'comment') 
{
      //do something with the comment
}
elseif($type == 'comment_reply')
{
      //do something with the comment reply
}

Также проверьте, изменяется ли идентификатор комментария, чтобы вы могли разделить их.

...