我需要構建一個包含佔用98%行大小的大BLOB的表。但是,此BLOB只會暫時保留在該行中,並將移至其他位置,然後將BLOB列設置爲NULL。 MySQL可以重用這個空間,還是將它永遠作爲行的一部分?如果它不能被自動重用,有沒有另外一種方法(比如優化表)可以用來手動回收這個空間?如果沒有,我可能需要找到另一個解決方案來處理這些特定的數據。MySql用InnoDB回收blob空間
3
A
回答
1
聽起來像你一定會更好使用Redis或甚至只是將您的blob存儲在文件系統上。這實際上是我推薦的;將數據保存在文件上並將文件名放在表格上。在異步上傳到s3完成後,將其設置爲空。如果您正在使用經過優化處理大型對象的文件系統,則這總是比插入數據庫的速度更快。
blob的存儲方式不僅取決於數據的長度,還取決於您實際使用的mysql版本。刪除的行總是可以重用,並且當後續插入不重用空間時,可以使用優化表恢復它。但優化表將鎖定該表。所以你第二次放緩系統。
+0
我其實很喜歡將blob保存到我們的SAN的想法。爲了保持速度一致,我們將進程分成兩個線程 - 一個節省mysql數據,另一個節點將blob保存到文件系統(實際上是SAN)。因爲它們並行運行,所以它將所有內容完全保存到mysql中。然後我們有一個真空過程,將文件移動到S3並將新位置標記爲mysql審計記錄。似乎像魅力一樣工作,即使在我們的預期負載下測試之後。 – AlexGad
相關問題
- 1. MySQL回收磁盤空間,優化表
- 2. mysql:如何釋放空間(innodb)
- 3. Oracle 11:在將BLOB設置爲NULL後回收空間
- 4. LONG Blob innodb或MyISAM
- 5. CTAS與回收表空間
- 6. MongoDB磁盤空間回收
- 7. innodb節省存儲空間
- 8. MySQL的InnoDB的IBD文件空間使用率
- 9. 使用InnoDB引擎的MySQL表空間位置
- 10. 從MongoDB回收可用空間3.2
- 11. 真空不回收磁盤空間
- 12. 如何不回收InnoDB中的auto_increment ID
- 13. 在mysql中刪除數據庫之後回收磁盤空間
- 14. 的MySQL 5.6 Innodb的跑出來單表的表空間ID的
- 15. MySQL服務器崩潰,InnoDB超出表空間範圍
- 16. BLOB字段返回空JSON
- 17. Blob數據替換空間'+'
- 18. Mysql innodb參考完整性與空tablr
- 19. MYSQL MONTHNAME()函數返回Blob
- 20. MySQL的:DATE_ADD返回BLOB
- 21. MySQL的聯盟返回BLOB
- 22. MySQL收集結果無論空間
- 23. Windows會回收堆棧空間嗎?
- 24. 回收後大的空間在Oracle
- 25. 回收選項卡欄空間
- 26. cassandra斑點,墓碑和空間回收
- 27. 中止git add後回收空間?
- 28. 事務不回滾與MySQL/InnoDB
- 29. 回收站視圖中的視圖之間的空白空間
- 30. MySQL InnoDB CASCADE?
你可以將它存儲在MySQL之外,比方說Redis或其他鍵/值存儲? –
數據將通過成批的異步過程移出到其他存儲(S3)。初始寫入必須是用於事務處理的mysql。在交易過程中,我可以將其移動到另一個商店,如Redis(或持久消息隊列),但這個過程必須是一條快速路徑,所以我不願意添加其他移動部分。這就是爲什麼我一直關注BLOB移到S3時是否/如何回收空間的原因。如果絕對無法回收,那麼Redis可能會成爲下一個選擇,因爲它是我們架構的一部分。 – AlexGad