2011-08-10 32 views
10

我正在從服務接收XML數據。我收到的測試數據有大約300個XML節點,顯然太多了,無法爲MySQL數據庫創建單獨的行。將XML數據存儲在MySQL數據庫中的最佳方法,具有一些特定要求

問題是,我們理想地需要存儲所有的數據,而且我們可能需要在將來某個時候再次引用數據 - 我們不能只處理一次並刪除XML字符串。

將這些數據存儲在MySQL數據庫中的最佳方式是什麼?

我預測在幾個月內的預測速度下,如果我們要以TEXT格式存儲原始XML數據,數據庫可能會增長到500MB左右。從長遠來看,這感覺不切實際。

回答

14

您可以創建一個blob列(即mediumtext列)。您可以將XML壓縮成XML,然後將其存儲在MySQL中,而不是將純粹的XML作爲字符串插入到數據庫中。

當你從MySQL讀取時,你再次解壓。由於XML是文本,您將獲得非常高的壓縮率(接近80%的壓縮率)。思想過程是,磁盤IO比壓縮/非壓縮需要更長的時間,主要是處理器邊界。

的缺點是,你將不再能夠查詢或使用SQL做全文搜索....

+0

謝謝@Srikar,我發現這個解決方案完全符合我的要求。我只需要在數據庫中存儲xml文檔以供將來參考,不會對存儲的XML文檔進行查詢。我唯一擔心的是隨着時間的推移,存儲XML文件的存儲需求可能會急劇增加。爲此,我將在存儲到數據庫之前壓縮文件。 – Anuruddha

2

最好的方法是不要將XML存儲在數據庫中,但我有關於該特定問題的歷史記錄。

只需將其存儲爲TEXT。對於MySql來說,500 MB沒有任何用處,尤其是對於TEXT數據類型,因爲它們不存儲在行緩衝區中。

4

嘗試使用LOAD XML命令。這個聲明在MySQL 5.5中可用。

3

很大程度上取決於您想要如何處理數據 - 如果您想搜索XML中的內容,那麼decomposing it into a tree將提供更好的查詢性能。

500Mb並不是一個大量的數據 - 問題都是關於如何引用它並搜索它。如果僅僅是爲了歸檔目的,或者你永遠不需要在XML內部搜索,然後壓縮它(例如)base64編碼將把它減少到小於80Mb。

相關問題