Mysql
文件系統儲存(用於 blob、圖像等)如何與(傳統)數據庫儲存(例如 MySQL/Postgres)集成?
如果我將我的數據庫用於關係數據並選擇在文件系統中儲存大型二進制 blob,我該如何整合兩者?這個過程是如何工作的?
我知道數據庫需要儲存指向相應 blob 的目錄路徑/連結,但是有人可以請教我具體細節嗎?例如,我認為我應該有一些 shell 腳本首先對安全 /tmp 位置中的二進製文件執行病毒檢查,然後將其移動到實際儲存位置並更新 db 中的路徑。但要從作業系統執行此操作,將需要一個腳本來定期檢查目錄是否發生更改,然後觸發操作。是否可以從數據庫中執行 shell 腳本(我知道可以反過來)?
或者在 MySQL/Postgres 中是否有更好的工具來做這種事情(與文件系統儲存集成)?
“大”玩家甚至不會將圖像放在同一台機器上。相反,他們擁有全球分佈的“圖像伺服器”,並針對抽出只讀圖像進行了優化。在他們的情況下,分佈式處理的好處超過了偶爾的不一致(連結到不存在的圖像;反之亦然)。還有一些機器處理病毒檢查、縮放、剝離 EXIF 等。
MySQL 不能儲存大於 4GB 的 blob(是的,您可以(應該)對其進行分塊)。即使 16MB 也有一些問題(複製、調整等),您可能會遇到問題。
如果您對元數據進行了掃描,並且行中有大塊,則伺服器會花費大量時間來處理牛肉餅。“垂直分區”是避免此問題的一種方法。在一個實現中,我從主行中的縮略圖和 EXIF 數據開始。最終我發現了“cow patty”問題,並將這兩個 blob 放在一個並行表中。它跑得明顯更快。
無論哪種方式,我都實現了。擲硬幣決定做什麼。考慮您的決定六個月,然後考慮更改為其他機制。同時,設計您的程式碼,以便您可以輕鬆地進行更改。