PHP + MYSQL кэширование

12
R
На сайте с 03.08.2012
Offline
131
#11
LEOnidUKG:
Полностью менять архитектуру БД и запросов. Извините, но это глупость на 1 загрузку 22 запроса.

---------- Добавлено 15.04.2016 в 15:44 ----------



Это отдельные таблицы что-ли?!

А как ещё?

Если нужно проверять ставил ли юзер лайк/дизлайк/репост?

Не ну конечно можно снизить все до 3х запросов:

Выбираем 10 новостей

Потом сразу же делаем выборку комментариев по всем новостям (WHERE `id`="1" OR `id`="2" OR `id`="3" ... )

Потом делаем сразу выборку на лайки/репосты/дизлайки по всем новостям.

Лайки/репосты/дизлайки харнить в 1 табилце.

Будет всего 3 запроса. Зато более тяжелые.

Но я думаю все равно желательно сделать кэширование, чтобы эти 3 запроса были не всгда, а только когда это требуется, верно?

D
На сайте с 14.01.2007
Offline
153
#12
revered:
Потом сразу же делаем выборку комментариев по всем новостям (WHERE `id`="1" OR `id`="2" OR `id`="3" ... )

эммм... а зачем вам для списка новостей все комменты? вам же только количество надо! которое хранится в самой новости...

и это очень лёгкий запрос ;)

revered:
Лайки/репосты/дизлайки харнить в 1 табилце.

про репосты я ещё как-то могу понять, но зачем разделять лайки и дизлайки?

R
На сайте с 03.08.2012
Offline
131
#13
Dinozavr:
эммм... а зачем вам для списка новостей все комменты? вам же только количество надо! которое хранится в самой новости...
и это очень лёгкий запрос ;)

Выводится новость и под ней последние 5 комментов сразу же, по этому нужно не только количество выбирать, но и сами комменты. А тут ещё получается, что коммент оставил какой-то юзер. И нужно ещё выбрать его фио + аватарку. Как правильно это все реализовать, чтобы запросов было минимум?

D
На сайте с 14.01.2007
Offline
153
#14

revered, я бы сложил всё это в json'е в кэш по id новости. это кстати идеальный пример для кэширования - изменяется гораздо реже, чем показывается

TF-Studio
На сайте с 17.08.2010
Offline
334
#15

что-то с архитектурой не так у вас. мне кажется

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
B
На сайте с 13.02.2008
Offline
262
#16
revered:
Голосы и комментарии через AJAX добавляются.

Но проблема в том, что если закэшировать блок целеком, то когда он поставить лайк и обновит страницу (F5), то будет ему показано, что лайк не поставлен, т.к. ещё старая версия блока покажется.

Так надо, чтобы блок голосования целиком через аджакс работал, т.е. не только добавление голоса, но и показ текущего количества голосов должен через аджакс грузиться. Увеличение количества обращений к БД некритично, если они короткие - они кэшируются БД.

Или можно тянуть блок голосования вместе со страницей (как сейчас у вас), а после голосования писать результат в куку, далее при обновлении (или загрузке) страницы проверять наличие этой куки и если она есть и непустая, то подставлять в блок значение из этой куки. Правда тогда посетитель не увидит количество проголосовавших других посетителей во время его сессии. В общем как-то так.

seocore
На сайте с 25.09.2006
Offline
143
#17
revered:
Как правильно это все кэшировать?
Была идея кэшировать вообще всю страницу с новостями, и обновлять кэш раз в несколько минут. Но как быть с лайками и комментариями?

Попробуйте использовать тот же memcached, храните данные в ОЗУ кеше, а скриптом по крону обходите memcached данные каждые N минут, и сбрасывайте данные в MySQL таблицу. Даже если случится сбой, то потеряете данные за этот небольшой промежуток времени.

Инструменты для веб-мастера: кластеризатор СЯ (https://goo.gl/MQWfqO), все запросы конкурента (https://goo.gl/hd5uHS), дешевые XML-лимиты (https://goo.gl/aDZbPI)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий