2013-07-06 55 views
0

我正在構建自己的Web電子郵件,並希望儘可能優化地存儲電子郵件附件。最佳的SQL電子郵件附件存儲數據類型?

以下是一般準則,我想實現...

1)這不是一個文件共享服務,它的電子郵件。

2.)我想確保合理大小的附件成功保存在數據庫中。

3.)我想最小化數據庫中使用的空間附件數量。

4.)我想使用中性SQL方法,以便將來從MySQL遷移到PostgreSQL時不會遇到問題。

5.)什麼是合理的限制?我正在考慮單個附件的16-25兆字節的上限。

AOL,Hotmail,Gmail,Yahoo和其他人似乎通常將附件編碼爲base64,一種文本類型。將附件作爲文本或二進制類型存儲是否更合適?

我很樂意作出任何話題上的澄清。

+1

爲什麼你不能將附件存儲在文件系統而不是db中?文件系統的兩個原因將減少數據庫膨脹,並且更容易搜索文件內容。 –

+0

對於文件系統來說,它具有安全性的全部或全無;通過數據庫,您可以使用PHP等腳本語言向預期的收件人說「是」,向其他人說「否」。 – John

+0

僅僅因爲附件在文件系統上,並不意味着它們必須暴露於互聯網。我不是一個PHP的人,但我相信你可以使用它(PHP)來爲存儲在文件系統上的附件提供只有合適的用戶。無論如何,這當然是您決定將數據存儲在適合您的地方。 –

回答

0

與Chue不同,我認爲將附件存儲在數據庫中是完全正確的。實際上,我也將我的文件存儲在數據庫中。由於我的所有應用程序都可以輕鬆訪問數據庫,因此我的所有應用程序都可以輕鬆訪問這些文件。但是你的問題是關於什麼數據類型。

只有少數的選擇。不幸的是,你的要求是相互衝突的。它基本上是一個二進制字段或文本字段。其中任何一種都可以擴展到您的要求的多倍。

爲了最大限度地減少空間使用量,您將需要使用二進制文件,因爲任何類型的文本編碼都會增加使用的空間。 MySQL的二進制數據類型是VARBINARY(最多65535字節)或BLOB(無限)。 Postgre的二進制類型是BYTEA。因此,您無法在兩臺服務器上使用相同的類型。但是,它可能是一個非常簡單的遷移腳本,可以在兩者之間進行轉換。

這兩個數據庫都支持VARCHAR這將支持您的要求。我會去二進制格式。

至於合理的限制,許多現有的服務提供10-20MB的附件。這對大多數人來說似乎很有效。您可能想考慮增加此限制,因爲越來越多的人開始通過手機發送有關高清視頻的電子郵件。