存储与单个文件关联的元数据的方法?

Pet*_*ton 7 language-agnostic metadata file

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

某些文件格式支持在内部存储元数据(EXIF,ID3等),但并非所有文件格式都支持此功能,那么更常见的选项是什么?

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

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

Jir*_*iri 6

将元数据存储在数据库中有一些优点,但数据库的主要问题是元数据不直接连接到您的数据。如果元数据与数据一起存在,比如目录中的特殊文件或类似的东西,它会更健壮。

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

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

  • 保存元数据的单独隐藏文件(每个目录)
  • 某些应用程序使用特殊的隐藏目录(如 subversion、cvs 等)。
  • 或用于所有应用程序特定元数据的数据库(各种类型) - 在大多数情况下,该数据库也可用于缓存目的

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


Pet*_*ton 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
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

数据库不会(轻易地)接受版本控制——这可能是好事也可能是坏事,具体取决于您的观点和具体需求。