像查詢關係型DB一樣查詢redis

關鍵字

  • 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,其最終依賴的技術實踐大同小異。

3、實現

在這裏插入圖片描述

條件1:select * from big_view order by create_time desc

條件2:select * from big_view where field = #{} order by create_time desc

條件3:select * from big_view where field0 = #{} and field1 = #{} order by create_time desc

條件4:select * from big_view where field0 = #{} and field1 = #{} order by create_time desc limit 0,10

4、效果

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