我的申請被通過大量的鍵/值的配置(假設30.000例如)PHP:最佳配置存儲?
我想找到這些配置的最佳部署方法,知道我想避免定義,以允許在運行重新配置。
我已經想到了
- 預編譯它們到一個數組經由PHP文件
- 預彙編成一個TMPFS SQLite數據庫
- 預編譯它們到memcached分貝
我有哪些選項
- 這些配置的最佳隨機訪問時間(內存不是問題)?
- 如果我能打破這些配置到像家庭的最佳結構訪問時間(網絡,國際化功能,..)
感謝 傑羅姆
我的申請被通過大量的鍵/值的配置(假設30.000例如)PHP:最佳配置存儲?
我想找到這些配置的最佳部署方法,知道我想避免定義,以允許在運行重新配置。
我已經想到了
我有哪些選項
感謝 傑羅姆
好吧,如果內存不是問題,只需將一個數組序列化到一個文件。絕對沒有比這更快的解決方案。您沒有SQLite的I/O和庫開銷,並且沒有memcached的網絡開銷。
但請記住,內存必須真的不成問題。您將一次加載整個30,000個元素的數組到內存中,而不是使用數據庫,您可以根據需要加載它們。
要構建設置,可以將每個設置放在它自己的文件中。
但是真的,你應該使用數據庫。這就是他們在那裏。我真的質疑爲什麼你需要擔心30k的設置..你可能想重新考慮你的應用程序設計。
隨機訪問內存總是提供我的經驗中最好的隨機訪問。 – webbiedave 2010-04-12 15:09:24
@webbiedave:不能與這種說法爭論。 – ryeguy 2010-04-12 15:11:46
通過將一個數組「序列化」到一個文件,你的意思是在一個php文件中創建數組,或者在一個預先序列化的數組上使用unserialize方法?這是否會影響性能? – 2010-04-12 15:12:09
如何在數據庫中?
有了這樣的模式:
| key | value |
你可以有這樣的數據:
| currency | pound |
| timezone | GMT |
這也意味着你可以查詢它是這樣的:
SELECT * FROM options WHERE key = 'timezone'
甚至返回很多選項:
SELECT * FROM options WHERE key IN ('timezone','currency')
這可以在任何類型的數據庫中,而不是在SQLite數據庫中。如果您使用的是PHP之類的語言,則可以使用ADOdb進行數據庫抽象,以便您的應用程序可以在不同的數據庫類型之間移植,如果您擔心被綁定到一個數據庫,可以這麼想。
簡單數據庫設置的問題是訪問時間。對於特定的PHP代碼區中需要的每個密鑰或密鑰組,您需要一個請求。即使使用可能意味着數百次數據庫提取的緩存。 – 2010-04-12 15:08:34
我不知道我是否誤解了你的觀點,但你是否說你會重複代碼?因爲你可以很容易地使用函數或者甚至類作爲包裝器並且以這種方式獲取選項,例如'Options :: getOption('timezone')'。 – 2010-04-12 15:11:05
沒有。對於已獲取的密鑰,有一個進程內緩存,但取決於所呈現的頁面,密鑰可能不同 – 2010-04-12 15:17:12
如果你想結構化,我會說使用parse_ini_file功能的ini文件。
你的應用程序正在做什麼,它需要30k設置? – ryeguy 2010-04-12 15:09:39
有不同的增長軸:i18n鍵,品牌,seo網址 – 2010-04-12 15:14:28
我在這裏看到一個問題。一方面,你說記憶不是問題。另一方面,你說你需要高性能。雖然使用平面陣列是最快的選擇,但具有諷刺意味的是,如果它很大,它會很慢,因爲它可能會被分頁到磁盤,除非你有無限的內存。我不明白你爲什麼不使用數據庫。往返數據庫訪問(db是遠程數據庫)的 – ryeguy 2010-04-12 15:18:11