我有一個相當CPU密集型的Web應用程序(它基本上是一個字典集合,但它們不只是簡單的字典,它們做了很多東西,無論如何,這是不重要 )。因此,在CPU密集型Web應用程序中,您遇到擴展問題,併發用戶過多,並且響應速度非常慢。服務器端緩存CPU密集型Web應用程序的AJAX請求
我的應用程序的流程是這樣的:
JS - > AJAX調用 - > PHP - > VB6的dll - > VB6代碼查詢字典,做CPU密集型的東西 - >回覆PHP - >回覆JS - > html div得到新內容的更新。顯然,在與IIS 7.5的Windows環境。 PHP只是一種訪問.dll的方式,除此之外別無其他。
回覆/顯示的內容是html格式的文本。 該應用程序有很多PHP文件,這些文件在.dll中調用不同的功能。
所以爲了避免VB6的DLL對於每個請求,這是CPU密集型部分的通話,我想這樣做的:
例如Ajax請求:
php file: displayconjugationofword.php
parameter: word=lol&tense=2&voice=active
所以當用戶在上述請求displayconjugationofword.php,我稱之爲VB6的dll,然後就回饋回覆給客戶之前,我可以在MySQL表中添加這樣的請求數據:
filename, request, content
displayconjugationofword.php, word=blahblah&tense=2&voice=active, blahblahblah
因此,下一次用戶使EXACT與ajax請求相同時,displayconjugationofword.php代碼(而不是調用vb6 dll)首先檢查mysql表以檢查請求是否存在,如果存在,則從那裏獲取它。
因此,這個MySQL表將逐漸增長,達到3-4萬行,隨着它增長的機會,要求在數據庫中的東西,也成長起來,理論上應該比做cpu密集的來電(每個任何地方從50到750毫秒長)。
您認爲這是實現我想要的一個好方法嗎?或者當mysql表達到3-4百萬個條目時,它也會變慢?
非常感謝您的意見。
編輯
我知道有關IIS輸出緩存,但我認爲,因爲它不是在我的情況非常有用:
1)AFAIK只緩存PHP文件時,它變成「熱」(多查詢)。
2)我確實有一些調用vb6的.php文件,但每次回覆都是隨機的。
如何將HTML存儲爲flatfile並省略db? –
@GerbenJacobs不可能,所有可能的請求的組合是數百萬。 – MIrrorMirror
你有沒有考慮過使用類似'memcached'的東西?您可以爲每個緩存條目指定到期時間,並且在內存填滿時還會刪除舊條目。 – Barmar