用于在数据库中存储EXIF元数据的格式

时间:2012-10-18 05:03:19

标签: database database-design metadata exif

我正在开发一个应用程序,我需要能够在关系数据库中存储EXIF元数据。在未来,我还想支持XMP和IPTC元数据,但目前我的重点是EXIF。

Stack Overflow上有一些关于存储EXIF元数据时表结构应该是什么样子的问题。但是,它们都没有真正解决我的担忧。我遇到的问题是不同的EXIF标签具有不同格式的值,并且实际上没有一种列类型可以方便地存储它们。

最常见的类型是“有理”,它是两个表示分数的四字节整数的数组。但也有非小数短整数和长整数,ASCII字符串,字节数组和“未定义”(8位类型,必须根据特定标签的先验知识进行解释。)我想支持所有这些类型,我希望以方便,高效,无损(即不将合理性转换为浮点数),可扩展和可搜索的方式这样做。

这是我到目前为止所考虑的内容:

  • 我目前的解决方案是将所有内容存储为字符串。这使得存储所有不同类型变得非常容易,并且还便于搜索和调试。然而,它有点笨重和低效,因为当我想要实际使用数据时,我必须做一堆字符串操作来将有理数值转换为它们的小数等价物,例如fraction = float(value.split('/')[0]) / float(value.split('/')[1])。 (在我的真实代码中,它实际上并不是一个混乱的单行,但这表明了问题。)

  • 我可以从文件中获取每个值的原始EXIF字节并将它们存储在blob列中,但之后我每次都必须重新解释原始字节。这可能比字符串解决方案略微提高CPU效率,但它在其他方面要差得多 - 总的来说,不值得。

  • 我可以为每种不同的EXIF数据类型设置不同的表。使用this pattern我可以在将我的值存储在几个不同的表中时保持我的外键关系。但是,这将使我最常见的查询,即为给定的照片选择所有EXIF元数据,有点讨厌。当我添加对其他元数据格式的支持时,它也会很快变得难以处理。

我无论如何都不是数据库专家,所以我缺少一些模式或魔法联合风格的列类型会让这个问题消失吗?或者我是不是从上面的三个选项中挑选了我的毒药?

1 个答案:

答案 0 :(得分:0)

这可能是一个非常便宜的解决方案,但我个人只是将json或类似内容存储在数据库中。

有一种很酷的方法可以提取EXIF数据并将其解析为json。

以下是链接:Img2JSON

我希望这对你有所帮助!