Вопрос основан на 2 статьях:
- Basecamp Next от DHH от 37signals
- Продвинутое кеширование в рельсах Адама Хокинса
Я немного смущен о последствиях использования кеширования русской куклы, в частности:
-
При использовании ключей автоматического истечения срока действия кажется, что каждый запрос приведет к доступу к базе данных для извлечения метки времени объекта - я что-то упустил? (Я понимаю, что в лучшем случае вы должны сделать это только для ключа верхнего уровня в иерархии, но все же...)
-
В первой статье они кэшируют список дел, а также каждый предмет todo. Кэширование списка имеет смысл, поскольку оно экономит много работы (запрос БД для всех элементов). Но зачем кешировать отдельные предметы? Вы уже собираетесь в базу данных, чтобы получить метку времени элемента, и что именно вы сохраняете? Создание нескольких строк html?
-
Во второй статье Адам кэширует куски такого вида:
cache [post, 'main-content']
...cache [post, 'comments']
Когда добавляется комментарий, он меняет отметку времени публикации, и поэтому делает ее недействительной. Однакоmain-content
не изменился - вы не хотите его регенерировать!!! Как можно было бы сделать недействительными только комментарии. (Это действительно очень распространенный случай пользователя - модель, которая имеет несколько логически независимых частей: сам объект, различные ассоциации, данные в каком-то другом магазине и т.д.)
Мне кажется, что кеширование русской куклы имеет смысл только тогда, когда у вас есть глубокая иерархия вложенного объекта. (в basecamp у вас есть список проектов → todos → todo → ). Однако, если у вас есть мелкая иерархия, лучше просто сделать недействительность самостоятельно.
Любая обратная связь будет оценена! Благодарю.