Кэширование vs DB

Redjik

Джедай-мастер
Вопрос про сферического коня в вакууме.

Предположим имеется 10 до 100500 статей.
Предположим что к каждой статье мы обращаемся по id (www.example.com/articles/254)

Чтобы абстрагироваться от конкретного способа хранения кэша покажу пример на yii.
В модели.
PHP:
	public static function fetchArticle($id){
		$cache = Yii::app()->cache->get('article_'.$id);
		if (!$cache){
			$cache = self::model()->findAllByPk($id);
			Yii::app()->cache->set('article_'.$id, $cache,100000);
		}
		return $cache;
	}
(Само собой при update кэш сбрасывается.)

Таким образом при повторном обращении к статье мы даже не открываем соединение с бд.
Но вот есть ли в этом смысл.

ЗЫ. закэшировал подобным образом все статьи в текущем проекте + всю текстовую информацию в ветках каталога...
 

флоппик

promotor fidei
Команда форума
Партнер клуба

itprog

Cruftsman
если у тебя на сервере 64гб RAM и до 100500 статей, то, наверно, можно и кэш базы данных использовать %)

а если серьезно:
1) measure
2) then optimize
3) measure again
 

fixxxer

К.О.
Партнер клуба
Ну сам подумай. Зависит, очевидно, от нагрузки при миссе. Например если кэшировать мемкеш во втором мемкеше то даже 1 бессмысленна ;)
 

AmdY

Пью пиво
Команда форума
Для вывода статей вешировать выборку бессмысленно, нужно кешировать отдельно запросы уже отрендеренную страницу или часть модуля.
Кеширование одного простого запроса по ключу особого смысла не имеет если коннекшин с базой уже установлен. то выполнится мгновенно, причём заберётся скорее всего из кеша самой бд.
 

fixxxer

К.О.
Партнер клуба
На самом деле, кэшировать ничего не надо, пока в этом не возникла потребность.

1) Мышление "фиг с ним, что запрос тормозной, потом кэш прикручу" - неверно и чревато: во-первых, в случае мисса мы получаем тот же медленный запрос, в-полуторных, при простейшей реализации кэширования без блокировок мы получим в момент между миссом и сетом пачку медленных запросов. И во-вторых, инвалидация кэша может оказаться не такой уж и простой задачей - и если на это забить примеры можно увидеть с тупо навешенным поверх кэшем в битриксе, где на странице одно, в рсс второе, в счетчиках третье. Лучше сразу запросы оптимизировать, а если уж понадобится кэш, все равно придется решать вопрос комплексно, скорее всего оно того не стоит.

2) В случае выборки по pk - запрос быстрый изначально, и в большинстве случаев еще неизвестно, будет ли выигрыш от чуть меньшего времени чтения из мемкеша или проигрыш из-за траты такого ценного ресурса как оперативная память.

3) Упомянутый кэш статики применим, но не всегда, конечно - если на страницах множество динамики вокруг статьи, это будет скорее геморроем. Если простой статический сайт - то кэшировать лучше в файлах, отдача статического файла веб-сервером всегда эффективнее иных способов.
 

Redjik

Джедай-мастер
grigori
так тоже делаю, я просто взял абстрактный пример
 
Сверху