關鍵字
- db,mysql
- 大視圖
- 效率
- 緩存,redis
1、背景
業務過程中可能會存在一種場景,即數據彙總自數個業務系統,每個業務系統會生產不同的業務數據,如下,4個業務系統A、B、C、D…:
各自會生產各類型的數據:
業務系統 | 任務類型數 |
---|---|
系統A | 6 |
系統B | 1 |
系統C | 2 |
系統D | 1 |
系統E | … |
系統F | … |
目前需要將10種類型數據彙總,常規的做法是弄張大視圖,這樣所有數據均彙總至視圖big_view,如下。
CREATE VIEW big_view AS
SELECT column_name(s)
FROM A
WHERE condition
UNION ALL B
UNION ALL C
UNION ALL D
UNION ALL E
UNION ALL F
UNION ALL G
UNION ALL H
UNION ALL I
UNION ALL J
UNION ALL K
UNION ALL L
UNION ALL M
若需要查詢各類型數據只需要select * from big_view即可。但引出了另外一個問題-性能,數據量少查詢效率慢不明顯,但隨着業務持續發展,數據量在不斷增加,這種跨7~8個庫,涉及幾十張表的視圖將不再能滿足要求。用戶抱怨會不斷增加。
大視圖查詢耗時如下,一個字“慢”,兩個字“蝸牛”。
2、方案
方案編號 | 方案主題 | 方案內容 |
---|---|---|
1 | 緩存 | 開發SDK,提供給各業務系統,實現增刪同步 |
2 | 緩存 | 定時同步視圖數據至緩存,定製控制刪除觸發 |
本文重點關注方案2。不論方案1、方案2,其最終依賴的技術實踐大同小異。