DRDS異構索引測試
一、 概述
對於DRDS的數據庫的分表,查詢時SQL中的where條件盡量會帶上分庫分表鍵,這樣DRDS會將這個查詢路由到具體的分庫中,以提高查詢效率。如果SQL的where條件中沒有分庫分表鍵,DRDS會進行一次全表掃描。針對這種場景,DRDS提供了異構索引來解決這個問題。異構索引會將源表數據實時同步到按照不同字段分庫分表的目標表中,以達到使用不同的分庫分表鍵查詢數據都不會走全表掃描的目的。
典型的異構索引應用場景是電商網站的訂單表,在DRDS中創建結構相同分表鍵不同的兩張表,分別按照買家ID和賣家ID來分庫分表,底層將數據實時的從源表同步到目標表,不同用戶登錄查詢時去對應表中查找,避免全表掃描。
本文檔將對DRDS的異構索引功能進行創建及測試。
二、 創建異構索引
目前公有雲中的異構索引處於內測階段,隻能通過提交工單,由後台人員協助完成創建的方式來使用。需要先在DRDS中建好源表和目標表。本次測試模擬合同信息表來進行測試,對合同表分別創建按照甲方和乙方兩個字段分庫分表的兩張表,contracts_a為源表,contracts_b為目標表。
2.1. 在DRDS中創建源表
CREATE TABLE `contracts_a` ( `cid` int(11) NOT NULL DEFAULT '0', `party_a` varchar(50) DEFAULT NULL, `party_b` varchar(50) DEFAULT NULL, PRIMARY KEY (`cid`), KEY `auto_shard_key_party_a` (`party_a`), KEY `idx_a` (`party_a`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`party_a`) tbpartition by hash(`party_a`) tbpartitions 2; |
2.2. 在DRDS中創建目標表
CREATE TABLE `contracts_b` ( `cid` int(11) NOT NULL DEFAULT '0', `party_a` varchar(50) DEFAULT NULL, `party_b` varchar(50) DEFAULT NULL, PRIMARY KEY (`cid`), KEY `auto_shard_key_party_b` (`party_b`), KEY `idx_b` (`party_b`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(`party_b`) tbpartition by hash(`party_b`) tbpartitions 2; |
2.3. 提交工單創建異構索引
阿裏雲控製台—工單—提交工單—DRDS—在描述中寫明源表和目標表,要求開通異構索引即可。
三、異構索引功能測試
1. 查看兩表數據量
2. 在源表插入數據,查看目標表同步情況
3. 在兩表中分別查看不重複的甲方值(contracts_a表是按照甲方party_a分庫分表,因此contracts_a表查詢效率更快)
4. 在兩表中分別查看不重複的乙方值(contracts_b表是按照乙方party_b分庫分表,因此contracts_b表查詢效率更快)
5. 在兩表分別查詢某甲方的記錄數
6. 在兩表分別查詢某乙方的記錄數
四、結論
如以上測試結果,異構索引會自動將源表數據同步到目標表,並通過提供多種分表鍵來避免全表掃描,以加快查詢速度。
最後更新:2017-09-18 23:32:40