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

  • Автор темы Автор темы JIEXA
  • Дата начала Дата начала

JIEXA

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

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

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

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

расход рессурсов увеличиваеться в разы.
Что-то мне подсказывает что причина совсем в другом а именно в
другие запросы на вывод новостей

-~{}~ 15.10.07 20:33:

когда идет UPDATE вся таблица блокируеться...

Если прична действительно в апдейте
Возможно Вам поможет LOW_PRIORITY

Если причина в селектах то
EXPLAIN-ы?
 
JIEXA
Ничего не выиграешь. Выбирать ведь все равно придется из обеих таблиц. В этом плане ситуация не улучшится нисколько. А сколько производительности ты потеряешь из-за того, что у тебя теперь не одна таблица, а две?
 
После тестирования, пришел к выводу что лучше держать в memcache это. При 20000 новостей, и если каждую из низ прочитают, то в памяти это займет всего 1мбайт
 
ага, особенно после перезагрузки компа будет весело

а типа для memcache блокировки не нужны?
 
> ага, особенно после перезагрузки компа будет весело

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

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

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