2012-05-13 7 views
1

我正在研究一個涉及不斷分析數據並以多線程方式輸出結果的腳本。所以基本上結果文件(一個XML文件)不斷更新/修改(有時2-3次/每秒)。除了完全重寫舊文件之外,是否有方法修改/更新xml文件?

我目前正在使用lxml解析/修改/更新xml文件,現在工作正常。但從我所知道的情況來看,即使有時您只需在文件的某處添加一個條目/子條目(如<weather content=sunny />),您也必須重寫整個xml文件。 XML文件逐漸變大,開銷也越來越大。

就效率/資源而言,還有其他更新/修改xml文件的方法嗎?或者當xml文件太大而無法解析/修改/更新時,您將不得不切換到SQL數據庫或類似的東西?

+0

作爲特殊情況,您可以_append_文件(在我熟悉的文件系統上)。我懷疑這是特別有用的。 –

回答

2

不,你通常不能 - 而不僅僅是XML文件,任何文件格式。

如果您完全覆蓋字節(即不添加或刪除任何字符,只需用相同字節長度的某些字符替換某些字符),則只能更新「就地」。

使用數據庫形式聽起來像是一個不錯的選擇。

+1

對於多線程應用程序來說,數據庫特別好,因爲所有硬同步的東西(文件鎖,ACID等)已經爲您完成了。數據庫不一定是CPU重的網絡事物; SQLite使用普通文件,啓動速度非常快。 –

+0

@ Li-aungYip:謝謝你的建議!我現在正在檢查SQLite,它對我的​​腳本來說看起來非常棒。 – Shane

0

它肯定聽起來像你需要某種數據庫,因爲Li-anung Yip陳述這將處理各種令人討厭的多線程同步問題。

你說你的數據正在逐漸增加?它如何被消費?客戶端每次都被迫下載整個結果文件嗎?

不知道您的用例,但也許您可以考慮使用ATOM feed來分發您的數據更改?提供對Atom pub的支持也將有效地使REST啓用您的數據。它仍然是XML,但採用標準的兼容格式,易於使用並輪詢更改。

相關問題