转账功能的设计 - 存储层

本文探讨了在高订单量场景下,如何通过分库分表策略优化存储设计。指出按照年月分库分表可能导致性能和扩展性问题,并提出按照天分表以及使用订单号部分作为分库依据的解决方案。同时,为解决扩容和故障处理,建议使用订单分组映射到数据库集群,确保系统的高可用性和扩展性。
摘要由CSDN通过智能技术生成

试想一下,一个巨大的订单量给你。要从中获取到某个订单,要如何操作呢?

首先便是分库分表,我们可以把一个大的数据集划分为小的数据集,这样根据不同订单的信息,可以从不同数据库不同表中获取。避免向单个数据库或单张表的请求量过大,容易崩溃。

那么分库分表的依据是什么呢?

首先容易想到的就是从时间上来分。我们可以按照年月来分。比如说按年分库,按月分表。由于订单会带有时间信息,这样我们根据时间信息,就可以马上知道这个订单在哪个库和哪张表了。

但是想想这样有什么不好的呢?

首先就是性能上。容易想到,一个系统关于订单的操作肯定是时间越新的需求性越高,而且增长的订单一般都是加入到确定的一张表上。这样很容易带来性能问题,可想而之,第一个月的第一天和最后一天的查询性能必然差异巨大(在订单量多的情况下)。

第二个就是扩展性的问题。由于按照年月固定的分库分表的方式,导致其无法平行扩容。数据没有做到冷热分离,系统对热数据的需求相对集中,而这部分数据库的压力较大,剩下部分的数据库压力较小。

所以按照年月分表的方式,对于需求量大的数据存储来说不太合适。

针对以上问题,我们容易想到我们需要一种方式负载均衡,它需要对所有的数据库的需求从理论上来说应该是相同的。

我们可以按照什么来分表呢?

首先可以按照天来分表,相比于年月,以天来分显然更方便。一般来说,30天前的数据访问量会很小,而且一般订单的状态不会做修改。我们可以使用主从同步,热数据在主数据库,冷数据在从数据库(主要提供查询)。另外我们也需要选取订单号的某些固定部分来作为分库分表的依据。

另外ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值