2011-06-06 48 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