簡體   English   中英

將base64編碼圖像存儲在數據庫中是否明智?

[英]Is it wise to store base64 encoded images inside a database?

我正在制作一個Android應用程序,它拍攝照片並將圖像(作為base64編碼的字符串)推送到PHP腳本,從這里我將在MySQL數據庫中存儲有關圖像的數據。

將圖像存儲在數據庫中是否明智(因為它作為base64字符串傳遞),將它轉換回圖像並將其存儲在文件系統上會更好嗎?

base64編碼的圖像需要占用太多的位置(比二進制等效值大約多33%)。

MySQL提供二進制格式(BLOB,MEDIUM_BLOB),使用它們。

或者,大多數人更喜歡在數據庫中存儲文件系統將更有效存儲的文件的密鑰,特別是如果它是一個大圖像。 這是我長期喜歡的解決方案。 我通常使用文件內容的SHA1哈希來形成文件的路徑,這樣我就沒有雙重存儲,如果我願意,可以很容易地從文件中檢索記錄(我使用三級文件樹,首先分別從前兩個字符和哈希的字符3和4制作兩個級別,以便我沒有太多目錄的直接子項)。 請注意,這是例如git存儲的邏輯。

將它們存儲在數據庫中的優點是,您可以更輕松地管理備份,尤其是只要您的項目很小。 數據庫將為您提供緩存,但您的服務器和客戶端也是如此,很難確定最快的優先級,差異不會很大(我想您不會進行太多的並發寫入)。

我已經完成了兩種方式,每當我回到代碼,我將二進制數據存儲在MySQL表中時,我總是將它切換到帶有MySQL表中指針的文件系統。

在性能方面,由於從MySQL服務器中提取多個大型BLOB會使其快速飽和,因此在進入FS時會更好。 通常它是一個你不想堵塞的管道。

您始終可以將base64_encode($image)保存在文件中,並僅將文件路徑存儲在數據庫中,然后使用fopen()獲取編碼圖像。

如果我沒有正確理解這個問題,我很抱歉。

我認為,“明智的”是非常主觀的。 我認為從“讓人們直接鏈接到我的圖像”的角度來看是明智的。 此外,它可能是有幫助的,如果你決定你需要更改目錄結構等..它可能會使你更容易(但這實際上取決於你開始編寫腳本的方式......)但除此之外......我無法想到這樣做有什么好處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM