2011-06-06 46 views
2

在我的应用程序中,我有一个侧边栏(在每个页面上)显示小公司的职位空缺列表。在Application.cfc中运行查询并以某种方式将结果存储在那里是明智的,还是有更智能的方法来运行查询并将结果存储在其他地方的其他范围内?将查询结果存储在Application.cfc中的好习惯或不好的做法

服务器资源的最佳用途是什么?

在此先感谢。

编辑:我正在使用CF8。更新可能每月进行一次。

回答

2

在边栏调用的cfquery上使用cachedwithin。

+0

这是迄今为止最直接的方法。这个问题并没有留下任何更复杂的印象。 – orangepips 2011-06-07 17:06:25

+0

因此,如果我有' SELECT * FROM jobs'在我的CFC中,它将缓存查询结果的时间跨度,并且在时间跨度结束之前不调用数据库? – Ofeargall 2011-06-07 18:46:59

+0

为了记录,我总是在我的查询中使用''标签。只是认为我会在通过时关闭一个...... – Ofeargall 2011-06-07 18:51:29

0

如果结果取决于用户会话,会想到会话范围。只有在服务器(重新)启动时才会刷新应用程序范围,对吧? 就资源而言,服务器在第一次请求(应用程序范围)时只加载一次结果显然更好。但显而易见的是,这些结果很快(或很快)就会过时。

如果担心发送过多的查询到数据库,可以考虑缓存结果。

既然你谈论的是一个小公司,也许你应该开始重新加载每个会话的内容,并看看数据库服务器上的负载是否失控。

+0

我最初考虑了会话范围,但不确定它是否是存储数据最优雅的方式。 – Ofeargall 2011-06-07 18:26:11

3

你有CF9吗?我将使用应用程序范围,使用cachePut()将查询或生成的HTML缓存到缓存对象中,并使用cacheGet()调用需要的缓存对象。然后,无论您在何处管理该信息的更新(手动CRUD或使用此信息的Web服务等),只要确定在感知到更改时刷新该缓存对象即可。最初在onApplicationStart()中填充缓存对象,你应该很好。

+0

我正在使用CF8。尽管我们正在考虑尽快改用CF9。 – Ofeargall 2011-06-07 18:22:41

+0

我同意这种方法一旦升级就会变得最好。通常你应该尝试缓存尽可能靠近输出,在你的情况下意味着缓存作业列表的HTML。该查询只运行一次,CF只会生成一次HTML - 此后,您只需从缓存中返回HTML片段,直到下一次更新。您可以节省数据库调用和CF处理,而无需担心查询是否被缓存。 – CfSimplicity 2011-06-09 07:49:36

0

职位空缺的变化频率如何?您可以将它们存储在应用程序中,并有一个计划任务来定期重新运行查询。

+0

帖子将每月(大致)变化,所以它不是一个真正的常见事件。 – Ofeargall 2011-06-07 18:23:41