MySQL在Data Warehouse應用的一些指引
許多項目在上線的時候,其實並沒有充分想好數據的處理和分析,如果項目進展很快,數據量爆炸式增長,基於原有的數據做分析,往往會出現一些問題,所以在項目上線之前,就考慮好數據的記錄和分析是有必要的,並不是要求每個業務,都單獨搭建自己的一個統計庫/分析平台,但你需要有所準備。
如下是一些OLAP的大的原則和方向,
1、MySQL實例控制在幾個2個T以內,是DBA們比較贊同的策略,OLAP資料庫可以大到幾個T,但是備份之類的操作很耗時,percona工具之xtrabackup可以比較好的備份大資料庫;
2、對於數據分析,應該盡量避免重複計算,對於報表之類的應用,最好定期生成統計表,基於統計表,可以快速的查看統計數據,而不需要從原始數據表裡去掃描統計大量數據;
3、對於舊數據的歸檔/清理,需要考慮,理論上來說,如果你的設計比較完善,絕大部分時候,你已經不需要原始數據了,保留統計表數據即可,你可以定期把原始數據清理掉。 原始數據也可以以其他的方式,比如日誌的方式,存儲在其他介質;
4、為了節省空間,我們可能會設計一些代碼/映射表,通過在一些大表中僅僅存儲代碼/數字的方式,我們可以大大減少存儲的空間,對於oltp業務,我覺得沒有必要這樣做,程序/數據的可讀性,自然會更重要,但對於OLAP資料庫,這樣真的可能節省大量磁碟空間;
5、索引的濫用可能會是一個問題,如果你擁有大量的數據,索引帶來的大量隨機讀其實效率很低,也延緩了數據插入的速率。你需要仔細檢查,確保僅僅創建需要的索引;
6、使用LOAD DATA 的方式載入數據很快,值的優先考慮,你也可以使用批量insert的方式,one by one的導入大量數據的方式太過低效,不可取。 當然使用insert批量插入數據也沒有必要一次性插入太多記錄,100~1000記錄每個語句一般是可以接受的;
7、如何避免導入數據對於線上業務的影響需要考慮,你可能需要中間表,你可能需要額外的從庫;
8、對於超大規模的海量數據,單個節點可能難以容納和處理,使用分區表某種程度上可以加快一些分析/查找,但仍然受限制於單個節點,在單個節點已經無法處理海量數據的時候,你應該考慮sharding的策略。
推薦閱讀:
※在SQL中,如何查詢某一欄位中最大值的數據?
※為什麼 PostgreSQL 沒有 MySQL 流行呢?
※全棧 - 11 資料庫 MySQL使用方法
※SQL Server 與 MySQL 性能相差多大?
TAG:MySQL |