2009-03-01 70 views
5

我目前很好奇其他程序員如何將數據組織到文件中。 任何人都可以推薦任何有關創建文件結構的最佳做法的好文章或書籍嗎?例如,如果您爲任何目的而創建了自己的軟件,您是否將保存的數據保存爲純文本,序列化,編碼爲xml,以及爲什麼要這樣做?自定義文件結構的最佳實踐

我有遺漏的祕密嗎?

回答

7

一般來說,最起碼可以用最簡單的辦法去做,考慮一下,比如UNIX,其中大多數配置文件只是以空格分隔的字段,或者以另一個字符(例如/ etc/passwd,因爲GCOS字段可以包含空格使用「:」分隔符)分隔的字段。

如果您的數據需要更多結構,那麼問自己「我可以輕鬆使用哪些工具?」例如,Python和Ruby有JSON和YAML。

如果您已經有很多基於XML的東西,或者您希望在瀏覽器中將XML轉換爲可顯示的表單,那麼XML基本上很有用。否則,它通常是非常重量級的(代碼大小,複雜度)。

+0

我同意。我也會說,想想未來可能會給你的數據結構帶來什麼。例如,如果將新字段添加到數據中,請確保您的文件格式可以輕鬆擴展。 – 2009-03-01 22:56:50

5

無論您選擇哪種格式,都要記住在內部存儲某種版本號(我非常確定您必須引入一些更改)。

格式很大程度上取決於應用程序和數據量。對於某些應用程序而言,XML是合適的,對於其他應用程序,存儲在二進制文件中的固定大小的結構是很好的。

我使用許多不同的格式,取決於情況,例如:

  • 純文本文件(分隔),用於存儲數據集爲Matlab的和R分析
  • 二進制文件 - 用於存儲固定尺寸的結構(與動態調整大小隨機訪問變得困難,而不必爲元素維護單獨的偏移數組)。其中一個優點是性能和空間效率(爲什麼大多數數據庫以二進制格式存儲數據?),但對於人類來說並不是很好。請記住永恆之處。
  • XML - 通常用於配置數據或我想給其他用戶應用程序(以及XSD)的數據。對方可以寫很好的XSLT轉換或使用其他方式的數據(當然他們可以做同樣的用純文本或二進制數據給出的格式描述)
2

除非你有獨特的要求,使用的東西,其已經有一個成熟的庫,所以你可以避免編寫自己的解析代碼。就像人們所說的那樣,這意味着XML/JSON等。

另一個不錯的是Google的協議緩衝區(http://code.google.com/p/protobuf)。在那裏,您編寫了一個公共消息定義,並且協議緩衝區編譯器生成了用於爲您填寫,序列化和反序列化數據的對象。通常格式是二進制格式,但您可以使用TextFormat類來編寫類似JSON的純文本格式。 protobufs的好處在於版本代碼是爲您生成的。在您的文件格式的第2版中,您所要做的就是將字段添加到.proto定義文件。新版本可以讀取舊文件格式,並將新字段留空。這不是protobufs的設計目標,但是它爲自定義消息提供了一種簡單高效的二進制文件格式,並且爲您生成了代碼。

另請參閱Facebook的Thrift,現在在Apache孵化器中。

1

隨着歲月的流逝,我發現自己越來越青睞文本,除非它完全沒有問題。 CPU速度足夠快,我們可以足夠快地解碼它。

顯然,當你不得不經常更新一個大文件中的小塊信息時,這不是一個選項 - 但很可能描述了一個數據庫。

在這一點上需要一種不尋常的情況,讓我去選擇除了這兩種選擇之外的東西。

1

用於XML的+1。有一點點開銷,但易於解析,讀取和調試。如果你使用模式,可以是嚴格的。易於使用XSLT進行轉換,並且非常便於攜帶(在電線中或僅在潛入式驅動器中:)

1

這實際上取決於特定情況。您需要考慮針對各種問題的答案:

  • 您需要存儲多少數據?你需要爲緊湊表示進行優化嗎?
  • 讀取/寫入的性能至關重要嗎?你需要優化磁盤訪問和低影響的序列化和反序列化嗎?
  • 你需要文件內的隨機訪問嗎?你需要優化數據結構以尋找數據嗎?
  • 這個數據是用於不同的系統,可能是不同的字符編碼?你需要優化可移植性嗎?

數據本身的性質會產生影響。這是一個扁平列表結構嗎?它是一棵樹嗎?這是一個循環圖嗎?記錄的寬度是固定還是可變?

一旦這些問題的答案已知,您可以在您的選項中進行選擇,儘可能保持簡單。通常流行的選項(XML,CSV,YAML)將適合您的目的。如果沒有,那麼你將不得不開發自己的格式和你自己的寫作和閱讀程序。

0

有這麼多的可能性,但最務實的必須是XML

  • 有幾乎每一個開發平臺,體面的XML庫
  • 大多數平臺允許對象圖形序列與一對夫婦行代碼,所以XML是無痛的實施
  • 大多數平臺在存儲器和/或數據流的讀者有一個,這樣你就可以處理真正的大文件,無需太多的內存使用情況
  • 大多數平臺提供的XSLT變壓,這樣你就可以移動FIL從一種格式轉換爲另ES,甚至從XML到非XML
  • 有索引擴展XML處理真正的大文件太
  • XML具有XSD的驗證格式嘗試讀取它
  • XML能夠前表示任何簡單或複雜的對象
  • 如果您擔心文件大小,只需壓縮最終的XML。這種技術在Microsoft Office等
  • XML使用仍是人類可讀
  • XML是一個通用的標準