0

我想知道是否有 java 方法/对象可以替代 cfquery,它们都允许变量卫生和更好的缓存方法。

我知道您可以使用信息模式来获取数据类型和字符长度,然后使用它来验证查询中变量的数据类型和长度。

但是随着每个人都转换为使用 cfqueryparam 来进行绑定变量和变量清理,这也阻止了在 cfquery 上使用缓存。

所以我希望有更好的方法或脚本来获得更高的性能和可扩展性......

就个人而言,我认为我们需要一种在 cfquery 中进行缓存的新方式或方法。因为我们真正想要的不是缓存 x 分钟,而是缓存直到数据发生变化,使用新数据,然后再次缓存回来,直到数据再次发生变化。

相反,多年来,我们不得不计算要在冷融合中缓存 cfquery 多长时间,这并不能很好地控制或了解数据何时更改。

这有意义吗?

4

3 回答 3

5

首先,让我们消除一个误解。在 CF8+ 上,您可以缓存使用 cfqueryparam 的查询。我也不确定您所说的“每个人都在转换”是什么意思,因为一段时间以来使用它已被广泛认为是最佳实践。

所以,我认为你的问题实际上是没有实际意义的。虽然您可以手动缓存查询(我为其他数据类型执行此操作),但 cfqueryparam 已经有一段时间没有理由这样做了。

于 2009-12-22T04:19:17.517 回答
1

如果您正在寻找访问数据的“替代”方法,ORM(对象关系映射)是您的最佳选择。如果您使用的是 CF9,则在底层使用 Hibernate 库 (Java) 来管理数据的访问和缓存。

CF7+ 用户可以使用 Mark Mandel 为 ORM 功能构建的 Transfer 库。

于 2009-12-22T04:24:30.017 回答
0

除了jarofclay的回答,我想指出 Transfer ORM 具有内置的缓存系统(尽管即将到来的版本将允许使用一些更好的现有解决方案),这就是它提供更好性能的方式。

无论如何,我最好从模式和查询优化开始,并尝试使用缓存,它可以在真正不同的级别上完成:从数据库查询到呈现的内容。

例如,Railo 的新版本支持一些企业级缓存引擎,如 ehCache。

IMO 这是解决性能任务的更好方法,而不是试图弄乱 Java 和查询。如果我理解正确,它们仍然会通过相同的数据源运行,甚至可能使用相同的底层字节码。

于 2009-12-22T10:18:38.313 回答