Кол-во просмотров новости

JIEXA

Новичок
Кол-во просмотров новости

когда читаю новость, идет
UPDATE news SET news_reads=news_reads+1 WHERE news_id='id'
когда идет UPDATE вся таблица блокируеться...
а когда она блокируеться, другие запросы на вывод новостей встают в очередь и ждут пока разблокируеться таблица. А так как они стоют в очередь, расход рессурсов увеличиваеться в разы.

я вот подумал, а если сделать табличку:
news_id
reads
comments

в которой будут только записи о прочтениее и кол-ве комментов. и при выводе новостей ее JEFT JOIN`ить, как думаете, так я выграю или проиграю вплане производительности?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
как думаете, так я выграю или проиграю вплане производительности?
Протестировать слабО?

расход рессурсов увеличиваеться в разы.
Что-то мне подсказывает что причина совсем в другом а именно в
другие запросы на вывод новостей
-~{}~ 15.10.07 20:33:

когда идет UPDATE вся таблица блокируеться...
Если прична действительно в апдейте
Возможно Вам поможет LOW_PRIORITY

Если причина в селектах то
EXPLAIN-ы?
 

Dagdamor

Новичок
JIEXA
Ничего не выиграешь. Выбирать ведь все равно придется из обеих таблиц. В этом плане ситуация не улучшится нисколько. А сколько производительности ты потеряешь из-за того, что у тебя теперь не одна таблица, а две?
 

JIEXA

Новичок
После тестирования, пришел к выводу что лучше держать в memcache это. При 20000 новостей, и если каждую из низ прочитают, то в памяти это займет всего 1мбайт
 

Андрейка

Senior pomidor developer
ага, особенно после перезагрузки компа будет весело

а типа для memcache блокировки не нужны?
 

JIEXA

Новичок
> ага, особенно после перезагрузки компа будет весело

Ну если сайт у вас на домашнем ПК стоит, то я вам не завидую.

> а типа для memcache блокировки не нужны?
Ну вообще там настолько быстро извлекаються/добавляються данные, что это неважно.

Кстати, покурив тему ещё, пришел к выводу что memcached тоже не так удобен - например, я хочу каждый час все прочтения записывать в реальную БД.. а на текущий момент я незнаю как из мемкешеда, вывести все данные которые в нем записаны. Поэтому решил (по подсказке друга) использовать MySQL таблицу HEAP... И вставлять в неё запись при каждом просмотре запросов INSERT DELAYED.... Это я думаю потимальное решение
 

Scud

Новичок
А почему INSERT DELAYED нельзя использовать на обычной не HEAP таблице???
 
Сверху