2009-08-21 65 views
7

我目前正在研究一個基於XML的CMS,它將數據保存在稱爲「項目」的塊中。這些可以在網站上用來顯示內容。XML文件中的數據:一個大文件還是多個小文件?

現在,目前我有一個單獨的XML文件的每個項目。由於該網站上的大多數頁面使用了大約三到四個這樣的項目,所以這是一個相當小的網站, 20頁有大約100個不同的項目。因此,我的/ xml/items文件夾中的xml文件數量相同。

將所有數據存儲在單個item.xml文件中,還是我現在的方法更好?

臨單個文件 - XML/items.xml

  • 以下文件(可能開始成爲 性能問題在更大 網站談論 數千種商品的時候。)
  • 更少的磁盤訪問(尤其是在 管理所有 項目的列表)

Pro的多個文件 - XML /項目/ * XML

  • 更快,因爲只有一個小文件來訪問一個單一項目 必須 解析

回答

4

這裏已經有很多深思熟慮的迴應。

1大文件或許多小文件應該工作得很好。需要考慮的領域更可能在管理和維護方面。如果因爲它們處於一堆不同的文件而難以維護項目,那麼可能有一個大文件就是答案。

的幾點思考:

  • 一個大文件意味着一個錯誤(無效的XML)可以取下來的整個應用程序,而許多文件只會影響使用項目(S)的頁面。通過不編輯生產中的數據來緩解。

  • 每個服務器都有自己的項目文件結構嗎?或者這些項目位於一個高度可用的份額中?數據副本越多,越有可能在特定的服務器上出現數據不同步的情況,這些數據可能很難追查到。

  • 無論您選擇1個文件還是許多文件,都可能解決/抽象代碼中的任何數據訪問(鎖定,搜索等)問題。您需要編寫的代碼越多,執行鎖定,搜索等操作,您可能需要調試的bug越多。

  • 考慮緩存項目一段時間以避免光盤訪問,如果性能開始成爲問題。

您可能想看看Scott Hanselman的dasBlog blogging engine。我相信它基本上是一個基於XML /文本文件的內容管理系統,它採用了許多文件方法,並且可能對查看有幫助。

0

如果你不只是要對數據庫的路線,這對我來說,感覺很明顯,我d建議幾個文件。主要原因是,如果您僅使用一個文件並進行更新,則在再次顯示頁面時,應用程序需要解析整個文件,這是一件壞事(tm)。

4

我認爲你目前的接受程度是兩種選擇中最好的。鑑於您的用戶使用您創建的界面來編輯這些文件,它們將不會在具有多個文件的目錄中搜索文件。

鑑於如何破壞文件,許多文件的優點是,你不會得到一個大的打擊,但只有一個文件的命中。鎖定也更好 - 一次鎖定一個文件,而不是完整的「主XML文件」。

+1

謝謝你對鎖定的評論。目前CMS的工作規模很小,但添加一個鎖定機制以防止數據丟失是一件值得記住的事情! – 2009-08-21 12:48:51

+0

@Jørg - 參考單個XML文件。數據丟失和鎖定是兩回事。鑑於你有一個擁有1000頁的大型網站。如果有人編輯單個頁面 - 所有頁面的完整XML文件將被鎖定,直到寫入完成(取決於代碼和速度可能需要時間)。您還會進入版本控制的有趣之處 - 如果兩個人同時編輯兩個頁面會發生什麼?一個文件=>一個人的變化被覆蓋。 – Thies 2009-08-21 13:47:55

+0

呵呵,我說的是兩個用戶同時打開並保存同一個文件時的數據丟失。鎖定一個文件將解決這個問題,但只適用於處理多個文件。使用一個大的XML文件可以讓這個任務變得更加困難(正如您所說的,版本化和合並更改等) – 2009-08-21 14:17:35

2

您的用戶可以直接使用XML文件嗎?或者只是存儲數據的一種方式?

如果是後者,這是一個技術問題,磁盤訪問和解析速度是相關的問題。

如果前者,最重要的問題是什麼對用戶最有意義。然後,您可以利用緩存等解決技術問題。 因此,假設用戶直接使用XML文件,您必須問自己是否幫助或阻礙了您的用戶擁有多個文件或單個文件。如果每個項目描述一個單獨的組件,並且與其他項目很少或沒有關係,我會將它們放在單獨的文件中。 如果您創建一個包含大量不相關項目的文件,用戶將花費很多時間搜索相關項目。如果您有多個文件,他可以使用文件名立即選擇正確的文件。

+0

用戶不知道他正在處理的是XML數據。這只是一種存儲數據的方式。這是我的優點和缺點中提到的磁盤訪問和解析速度。 – 2009-08-21 12:34:26

1

我認爲這取決於您的服務器有多少內存; XML文件有多大;以及您正在使用的解析器。如果服務器有足夠的內存,那麼我認爲一個XML文件會更好,因爲它可以緩存在內存中,然後輕鬆解析。我認爲這會超過打開/閱讀許多文件的IO開銷。

此外,未來它將更具可維護性和靈活性。例如,如果您想要生成所有項目的列表,或者可能搜索它們,那麼使用大量單獨的XML文件將會非常困難。要使用數據庫比喻 - 如果您在數據庫中使用了公共頁面數據,您會爲每個頁面創建一個單獨的表格嗎?當然不是。

+0

其實你對於搜索的評論 - 我還沒有真正想過,因爲某種原因 - 真的改變了我目前的狀況。我會研究搜索我的數據,以及單個文件在這裏可能具有的優點。 – 2009-08-21 12:46:52

0

如果您存儲在一個文件中,並且每個文檔的名稱映射到它開始於(文件)文件的索引文件中的所有XML文檔,您可以:

  • 減檔
  • 更少的磁盤在單個文檔

訪問

  • 更快地訪問老實說,我不認爲這種方法將提高頁面足以成爲值得努力的加載時間。您說可能有100個項目,如果您在準備頁面時不需要其中的大部分,那麼將它們全部存儲在一個文檔中會增加頁面的加載時間(至少通過增加對一個文檔的訪問時間) 。我會去存儲每個項目在一個文件中,每個文件在一個文件中,所有文件在一個目錄中。假設(與我建議的方法類似),目錄是一個索引,它將每個文檔的名稱(文件名)映射到磁盤上啓動的位置(文件路徑)。

  • 相關問題