为什么数据量越大数据库就越慢?你得理解这里面的根本原因。
无论增删改查哪个操作,其实都是查找的问题。因为都得先找到数据,才能对数据做操作。
无论什么样的存储系统,一次查询的时间,都取决于两个因素:
查找的时间复杂度又取决于两个因素:
在业务系统中,用的都是现成的数据库,存储数据的数据结构核算法都不能改变,只能改变数据总量了。
**所以,解决海量数据存储系统慢的问题,思想非常简单,就是”拆“,把一大坨数据拆分成N小托,学名叫做”分片“。**拆开之后,每个分片里的数据就没那么多了,然后让查找尽量落在某一个分片上,这样来提升查找性能。
所有分布式存储系统解决海量数据查找问题都是遵循的这个思想,但是光有思想还不够,还需要落地,下面我们就来说如何拆分数据的问题。
当单表的订单数据太多,多到影响性能的时候,首选的方案是,归档历史订单。
所谓归档,其实也是一种拆分数据的策略。简单地说,就是把大量的历史订单移到另外一张历史订单表中。为什么这么做呢?因为像订单这类具有时间属性的数据,都存在热尾效应。大多数情况下访问的都是最近的数据,但订单表里面大量的数据都是不怎么常用的老数据。
因为新数据只占数据总量中很少的一部分,所以把新老数据分开之后,新数据的数据量就会少很多,查询速度也就会快很多。老数据虽然和之前比起来没少多少,查询速度提升不明显,但是,因为老数据访很少会被访问到,所以慢一点儿也问题不大。
这样拆分的另外一个好处是:**拆分订单时,需要改动的代码非常少。**大部分对订单表的操作都是在订单完成之前,这些业务逻辑完全不需要修改的。即使像退货这类订单完成后的操作,也是有时限的,完去不需要修改。