2009-11-12 86 views
1

我寫一個應用程序,我將有許多不同的語言字典的一些值之間PHP對象的狀態。我知道我可以使用GetText,但編輯後必須編譯AFAIR文件,並且我想讓用戶編輯字典,並且不能在服務器上重新編譯.mo文件。我不知道會使用多少種語言,因此解決方案必須具有彈性。記住請求

我設計的數據庫,所以它工作得很好,模式看起來不錯,但對於每個字典值有幾個連接,所以解決方案不是太快。

因爲這個原因,我正在考慮一次存儲字典值,只有在編輯一個值後才刷新它。不幸的是,PHP靜態變量無法使用,因爲它們在請求結束時死亡。我不想使用會話,因爲我必須爲每個用戶進行數據庫調用。理想情況下,我想像使用Java一樣使用靜態變量 - 只要應用程序存在於JVM中,它們就會生活。

對於所有用戶(而不是每個用戶)長時間(而不是每個請求)存儲一些變量(在我的例子 - 字典,字典條目等)的最佳解決方案是什麼?

我正在考慮製作類似DictionaryValues的類,將其序列化一次,然後對每個請求進行反序列化。每次有人編輯字典時,對象都會被重新序列化,並將替換舊的序列化對象。當然,與字典值讀取的頻率相比,編輯很少出現。

這是一個很好的解決方案嗎?我應該序列化對象並將其存儲在磁盤上還是寫入數據庫?哪一個更快?

也許你找到更好的解決方案,解決這個問題?

回答

5

您可以嘗試PHP APC。這是快速和易於使用。您可以序列化/反序列化對象並輕鬆存儲/獲取它們。

在分佈式環境中,您可以使用memcache執行相同的功能。

2

有幾個選項,如果內存緩存/ APC過多或不可能的:

你可以「編譯「你的數據庫值經常進入一個PHP文件幷包含它。這將是最快的解析和處理方式。

如果您不需要每個頁面中的每個字典值(很可能,是不是?),您可能想要使用無JOIN的緩存表。從腳印的角度來看,這將是最好的解決方案。