11

给定一组具有关联元数据的文件,存储此元数据的推荐方法是什么?

某些文件格式支持内部存储元数据(EXIF、ID3 等),但并非所有文件格式都支持这一点,那么还有哪些更通用的选项?

一些元数据几乎肯定是唯一的(标题/描述/等),而有些元数据会在不同程度上重复(类别/标签/等)。
如果需要不同类型的属性,对元数据进行分组也可能很有用。

理想情况下,解决方案应该涵盖概念,而不是特定的语言实现。

4

5 回答 5

5

将元数据存储在数据库中具有一些优势,但数据库的主要问题是元数据没有直接连接到您的数据。如果元数据与数据保持一致,例如目录中的特殊文件或类似的东西,它会更加健壮。

一些文件系统提供可用于元数据的特殊功能,例如NTFS 备用流。不幸的是,这只能在特殊情况下用于元数据存储,因为当将数据复制到不支持它的存储系统时,这些流很容易丢失。我相信linux文件系统也有类似的存储机制。

无论如何,最常见的解决方案是:

  • 包含元数据的单独隐藏文件(每个目录)
  • 一些应用程序使用带有元数据的特殊隐藏目录(如颠覆、cvs 等)。
  • 或所有应用程序特定元数据的数据库(各种) - 在大多数情况下,此数据库也可用于缓存目的

IMO 没有通用解决方案。我会选择将元数据存储在隐藏文件中(稳健性),并使用数据库进行快速访问和缓存。

于 2009-02-26T23:35:42.210 回答
2

我认为“解决方案”在很大程度上取决于您将如何处理元数据。

例如,我们存储的几乎所有元数据(科学数据的多个数据集)都被切碎并存储在数据库中。这允许我们创建数据集以保留文件之间的通用元数据(如您所说,类别和标签),同时我们具有文件特定的结构(标题、开始/停止时间、最小/最大值等)虽然我们可以将这些保留在隐藏文件,我们进行大量搜索,并通过网络服务向外部消费者开放我们的界面。

如果您要存储不会被搜索的元数据,隐藏文件或每个“真实”文件的专用 .xml 文件并不是一个糟糕的选择。它基本上可以被任何东西读取,可以轻松转换为不同的格式,并且如果您决定更改存储机制也不会丢失。

元数据应该帮助你,而不是阻碍你。我已经看到(并且是其中的一部分)元数据存储变得比存储实际数据更繁重的系统,并成为一种负担。只要记住你想用它做什么,不要用“假设”来过度扩展自己。

于 2010-05-20T16:39:27.350 回答
2

一种选择可能是关系数据库,其结构如下:

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

此实现具有一些独特的信息(标题/描述),但主要针对重复的数据组。

对于某些要求,其他不太通用的表可能更有用。


这样做的好处是关系数据库非常普遍,并且显然非常擅长处理关系和存储大量数据。

但是,对于某些用途,数据库服务器会带来可能不希望出现的开销。此外,数据库服务器与文件不同——它们不会坐在一起,并且需要不同的交互方法。

数据库不会(轻易地)处于版本控制之下——这可能是好事也可能是坏事,这取决于您的观点和特定需求。

于 2009-02-07T18:28:23.410 回答
1

纯文本比其他任何东西都有一些明显的优势。就像是

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

Picasa 的 Picasa.ini 文件就是这种元数据的一个很好的例子。此外,与其发明自己的格式,不如考虑使用 XML。有很多现成的 DOM 处理器可以处理这种格式。

再说一次,如果文件的数量和它们之间的关系很大,那么数据库可能会更好。

于 2009-02-08T16:39:32.087 回答
0

我基本上会制作一个包含这些信息的元数据数据库:

RESOURCE_TABLE
RESOURCE_ID
RESOURCE_TYPE(文件夹、文档类型、Web 链接、其他)
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 和其他将描述和分组您的内容的值。

然后,您可以为所有者、利益相关者和其他组织信息等添加表格。

于 2015-01-20T09:01:47.367 回答