2009-02-07 64 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以及其他将描述和分组您的内容的值。

然后,你可以添加表所有者,利益相关者和其他组织的信息等