3

我刚刚开始了解 ColdFusion ORM 和持久 cfcs 以及它如何提高应用程序性能。在尝试在我自己的网站上实施任何东西之前,我仍在努力获得全面的理解,但是有一个问题我似乎无法在任何地方找到答案。

我知道大部分性能提升来自于在页面末尾的单个事务中批处理数据库 CRUD,以及来自 select 语句的智能缓存。关于后者,这种缓存是如何工作的,更具体地说,它如何处理在 ColdFusion 应用程序之外所做的更改。

例如,假设我有一个如下所示的用户表:

名称 头发

尼克布朗

约翰金发

现在假设我通过 PL/SQL Developer 运行一个简单的更新查询来将 John 的头发颜色更新为黑色。现在...

  • 下次页面尝试列出约翰的头发颜色时会发生什么?
  • 假设头发颜色仍然显示为金发,因为它已被缓存,如何刷新该缓存?
  • 假设头发颜色仍然缓存为金发,如果我使用 CF ORM 将 John 的名字更改为 Jonathon,会发生什么?它会在更新行时将头发颜色覆盖回金发吗?
  • 同样,如果我尝试使用 CF ORM 将头发颜色更新为绿色怎么办?CF 会检查并注意到它的缓存值(金色)不再是当前值(黑色)并给出某种反馈吗?

同样重要(也许更重要),如果使用 CFQuery 而不是外部程序来更新 John 的头发颜色,那么这些相同问题的答案是什么。换句话说,CFQuery 可以安全地用于 ORM 托管表吗?

我尝试查看 CF 的文档、Hibernate 的文档和各种在线博客,但缺少有关 ORM 缓存以及它如何与其他数据库操作方法(CFQuery、PL/SQL Developer 等)交互的信息。任何帮助,将不胜感激。

谢谢。

4

3 回答 3

2

如果您在外部更新缓存数据,您将不得不自己逐出缓存。

看:

ormEvictCollection(), ormEvictEntity(), 和ormEvictQueries()

于 2010-12-06T17:49:40.120 回答
2

我引用基本的“缓存”是因为它更像是一个持续时间与 ColdFusion 请求一样长的 Hibernate 会话。让我们看一下以下工作流程:

ColdFusion 请求启动并将尼克斯的头发更改为红色。请求完成。

在 SQL 编辑器中运行 SELECT * ...,颜色为红色。使用更新并将其更改为金发。

一个新的 ColdFusion 请求并通过 ORM 获取 Nicks 头发的颜色,该值为 Blond。

基本上,正如 Marc 所说,当您不使用二级缓存时,这些值始终来自数据库并且工作正常。

于 2010-12-07T01:42:26.963 回答
1

根据我的经验,在大多数情况下——当不涉及缓存时——一切都很好。但是,作为迁移的一部分,我有一些脚本可以清除并重新插入一堆数据。在这些情况下,ORMReload() 不起作用,我必须重新启动 ColdFusion。发生这种情况时的迹象是,我将收到来自 CF 的“更新失败。预期为 1,收到 0”错误。

于 2010-12-06T18:00:49.087 回答