每天1000万买卖交易数据,如何做查询优化
问题梳理
每天1000万的数据,每个月就有3亿多的数据,每年就可能有30-40亿的数据
里面有三个比较关键的问题:
1、存储,如何存储这些海量的数据
2、查询,如何提高查询效率?
3、并发,并发性能如何优化
解决
存储问题
1、分库分表
当数据量小的时候,交易表可以单独做为一张表,当随着数据量越来越大,单表的性能就会达到瓶颈,我们就可以进行分表。
比如说,按照月份进行分表,或者我们可以建10张到20张的表,根据用户ID进行取模预算,然后分表存储数据。
上面说的这种方案,随着时间的推移仍然会造成每个表出现海量的数据
在这个的基础上,可以增加分库处理。
我们可以同时新建10个交易库,每个交易库再按照每年12个月新建12张表。
存储数据的时候,先根据用户ID进行取模运算,将数据分布在不同的数据库,然后进入数据库后,再根据时间进行分布存储。
2、冷热数据分离
上面的方案,仍然会出现新的问题,如果每年都这么存储,数据量仍然会越来越大。这个时候就需要在业务上进行限制。
一方面通过调研判断用户常用的数据范围,另一方面引导用户减少历史数据的查询。
通过业务上的限制,将数据分为冷数据(用户查询非常少的数据)和热数据(用户高频查询的数据)
区分后,可以将冷数据放在存储能力更强的数据库中,如clickhouse这种,热数据存储在mysql,使用分库分表来优化。
然后通过调度任务,逐步将热点数据变冷进行存储
查询问题
解决了存储问题后,还可能会有查询问题,比如说如果遇到需要查询冷数据,而且需要涉及到复杂的搜索的时候,查询性能就会比较差。
这个情况可以通过引入新的中间件,比如说ES数据库,专门为高性能查询搜索而生。
高并发
如果某些高频的情况,查询的量非常高,可以通过将数据预热到Redis中进行进一步的优化