2012-10-18 56 views
0

我正在研究需要將EXIF元數據存儲在關係數據庫中的應用程序。將來我也想支持XMP和IPTC元數據,但目前我的工作重點放在EXIF上。用於在數據庫中存儲EXIF元數據的格式

有關Stack Overflow的幾個問題,這些問題涉及存儲EXIF元數據時表結構的外觀。但是,他們沒有一個真正解決我的問題。我遇到的問題是,不同的EXIF標籤具有不同格式的值,並且實際上沒有一種列方式可以方便地存儲它們。

最常見的類型是一個「有理性的」,它是一個代表一個小數的兩個四字節整數的數組。但也有非小數短和長整數,ASCII字符串,字節數組和「未定義」(8位類型,必須根據特定標記的先驗知識來解釋)。我想支持所有這些類型,我希望以一種方便,高效,無損(即無需將有理數轉換爲浮點數),可擴展和可搜索的方式來實現。

這裏是我到目前爲止認爲:

  • 我目前的解決方案是將一切作爲一個字符串。這使得存儲所有不同類型變得非常容易,而且便於搜索和調試。然而,這種方法笨重且效率低下,因爲當我想要實際使用這些數據時,我必須進行一些字符串操作來將有理數值轉換爲它們的小數部分,例如, fraction = float(value.split('/')[0])/float(value.split('/')[1])。 (在我的真實代碼中,這實際上並不是一團亂麻,但是這證明了這個問題。)

  • 我可以從文件中獲取每個值的原始EXIF字節並將它們存儲在blob列中,但那麼我必須每次重新解釋原始字節。這可能比字符串解決方案的CPU效率略高一些,但是從其他方面來看,情況要差得多 - 總體而言,這並不值得。

  • 我可以爲每個不同的EXIF數據類型有不同的表。使用this pattern我可以維護我的外鍵關係,同時將我的值存儲在幾個不同的表中。但是,這將使我最常見的查詢,即選擇給定照片的所有EXIF元數據,這是一種討厭。當我添加對其他元數據格式的支持時,它也會很快變得笨拙。

我不是一個數據庫專家的任何手段,所以有一些模式或魔術聯盟式的列類型我錯過了,可以使這個問題消失嗎?或者我堅持從上述三個選項中挑選我的毒藥?

+0

不,沒有魔法。 –

回答

0

這可能是一個非常便宜的解決方案,但我個人只是將json或類似的東西存儲在數據庫中。

有一種很酷的方式來提取EXIF數據並將其解析爲json。

這裏是鏈接:Img2JSON

我希望這種幫助你!

+0

感謝您的建議,但這不是一個可搜索的解決方案,所以與將整個JPEG的EXIF部分作爲blob轉儲到數據庫中相比,它沒有太多優勢。 –