2012-03-06 34 views
0

我有幾個事務處理表,在MySQL中有一個邏輯放置的textblob列。經過一段時間後,這些數據列在X天以前的行上不需要。我需要儘可能保持存儲感知。這是在羣集中的多個節點上,這些節點具有有限的本地和NFS存儲,因此將它們保存爲不可用的文件。更新到MySQL期間MySQL中的BLOB數據管理?

兩個顯而易見的解決方案,這是確保釋放BLOB表中存儲的更好(如果有的話)的方式:

  1. 在某些日程,更新日期的格式< X天前設置文本和BLOB列中的所有行爲空。這是否真的釋放了「隱藏」表中的blob數據存儲?
  2. 將這些斑點保留在單獨的表格中,然後從X日前<表格中刪除。

保持良好的模式形式,我不希望每個事務表有一個blob-table作爲保持事務密鑰獨立,並且我不想在一個關聯/智能/複合鍵在一個單個blob表。

什麼機制最適合時間blob存儲在MySQL中?

回答

1

我假設你的數據庫中有InnoDB或NDB存儲引擎。在這種情況下,默認情況下,在更新/刪除行或表(包括BLOB列)之後,您將永不放棄磁盤空間。

只有解決問題的方法。設置

innodb_file_per_table=1 

my.cnf,你將有每個表單獨的文件。然後,第二種方式(不需要時刪除表)將恢復存儲空間。

+0

良好的信息,並忘記在innodb。 isam表在刪除時會重複使用存儲,是的?我可以使用帶有刪除的isam子表來恢復空間(這些表中內嵌了斑點?)。寫入量低,所以表鎖定不應該是一個問題。 – Xailor 2012-03-06 16:49:09

+0

爲了重新使用MyISAM存儲,運行'OPTIMIZE TABLE table1,table2 ...'當然,這些表將一直處於鎖定狀態。 – Ali 2012-03-06 19:18:14

+0

但是在MyISAM(我正在考慮用於這個單獨的blob表),無論表鎖定,新插入最終將填充舊的刪除記錄? – Xailor 2012-03-17 17:54:22