2011-05-25 45 views
0

我有一個本地數據庫,裏面有大約1GB的數據,我用它來分析金融市場的軟件。我從外部應用程序重複調用一個存儲過程。該存儲過程從MEMORY表中提取行,執行計算並將結果發送迴應用程序。是否可以在MYSQL查詢緩存中有一個「移動窗口」?

每個查詢調用位於設置大小(例如100,000 rows)的「窗口」內的表中的數據。隨後的每個查詢都將窗口移動1行並計算結果。

是否可以在這種情況下以有用的方式使用MySQL緩存?

爲了提高速度,我目前只使用MEMORY發動機,而不是MYISAMInnoDB

回答

1

根據您正在執行的聚合,可能的工作是選擇所有結果並處理窗口客戶端。

的客戶端可以(與你的窗口大小替換1000):

  1. 閱讀前1000個結果和計算的當前值。
  2. 從計算中減去第一個結果。
  3. 閱讀下一個結果並添加到計算中。
  4. 重複2 & 3直到處理完所有結果。

這樣,您不必在每次讀取下一個值時都將枚舉所有1000個結果,將算法從O(n^2)更改爲O(n)。

爲了在讀取時獲得更高的效率,可以使用由固定長度循環緩衝區支持的隊列來存儲當前結果窗口。這將允許您將緩衝區視爲標準隊列,但無需在添加/刪除項目時重新排列後備陣列中的元素。

相關問題