數據庫歸檔的實現方案調研(一)

公司最近說是數據庫中數據量比較大,好多是15/16年的數據,基本不用,但是堆在數據庫又嚴重影響性能,想找個方法解決掉它。所以,這個任務就這麼放到了我的頭上。

一、 目前問題

業務系統的業務表的數據量很大,嚴重影響性能,需要進行優化。

二、 問題解決方案

按照目前問題,對症下藥,我們需要對數據進行歸檔。目前市面上有幾個解決該問題的方案,可選用一種或多種進行優化

三、 方案一

3.1 TokuDB

RDS推出了數據壓縮的支持,在TokuDB引擎的幫助下,RDS for MySQL能以低於五分之一的存儲開銷來支持用戶大數據需求,進一步降低用戶的數據存儲成本。TokuDB是一個支持事務的MySQL引擎,擁有出色的數據壓縮能力和極低的資源消耗。

3.2 爲什麼要壓縮數據

當一個數據庫的數據空間達到TB級別時運維難度是非常高的。尤其是數據遷移和備份操作,不僅耗時將會成倍增長,而且成功率會有很大下降。另外無論用戶是自建數據庫還是使用雲服務,增長迅速的存儲空間都會帶來巨大的開支。

3.3 使用須知

  1. TokuDB可以大幅度降低存儲使用量和IOPS開銷
  2. TokuDB支持在線DDL,添加/刪除列和索引不會引起阻塞
  3. TokuDB無法支持外鍵Foreign Key
  4. TokuDB不適用於大量讀取的場景

3.4 操作步驟

首先說明版本要求:5.6及以上,5.6親測可行

1、配置TokuDB引擎

select sum(data_length) into @all_size from information_schema.tables where engine='innodb'; 
select sum(data_length) into @change_size from information_schema.tables where engine='innodb' and concat(table_schema, '.', table_name) in ('dba1.tbl1', 'db2.tbl2', 'db3.tbl3'); 
select round(@change_size/@all_size*100);

參數配置:
登錄RDS控制檯,將loose_tokudb_buffer_pool_ratio設置爲上步計算得到百分比。該參數需要重啓數據庫才能生效。

2、 開啓壓縮

RDS已推出數據不停機遷移服務

ALTER TABLE XXX ENGINE=TokuDB 

3.5 優勢

1、高壓縮比,默認使用zlib進行壓縮,尤其是對字符串(varchar,text等)類型有非常高的壓縮比,比較適合存儲日誌、原始數據等。官方宣稱可以達到1:12。
2、在線添加索引,不影響讀寫操作
3、HCADER 特性,支持在線字段增加、刪除、擴展、重命名操作,(瞬間或秒級完成)
4、支持完整的ACID特性和事務機制
5、非常快的寫入性能, Fractal-tree在事務實現上有優勢,無undo log,官方稱至少比innodb高9倍。
6、支持show processlist 進度查看
7、數據量可以擴展到幾個TB;
8、不會產生索引碎片;
9、支持hot column addition,hot indexing,mvcc

3.6 缺點

1、不支持外鍵(foreign key)功能,如果您的表有外鍵,切換到 TokuDB引擎後,此約束將被忽略。
2、TokuDB 不適大量讀取的場景,因爲壓縮解壓縮的原因。CPU佔用會高2-3倍,但由於壓縮後空間小,IO開銷低,平均響應時間大概是2倍左右。
3、online ddl 對text,blob等類型的字段不適用
4、沒有完善的熱備工具,只能通過mysqldump進行邏輯備份

3.7 使用場景

1、訪問頻率不高的數據或歷史數據歸檔
2、數據表非常大並且時不時還需要進行DDL操作

接下來還要繼續調研一些新的適用方案,或許會有更優選擇或者可以一起使用的方案,我會將我調研到的新技術繼續更新的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章