Pet*_*ton 7 language-agnostic metadata file
给定一组具有关联元数据的文件,存储此元数据的推荐方法是什么?
某些文件格式支持在内部存储元数据(EXIF,ID3等),但并非所有文件格式都支持此功能,那么更常见的选项是什么?
一些元数据几乎肯定是唯一的(标题/描述/等),而一些元数据会在不同程度上重复(类别/标签/等).
如果需要不同类型的属性,则对元数据进行分组也可能是有用的.
理想情况下,解决方案应涵盖概念,而不是特定的语言实现.
将元数据存储在数据库中有一些优点,但数据库的主要问题是元数据不直接连接到您的数据。如果元数据与数据一起存在,比如目录中的特殊文件或类似的东西,它会更健壮。
某些文件系统提供可用于元数据(如NTFS 备用流)的特殊功能。不幸的是,这只能在特殊情况下用于元数据存储,因为当将数据复制到不支持它的存储系统时,这些流很容易丢失。我相信linux文件系统也有类似的存储机制。
无论如何,最常见的解决方案是:
IMO 没有通用的解决方案。我会选择将元数据存储在隐藏文件中(稳健性),并使用数据库进行快速访问和缓存。
一种选择可能是关系数据库,其结构如下:
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)
此实现具有一些独特的信息(标题/描述),但主要针对重复的数据组。
对于某些要求,其他不太通用的表可能更有用。
这样做的优点是关系数据库非常常见,并且显然非常擅长处理关系和存储大量数据。
然而,对于某些用途,数据库服务器会带来可能不希望的开销。此外,数据库服务器与文件不同 - 它们不坐在一起,并且需要不同的交互方法。
数据库不会(轻易地)接受版本控制——这可能是好事也可能是坏事,具体取决于您的观点和具体需求。