2012-01-25 52 views
1

我正在處理一個項目,其中xml提要通過cron作業從其他服務器提取到我的服務器並將其保存爲文件,並且我的網站使用該xml文件顯示數據在網站上。存儲Big XML數據的最佳位置

但問題是xml文件是兩個大(4mb)左右,每次用戶點擊該網站時,服務器都會從相同的位置獲取文件並解析它併爲用戶服務,所以如果1000次點擊服務器將它拉1000倍(這是我想解決的開銷)

我試圖使用memcache,但也限制爲2MB。

任何人都可以告訴我哪個是最好的方法來保存數據庫,作爲一個XML文件,或在memcache中的大XML,我應該把這個大的XML分類?

+0

新的xml提要每隔3到10分鐘後提取一次並替換舊的提要 – MZH

+0

它取決於XML提要的內容。如果它是一個包含類別的產品供稿,也許可以在將其按類別檢索到較小的文件後將其拆分。或者,讓一個腳本將xml解析到數據庫中,因爲這可以讓您更具選擇性地檢索您的內容。你在與什麼樣的內容合作? –

+0

非常大的產品xml(大約4mb文件)在瀏覽器打開時暫停一段時間,問題是類別不斷變化 – MZH

回答

2

我將創建一個數據庫,有cron作業取,然後解析XML,並插入到一切數據庫,並且只爲數據庫中的用戶提供服務。

要確保數據一致,您可以實施基本版本控制。將當前版本號存儲在某個地方;每當你得到一個新的XML,將下一個版本存儲到數據庫中,然後更新當前版本號,定期清理。

+0

感謝所有你們,我應該將它保存到分貝,即使一個錶行非常大(以千字節爲單位)? – MZH

+0

服務器的記錄,也是每3到5分鐘後xml刷新,所以它不是一個好主意,每個產品的每行保存到數據庫。將每個類別xml保存到db行中是否合適,如同一行中的一個類別,則每行將保存KB中的數據 – MZH

+0

單個xml文件大約是60,000行。將內容分割成不同的表格並插入到數據庫中似乎是個不錯的主意,但說我每天有1000個xml文件。如何在大範圍內傾倒所有內容,然後在每次用戶查詢時將該文本/字符串解析爲xml文件並返回結果。我知道它會創建每次解析這些龐大數據的開銷,但它肯定會解決數據庫行限制。如果我在每一行中插入這些值,兩種方法中最好的選擇是什麼? – Pramod

0

對4MB數據使用memcache不是一個好的選擇,您也已經遇到了XML文件的問題。正如@ori所回答的,更好的選擇是將xml數據存儲到某個數據庫並從數據庫提供服務。
查找此鏈接MySQL 5.5 Load XML Syntax例如如何將XML加載到數據庫。
還有一點,如果您將此XML作爲Web服務(如SOAP)獲取,則應該有一個選項只能獲取更新的數據。這樣,您可以節省一些下載時間。

+0

沒有它的只是XML沒有肥皂響應 – MZH

0

但問題是,XML文件是二每次大的周圍(4MB)和用戶擊中的部位,服務器獲取文件(從同一位置),並對其進行解析和服務器的用戶,因此,如果1000命中服務器將拉1000次(那開銷我想解決)

所以你已經緩存的網絡接入,但你不知道緩存解析到目前爲止。爲什麼不緩存解析呢?!這將減少顯示結果所需的時間,因爲XML沒有改變因此不會解析。

如果它仍然太慢,那麼你可以期待下一步如何提高速度,例如,緩存每個類別等。由於您沒有顯示任何代碼,也沒有概述您如何處理數據,因此無法提供更多建議。

+0

沒有我沒有緩存任何東西,我剛剛在我的服務器上保存該XML並解析它時,有人擊中服務器的記錄,也是每3至5分鐘後xml刷新,所以它將每個產品的每行都保存到數據庫中並不是一個好主意。將每個類別的xml保存到數據庫行中是否合適,如同一行中的一個類別,然後每行將保存KB中的數據 – MZH

+0

將XML存儲在光盤上,就像您已經這樣做了:我將它稱爲緩存,因爲它緩存網絡訪問。這是一個基於文件的緩存。添加一個額外的緩存是有意義的(像緩存解析,按照你的建議將它存儲到數據庫中)。根據您的操作,甚至可以將每個條目以標準化的形式保存在數據庫中,這樣您可以在您的網站被點擊時簡單地進行數據庫查詢。如果它仍然太慢,你甚至可以緩存DB查詢幾分鐘。這一切都取決於你所做的事情,從最耗時的部分開始,這樣緩存纔是最有效的。 – hakre