Кто голосовал

tamm

Новичок
Кто голосовал

Соц. сеть, за каждый пост пользователи могут отдать "голос" +
после чего пост отмечается как "проголосован" для отдавшего голос пользователя.

Что было:

При голосовании создавалась запись, с где owner_id = id поста за который голосуем и user_id = id голосующего пользователя
Когда формировали список постов на странице проверяли наличие дочерних элементов с хозяином текущего пользователя плюс суммировали кол-во таких элементов получая сумму голосов.

Что стало:

Добавил дополнительное поле vote куда суммирую голоса ( отпал запрос на суммирование всех голосов )
Добавил дополнительное поле data_vote в которое записываю через запятую id всех проголосовавших пользователей

В таблице около 3 000 000 записей
Но ! поле data_vote longtext т.к. проголосовавших может быть до 1000
В связи с этим терзают смутные сомнения по поводу нагрузки на диск из-за использования поля text т.к. при выборке создается промежуточная таблица скидывается на диск и лишь потом сортируется.

Прошу прощения , действительно ли использование полей text значительно увеличивают нагрузку на диск ?
 

cDLEON

Онанист РНРСlub
А почему не хранить количество голосов, НО голосовавших хранить в отдельной таблице, и проверять по индексованному полю owner ?
Жесть...Кто вас за написание соц. сети пустил :(
 

DiMA

php.spb.ru
Команда форума
Ну, как же, такой же грамотей, клюнувший на "сеть за 99 уе" :)
 

tamm

Новичок
К сожалению нет возможности добавлять таблицы.
Основа на двух таблицах "объект" и "атрибуты объекта"
 

tamm

Новичок
Вы действительно уверены что новая таблица + дополнительная выборка для нее, будет работать быстрее , чем получение массива ID пользователей из дополнительного поля ?

Я так же могу по овнеру выбрать все голоса и из текущей таблицы. Создавая доп. таблицу теряем в универсальности.
 

findnext

Новичок
новая таблица + дополнительная выборка для нее, будет работать быстрее
при чём в сотню раз, если правильно поставишь индексы и сделаешь их уникальными

-~{}~ 03.04.09 23:19:

Добавил дополнительное поле vote куда суммирую голоса
суммируешь каким способом?

-~{}~ 03.04.09 23:21:

Добавил дополнительное поле data_vote в которое записываю через запятую id всех проголосовавших пользователей
руки бы за такое оторвать :D
 

tamm

Новичок
findnext

Еще раз поясню: дополнительное поле vote (сумма всех голосов) апдейтится в момент добавления нового голоса.

data_vote - это serialize всех ID проголосовавших пользователей апдейтится в момент добавления голоса новым пользователем

При таком варианте получаем излишние поля, но они своего рода кеш что бы не делать дополнительной выборки.

при чём в сотню раз, если правильно поставишь индексы и сделаешь их уникальными
т.е. SELECT id, vote , data_vote будет обрабатываться в сотню раз медленнее , чем выборка из основной + доп. таблицы ?
 
Сверху