Как ColdFusion ORM справляется с изменениями, внесенными вне ORM - PullRequest
3 голосов
/ 06 декабря 2010

Я только начал узнавать о ColdFusion ORM и постоянных cfcs и о том, как он может улучшить производительность приложений. Я все еще работаю над получением полного понимания, прежде чем пытаться реализовать что-либо на своих сайтах, но есть один вопрос, на который я не могу найти ответ где-либо еще.

Я понимаю, что большая часть увеличения производительности происходит за счет пакетирования базы данных CRUD в одной транзакции в конце страницы и интеллектуального кэширования операторов выбора. Что касается последнего, как работает это кэширование и, в частности, как оно работает с изменениями, внесенными вне приложения ColdFusion.

Например, предположим, у меня есть таблица пользователей, которая выглядит следующим образом:

Имя Волосы

Ник Браун

Джон Блонд

Теперь предположим, что я запускаю простой запрос на обновление через PL / SQL Developer, чтобы обновить цвет волос Джона до черного. Теперь ...

  • Что произойдет в следующий раз, когда на странице будет указан цвет волос Джона?
  • Предполагая, что цвет волос по-прежнему выглядит блондином, потому что он был кеширован, как можно очистить этот кеш?
  • Предполагая, что цвет волос все еще сохраняется в кеше как у блондинки, что произойдет, если я поменяю имя Джона на Джонатон, используя CF ORM? Будет ли он перезаписывать цвет волос обратно в блондинку при обновлении строки?
  • Точно так же, что если я попытаюсь обновить цвет волос до зеленого, используя CF ORM? Будет ли CF проверять и замечать, что его кэшированное значение (блондин) больше не является текущим значением (черным), и давать какую-то обратную связь?

Не менее важно (может быть, более важно), каковы ответы на те же вопросы, если CFQuery используется для обновления цвета волос Джона вместо внешней программы. Другими словами, можно ли безопасно использовать CFQuery в таблице, управляемой ORM?

Я пытался просмотреть документацию CF, документацию Hibernate и различные онлайн-блоги, но информация о кэшировании ORM и о том, как он взаимодействует с другими методами манипулирования базами данных (CFQuery, PL / SQL Developer и т. Д.), Отсутствует. Любая помощь будет оценена.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 07 декабря 2010

Базовое «кэширование», и я цитирую это, потому что это скорее сеанс Hibernate, который длится столько же, сколько и запрос ColdFusion. Давайте посмотрим на следующий рабочий процесс:

Запускается ColdFusion и меняет цвет волос Nicks на Red. Запрос завершен.

В редакторе SQL запустите SELECT * ... и цвет красный. Используйте обновление и измените его на Blond.

Новый запрос ColdFusion и получает цвет волос Nicks через ORM, это значение Blond.

По сути, как говорит Марк, когда вы не используете вторичный кеш, значения всегда являются теми, которые поступают из базы данных и работают нормально.

1 голос
/ 06 декабря 2010

По моему опыту, в большинстве случаев - когда кеш не задействован - все работает просто отлично.Тем не менее, у меня есть несколько сценариев, которые удаляют и повторно вставляют кучу данных в процессе миграции.В этих случаях ORMReload () не работает, и я должен перезапустить ColdFusion.Когда это произойдет, контрольным признаком будет то, что я получу сообщение об ошибке «Ошибка обновления. Ожидается 1, получено 0» от CF.

1 голос
/ 06 декабря 2010

Если вы обновляете кэшированные данные извне, вам придется самостоятельно удалять кеш.

см .:

ormEvictCollection(), ormEvictEntity() и ormEvictQueries()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...