2012-10-04 85 views
0

我需要爲PHP應用程序實現一種快速緩存機制。它的工作原理如下:多個節點服務器從中央服務器(VIA JSON服務)請求數據。節點服務器應該以一種快速高效的方式緩存文件系統上的響應。這就是問題 - 什麼是存儲部分最優化的解決方案。我有一些類型 - XML(聽說它對於許多記錄可能是低效的),將數組定義與PHP文件中的內容存儲在一起,或者只是將一組記錄轉儲到文件中。對於這種情況,哪種方法最有效?或者也許別的東西?我需要注意的是,它必須在沒有任何額外的庫和SQL的情況下以乾淨的PHP> = 5.2實現。PHP自定義數據服務緩存

+1

會有什麼數據被用於節點服務器上?你寫得越快,閱讀的速度就越慢,所以你必須根據寫作的多少和閱讀的多少來進行折衷,當然,一旦數據讀出,你對數據做了什麼。 – Lee

+0

節點服務器將是一種將數據顯示給最終用戶的CMS。我想盡量減少第一個用戶請求的延遲(當節點服務器上的緩存爲空時),所以我認爲寫作應儘可能少。 –

回答

1

鑑於您提供的信息,我會建議簡單地將JSON字符串轉儲到文件。這意味着不需要外部庫或SQL引擎。

如果你想要「人類可讀」的東西,你也可以使用XML,但是XML並不是那麼快,你當然需要額外的時間來生成XML,然後才能存儲數據緩存。

讀取僅僅是從文件中獲取字符串並通過json_decode運行的一種情況。如果您只需要部分數據而不是整個批次,則可以通過將json對象拆分成塊並寫入單個文件來提高讀取性能,這會降低一些寫入速度(不會太多),但會提高讀取速度更好。

通過寫入配置有ext2文件系統的分區,寫入速度可能會更好。

但是,除非您使用大型數據集和多個緩存文件,否則沒有真正的理由進入這種優化範圍,將json作爲字符串寫入文件,讀取它應該不夠好爲你。

0

您不應該爲只有一個應用程序的內容緩存生成XML文件。這是開銷生成和解析XML,並導致需要更多的字節。

生成了PHP的文件是有效的,但也有一些問題吧: - 可能解析錯誤 - 可以緩存數據的兩倍

我寧願(的OS + PHP操作碼 - 緩存文件系統緩存)將緩存文件作爲簡單的序列化PHP數據打包,因爲它具有較低的解析語義並且非常有效。你也可以使用像igbinary或mgspack這樣的二進制序列化器來加速它。

順便說一句:如果你從不同的網絡節點上的遠程服務緩存數據,我會建議你使用像memcached的緩存服務器;)