像查询关系型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个库,涉及几十张表的视图将不再能满足要求。用户抱怨会不断增加。

大视图查询耗时如下,一个字“慢”,两个字“蜗牛”。
像查询关系型DB一样查询redis_第1张图片

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、效果

你可能感兴趣的:(JAVA,MySQL基础知识,Redis)