数据库 初入后端,复杂条件检索和数据统计的数据库设计

katari · 2020年04月20日 · 最后由 teddyinfi 回复于 2020年04月23日 · 3696 次阅读

现在是要根据很多条件筛选课程,标签,类型,时间等一些组合条件来筛选商品,还要需要能根据热度来排序 像这种的需求数据库应该怎么弄啊,特别是热度的排序 现在是用的 sql 拼接,我觉得贼蠢 这种需求用外部索引会好弄一点吗

还有一个是统计,实时统计一些指标,要求能在秒级 比如每学生的每个月上课情况,还有各种不同的分类统计,比如每个老师的每个月统计,这些 现在是直接 where 然后 group count,然后数据库也有些顶不住了,天天爆炸(不炸就怪了😂

顺便说一下,我们用的是 mysql 感谢各位大大回复

学会提问

表太多,查询条件落进不同的表里,关联查询确实会难写。

多写写冗余字段或表,数据变化时顺带把结果算好了存起来,展示时就不用查那么多表了

OLTP 和 OLAP 的需求是不一样的,单独设计报表的库,做 ETL

Oltp 也有查询需求的,做冗余表算是一个方案

teddyinfi 回复

我去看一下,我这种确实是属于 OLAP 的范围

但是做 ETL,这一整套好麻烦啊

jetspeed 回复

是的,现在的情况是一个课程表 join 了 4 个以上的表用来筛选
mysql 不支持 array,所以必须得搞另外一个表,用 join 来查

katari 回复

需要外包么

hooopo 回复

外包就算了,公司不会答应,我也想多学点东西
不过很感谢

katari 回复

筛选的话可以用 es 搞,统计可以做个视图定期同步到一个 report 表,或者用触发器来同步。最好弄个 mysql 从库,把报表读分发到从库不要影响主库。

teddyinfi 回复

mysql 的触发器,好像不太好用,只能是在插入/更新/删除之后,更新另外一个表,这种的话我感觉效率也不太好
另外“视图定期同步”是什么?

另外问一下,是不是我的问题描述不好?

katari 回复

就是定期把生成的报表数据刷新到另外一个表里吧

需要 登录 后方可回复, 如果你还没有账号请 注册新账号