[英]MySQL - Base64 vs BLOB
為簡單起見,假設我正在開發像Instagram這樣的移動應用程序。 用戶可以從服務器下載圖像,並上傳自己的圖像。 目前,服務器將所有圖像(實際上只是小縮略圖)存儲在MySQL數據庫中作為BLOB。 似乎最常見的傳輸圖像的方法是使用Base64編碼,這讓我有兩個選擇:
顯然,選項#1需要在服務器上進行更多的處理,因為必須對每個請求對圖像進行編碼/解碼。 這使我傾向於選項#2,但一些研究表明,在MySQL中存儲Base64字符串的效率遠低於將圖像直接存儲為BLOB,並且通常不鼓勵使用。
我當然不是第一個遇到這種情況的人,那么有沒有人就這項工作的最佳方式提出建議?
JSON假定為utf8,因此與圖像不兼容,除非它們以某種方式編碼。
Base64幾乎是二進制(BLOB)的8/6倍。 人們可以說它很容易負擔得起。 3000 bytes
變為大約4000 bytes
。
每個人都應該能夠接受任意8位代碼,但不是每個人都能接受。 Base-64可能是最簡單和最全面的妥協,無需處理8位數據。
由於這些是“小”,我會將它們存儲在表中,而不是文件中。 但是,我會將它們存儲在一個單獨的表中,並在需要時通過適當的id
JOIN
。 這允許不需要圖像的查詢運行得更快,因為它們沒有跨越BLOB。
從技術上講, TEXT CHARACTER SET ascii COLLATE ascii_bin
會這樣做,但BLOB
更清楚地表明列中沒有任何可用的文本。
為什么要對線上的圖像進行64位編碼? 我認為你是從一個錯誤的假設開始的。
我不明白為什么數據庫服務器不應該總是以它的本機形式保存二進制數據。 因此,使用BLOB。 (但即使您確實將數據存儲在Base64字符串中,也不必擔心編碼/解碼性能,因為IO的影響會更大。)
我不明白為什么客戶端應該在base64中發送數據。 為什么不使用簡單的HTTP調用“流”它呢?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.