我刚刚开始学习ColdFusion ORM和持久性cfcs以及它如何提高应用程序性能。在尝试在我自己的网站上实现任何内容之前,我仍然在努力获得充分的理解,但有一个问题似乎无法找到答案。
据我所知,大部分性能提升来自于在页面末尾的单个事务中批处理数据库CRUD,以及对select语句的智能缓存。关于后者,这个缓存是如何工作的,更具体地说,它是如何处理ColdFusion应用程序之外的更改。
例如,假设我有一个如下所示的用户表:
名称发型
Nick Brown
John Blonde
现在假设我通过PL / SQL Developer运行一个简单的更新查询,将John的头发颜色更新为黑色。现在...
同样重要的(可能更重要的),如果使用CFQuery更新John的头发颜色而不是外部程序,那些相同问题的答案是什么。换句话说,可以在ORM托管表上安全地使用CFQuery吗?
我尝试查看CF的文档,Hibernate的文档以及各种在线博客,但缺乏有关ORM缓存及其与其他数据库操作方法(CFQuery,PL / SQL Developer等)交互的信息。任何帮助将不胜感激。
感谢。
答案 0 :(得分:2)
基本的“缓存”,我引用它,因为它更多的Hibernate会话持续和ColdFusion请求一样长。让我们看看以下工作流程:
ColdFusion请求启动并将Nicks头发更改为Red。请求完成。
在SQL编辑器中运行SELECT * ...并且颜色为红色。使用更新并将其更改为Blond。
新的ColdFusion请求并通过ORM获取Nicks头发的颜色,该值为Blond。
基本上,正如Marc所说,当你不使用 secondary 缓存时,值总是来自数据库,并且工作正常。
答案 1 :(得分:1)
如果从外部更新缓存数据,则必须自行逐出缓存。
见:
ormEvictCollection()
,ormEvictEntity()
和ormEvictQueries()
答案 2 :(得分:1)
根据我的经验,在大多数情况下 - 当没有涉及缓存时 - 一切正常。但是,我有一些脚本会消除并重新插入一堆数据作为迁移的一部分。在这些情况下,ORMReload()不起作用,我必须重新启动ColdFusion。发生这种情况时的告示标志是我将从CF获得“更新失败。预期1,收到0”错误。