Mysql
壓縮數據庫欄位中的 Base64 編碼圖像。表尺寸太大
數據庫資訊
- 數據庫類型 - Percona MySQL。
- 表引擎 - InnoDB。
我有一個數據庫表,目前使用 17GB,有 400,000 行。這個大小主要是因為我在每行中儲存了一個 40kb 的 base64 編碼圖像。我想知道是否有其他人遇到過同樣類型的問題,以及他們決定如何解決。我目前正在考慮的選項是:
- 方法 1將由行的唯一 ID 命名的每個圖像儲存在某種雲託管伺服器中。這將解決我的數據庫大小問題,但管理起來會很痛苦,因為圖像將位於不同的伺服器上。此外,將圖像推送到雲伺服器將比目前方法花費更長的時間。
- 方法 2在 mysql 數據庫級別上僅壓縮該列?(如果可能的話?我不確定,但我相信它仍在研究中。我認為這也會減慢插入和選擇語句的速度。)
- 方法 3在將 base64 發送到數據庫之前使用 LZString Compression 之類的方法壓縮它。(我確信這將需要在我的數據庫級別,例如將這些數據放入什麼欄位類型或需要字元集/編碼。可能可以將方法 2 和 3 組合在一起以獲得最大的節省?不確定這是否可行或如果可能的話)
如果有人能給我一些關於什麼是解決這個困境的最佳方法的資訊,或者如果有人在我真的很感激任何幫助/資訊之前遇到了這個問題。
提前致謝。
Base64 是一種用於通過網路可靠地傳輸數據的編碼。它通常會增加文件大小,因此我不希望以這種格式儲存文件。
BLOB
我要做的第一件事是將 Base64 解碼回原始文件並將其儲存為 BLOB 欄位。這可以將文件縮小三分之一。
表格設計
你說每行有一個 40kb 的圖像。為什麼它們都一樣大?如果某些行共享相同的圖像,那麼您可以將圖像放在它們自己的表中並從您的大表中引用它們。
限製文件大小
大多數允許您上傳頭像的網站都會限製圖像的文件大小/解析度。在不知道這些圖像的用途的情況下,也許您可以施加類似的限制。您甚至可以在他們上傳圖像時自動重新縮放圖像。
對不起,如果這些對你來說已經很明顯了。如果不了解圖像的背景,很難更具體。