2009-02-07 32 views
6

給定一組將具有關聯元數據的文件,那麼存儲此元數據的推薦方法是什麼?一些文件格式支持在內部存儲元數據(EXIF,ID3等),但並非所有的文件格式都支持這種格式,那麼更普遍的選擇是什麼?存儲與單個文件關聯的元數據的方法?

某些元數據幾乎肯定是唯一的(標題/描述/等),而有些元數據會不同程度地重複(類別/標籤等)。
如果需要不同類型的屬性,對元數據進行分組也可能很有用。

理想情況下,解決方案應該涵蓋概念,而不是特定的語言實現。

回答

1

一種選擇可能是一個關係數據庫,結構是這樣的:

FILE 
f_id 
f_location 
f_title 
f_description 

ATTRIBUTE 
a_id 
a_label 

VALUE 
v_id 
v_label 

METADATA 
md_file 
md_attribute 
md_value 

此實現具有一些獨特的信息(標題/描述), 但在數據的重複羣體主要是針對性。

對於一些要求,其他較不通用的表可能更有用。


這有這是優勢關係型數據庫是很常見的, 顯然在處理人際關係和存儲大量的數據非常好。

但是,對於某些用途,數據庫服務器帶來的開銷可能並不理想。 另外,數據庫服務器與文件不同 - 它們不坐在一起,需要不同的交互方法。

數據庫不會(很容易)處於版本控制之下 - 這可能是好事還是壞事,取決於您的觀點和具體需求。

1

純文本比其他任何東西都有一些明顯的優勢。類似於

FileName = 'ferrari.gif' 
Title = 'My brand new car' 
Tags = 'cars', 'cool' 
Related = 'michaelknight.mp3' 

對於這類元數據,Picasa的Picasa.ini文件就是一個很好的示例。另外,不要發明自己的格式,而應該考慮XML。有很多現成的DOM處理器來處理這種格式。

然後,如果文件數量和它們之間的關係很大,數據庫可能會更好。

+0

[有沒有明文沒有這樣的事情(http://www.joelonsoftware.com/articles/Unicode.html )。實際上,我現在正在尋找一種將文本字符集編碼存儲爲文件元數據的方法。 – 2014-01-18 13:32:29

4

要在數據庫中存儲元數據有一些優點,但數據庫的主要問題是元數據不直接連接到您的數據。如果metada與數據保持一致,比如目錄中的特殊文件或類似的東西,它會更加健壯。

某些文件系統提供了可用於元數據的特殊功能 - 如NTFS Alternate streams。不幸的是,這隻能用於特殊情況下的元數據存儲,因爲在將數據複製到不支持它的存儲系統時,這些數據流很容易丟失。我相信linux文件系統也有類似的存儲機制。

無論如何,最常見的解決方案是:

  • 獨立的隱藏文件(S)(每個目錄)存儲元數據
  • 一些應用程序中使用特殊的隱藏目錄與元數據(如顛覆,CVS等等)。
  • 數據庫所有專用metada(各類) - 這個數據庫也可以用於高速緩存的目的在大多數情況下

IMO沒有通用的解決方案。我會選擇隱藏文件中的元數據存儲(健壯性),並使用數據庫進行快速訪問和緩存。

2

我認爲「解決方案」很大程度上取決於您將如何處理元數據。例如,我們存儲的幾乎所有元數據(科學數據的多個數據集)都被切碎並存儲在數據庫中。這使得我們可以創建數據集來保留文件之間的通用元數據(就像你說的,類別和標籤),同時我們有文件特定的結構(標題,開始/停止時間,最小值/最大值等)。雖然我們可以保持這些隱藏的文件,我們做了大量搜索,並通過Web服務向外部消費者開放我們的界面。

如果您存儲的是不會搜索的元數據,則隱藏文件或每個「真實」文件的專用.xml文件不是一個糟糕的路徑。它基本上可以讀取任何內容,可以輕鬆轉換爲不同的格式,並且在決定更改存儲機制時不會丟失。

元數據應該幫助你,而不是阻礙你。我已經看到(並已成爲其中的一部分)系統,其中元數據存儲比存儲實際數據變得更加繁重,併成爲一種負擔。只要記住你正在試圖用它做什麼,並且不要過度用「假設」來擴展自己。

0

我基本上會使得其持有此信息的元數據DB:

RESOURCE_TABLE
RESOURCE_ID
RESOURCE_TYPE(文件夾,文檔類型,網絡鏈接等)
RESOURCE_URL(任何URL)

NOTES_TABLE
NOTE_ID
RESOURCE_NO
RESOURCE_NOTE(長文本)

TAGS_TABLE
TAG_ID
RESOURCE_NO
TAG_TEXT

然後我會用備忘欄的文本註釋的文件/文件夾/資源。選擇是否使用1:1或1:N。

標籤字段我將用來存儲任何數量的可搜索參數,如YEAR,PROJECT以及其他將描述和分組您的內容的值。

然後,你可以添加表所有者,利益相關者和其他組織的信息等

相關問題