簡體   English   中英

緩存昂貴的計算-正確的方法?

[英]Cache expensive calculations - The right way?

這是昨天我提出的問題的跟進問題-一條評論問我為什么不將“緩存”存儲在數據庫中(和我測試了一個文件夾體系結構,其中數百萬個文件夾分為不同的子文件夾,每個子文件夾最多容納1000個)開始讓我思考所有正確的解決方案。

一個文件夾中包含100萬個或更多文件,用於包含(緩存)

基本上,這里有更多詳細信息:我的計算量很大,需要許多數據庫查詢。 基本上,程序的每個請求都針對特定的用戶。 對於每個用戶,結果將始終完全相同(直到用戶進行重大更改)。 因此,基本上,我在想:為什么每次有人訪問此用戶頁面時都要執行此操作-如果我可以一次存儲一次呢?

基本上,結果是一組不同的PHP對象,它們持有不同的數據/設置等。因此,我正在考慮創建一個.inc文件,該文件創建這些對象(具有預定義的值,這些值將由SELECT產生)。 每當有人打電話給該特定用戶時,我只需進行快速include解決問題。

現在我不太確定該解決方案了。 這意味着,基本上每個用戶都至少要包含一個.inc (可能有多個)文件。 這意味着,如果我對用戶表的PK有一個UNSIGNED MEDIUMINT ,則我需要具有一個文件夾結構,以至少支持8388607 *〜2個文件(最壞的情況)。

我想我在這里尋找錯誤的方向。 我有什么可能?

  1. 選擇數據並計算/將其放置在每次頁面調用中-始終具有相同的結果
  2. 與2相同,但是將結果對象存儲在文件中,作為代碼段-包括
  3. 與2相同,但是序列化生成的對象,將它們保存在文件或數據庫中,在每次頁面調用時將其反序列化

還有其他解決方案/方法來解決此類問題嗎? 所有這些解決方案在我耳邊聽起來都不是很干凈,但是我正在努力尋找另一種方法來做到這一點。 擁有800萬個文件,或一遍又一遍地計算相同的內容-兩者之間應該有所不同。

有什么建議么?

謝謝! -不好意思的英語。

我認為這里有許多選項供您選擇,盡管沒有進一步的細節,很難選擇最佳的選項:

你可以半緩存這些對象在數據庫中的表,如果他們不太可能在自己的表不斷調整,只能做昂貴的計算,如果結果不是在半緩存表中(這也將它置於半緩存表)。 您甚至可能希望有一個定期更新這些時間表的計划(例如每晚),以利用服務器的停機時間。

您可以將結果存儲在會話或cookie中,並根據需要進行檢查,如果不存在,請從數據庫中進行計算。

使用mySQL緩存存儲這些昂貴的計算,以便根據需要將它們存儲在緩存中。 這可能意味着您用預期的訪問者預熱了緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM