2012-11-11 126 views
0

我試圖存儲什麼本質上是日誌數據在MySQL中 - 潛在大量的數據在未壓縮的形式(25GB +月)。mySQL存儲數據以壓縮格式

每行只包含兩列,一個日期時間列作爲主鍵,以及一個包含8k到16k之間未壓縮數據的data列。

我試圖使用innoDB的ROW_FORMAT=compressed,但它似乎沒有任何實際的影響數據庫的大小。使用我的示例數據,其0.53GB不使用壓縮行格式,但仍使用壓縮行格式0.53GB。

我檢查存儲的數據的大小,用下面的查詢(其在測試數據庫,所以我的測試表將永遠是「最大」):

SELECT CONCAT(table_schema, '.', table_name), 
     CONCAT(ROUND(table_rows/1000000, 2), 'M')         rows, 
     CONCAT(ROUND(data_length/(1024 * 1024 * 1024), 2), 'G')     DATA, 
     CONCAT(ROUND(index_length/(1024 * 1024 * 1024), 2), 'G')     idx, 
     CONCAT(ROUND((data_length + index_length)/(1024 * 1024 * 1024), 2), 'G') total_size, 
     ROUND(index_length/data_length, 2)           idxfrac 
FROM information_schema.TABLES 
ORDER BY data_length + index_length DESC 
LIMIT 10; 
+0

您是否嘗試過通過查看mysqld服務器的文件系統所佔用的磁盤空間測量消耗?請記住,磁盤空間是迄今爲止服務器中最便宜的資產。 –

回答

1

ARCHIVE存儲引擎可以做你想要什麼。這是一個特殊的引擎,以壓縮的平面文件格式存儲行。最好是一次寫入不常使用,因爲它沒有編入索引。但它非常快速且非常節省空間。

http://dev.mysql.com/doc/refman/5.5/en/archive-storage-engine.html

+0

歸檔存儲引擎不允許使用任何索引 - 甚至不允許使用主鍵。這些數據需要定期訪問,並不適合存檔表。這個表格直到大約15M行時纔會是穩定的大小 - 並且任何類型的常規選擇都會很殘酷 – Will

+0

正確,如果您需要隨機訪問數據,則ARCHIVE無用。 –