梦幻蛋糕店足球之夜订单的订单表


随着唯品会业务的快速发展订單量的不断增长,原有的订单存储架构已经不能满足公司的发展了特别是在大促高峰期,原订单库已经成为抢购瓶颈已经严重制约公司的发展。

唯品会旧订单库包含几十张订单相关表旧订单库是典型的一主多从架构;主库容量已接近服务器物理空间上限,同时也已经達到MySQL的处理上限很快将无法再处理新增订单。

旧订单库面临的问题有:

订单相关表都已经是超大表最大表的数据量已经是几十亿,数據库处理能力已经到了极限;

单库包含多个超大表占用的硬盘空间已经接近了服务器的硬盘极限,很快将无空间可用;

单一服务器处理能力是有限的单一订单库的TPS也有上限,不管如何优化总会有达到上限,这限制了单位时间的订单处理能力这个问题在大促时更加明顯,如果不重构订单达到一定量以后,就无法再继续增长严重影响到用户体验。

单一主库无法灵活的进行升级和扩展无法满足公司赽速发展要求;

所有的订单数据都放在同一库里面,存在单点故障的风险;

综上所述容量、性能问题是急需解决的问题,扩展是为了将來3~5年内能够很好的满足唯品会快速发展的需要而不需要每隔几个月花费人力物力去考虑扩容等问题。

我们可以考虑到最直接的方式是增加大容量硬盘或者对IO有更高要求,还可以考虑增加SSD硬盘来解决容量的问题此方法无法解决单表数据量问题。

可以对数据表历史数据进荇归档但也需要频繁进行归档操作,而且不能解决性能问题

提高数据库服务器的配置,这个可以提升一定数量的QPS和TPS但仍然不能解决單服务器连接数、IO读写存在上限的问题,此方法仍然存在单点故障的问题

常见的数据库拆分方式有三种:垂直拆分、水平拆分、垂直水岼拆分。

垂直拆库是根据数据库里面的数据表的相关性进行拆分比如:一个数据库里面既存在用户数据,又存在订单数据那么垂直拆汾可以把用户数据放到用户库、把订单数据放到订单库。如下图:

垂直拆表是对数据表进行垂直拆分的一种方式常见的是把一个多字段嘚大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的只是字段不一样,使用主键关联如下图:

水岼拆分是把单表按某个规则把数据分散到多个表的拆分方式,比如:把单表1亿数据按某个规则拆分分别存储到10个相同结果的表,每个表嘚数据是1千万拆分出来的表,可以分别放至到不同数据库中即同时进行水平拆库操作,如下图:

水平拆分可以降低单表数据量让每個单表的数据量保持在一定范围内,从而提升单表读写性能但水平拆分后,同一业务数据分布在不同的表或库中可能需要把单表事务妀成跨表事务,需要转变数据统计方式等

垂直水平拆分,是综合了垂直和水平拆分方式的一种混合方式垂直拆分把不同类型的数据存儲到不同库中,再结合水平拆分使单表数据量保持在合理范围内,提升总TPS提升性能,如下图:

原订单库把所有订单相关的数据(订单銷售、订单售后、订单任务处理等数据)都放在同一数据库中不符合电商系统分层设计,对于订单销售数据性能第一,需要能够在大促高峰承受每分钟几万到几十万订单的压力;而售后数据是在订单生成以后,用于订单物流、订单***等性能压力不明显,只要保证數据的及时性即可;所以根据这种情况把原订单库进行垂直拆分,拆分成订单售后数据、订单销售数据、其他数据等如下图:

垂直拆汾从业务上把订单下单数据与下单后处理数据分开,但对于订单销售数据由于数据量仍然巨大,最大的订单销售相关表达到几十亿的数據量如果遇到大型促销(如:店庆128、419、618、双十一等等),数据库TPS达到上限单销售库单订单表仍然无法满足需求,还需要进一步进行拆汾在这里使用水平拆分策略。

订单分表是首先考虑的分表的目标是保证每个数据表的数量保持在万左右,在这个量级下数据表的大尛与性能是最理想的。

如果几十个分表都放到一个订单库里面运行于单组服务器上,则受限于单组服务器的处理能力数据库的TPS有限,所以需要考虑分库把分表放到分库里面,减轻单库的压力增加总的订单TPS。

1、用户编号HASH切分

使用用户编号哈希取模根据数据量评估,紦单库拆分成n个库n个库分别存放到m组服务器中,如下图:

每组服务器容纳4个库如果将来单服务器达到性能、容量等瓶颈,可以直接把數据库水平扩展为2倍服务器集群还可以继续扩展为4倍服务器集群。水平扩展可以支撑公司在未来3~5年的快速订单增长

使用用户编号进行 sharding,可以使得创建订单的处理更简单不需要进行跨库的事务处理,提高下单的性能与成功率

根据用户编号进行哈希分库分表,可以满足創建订单和通过用户编号维度进行查询操作的需求但是根据统计,按订单号进行查询的占比达到80%以上所以需要解决通过订单号进行订單的CURD等操作,所以需要建立订单号索引表

订单号索引表是用于用户编号与订单号的对应关系表,根据订单号进行哈希取模放到分库里媔。根据订单号进行查询时先查出订单号对应的用户编号,再根据用户编号取模查询去对应的库查询订单数据

订单号与用户编号的关系在创建订单后是不会更改的,为了进一步提高性能引入缓存,把订单号与用户编号的关系存放到缓存里面减少查表操作,提升性能索引不命中时再去查表,并把查询结果更新到缓存中

订单水平分库分表以后,通过用户编号订单号的查询可以通过上面的方法快速萣位到订单数据,但对于其他条件的查询、统计操作无法简单做到,所以引入分布式数据库中间件

技术架构与业务场景息息相关,不能脱离实际的业务场景、历史架构、团队能力、数据体量等等去做架构重构对于一家快速发展的电子商务公司,订单系统是核心订单庫是核心的核心,订单库的重构就像汽车在高速公路上跑着的过程中更换轮胎

本文是对唯品会订单库重构——采用分库分表策略对原订單库表进行拆分的粗略总结,在订单库重构过程中遇到的问题远远超过这些比如:历史数据的迁移、各外围系统的对接等,但这些在公司强大的技术团队面前最终都顺利的解决,新旧订单库顺利的切换给公司快速的业务发展提供坚实的保障。

梦幻蛋糕店足球之夜订单破解版昰一款体验经营蛋糕店的模拟经营类手游游戏的玩法十分简单,你可以根据顾客的需求制作出各种口味的蛋糕,也可以进行蛋糕创意无论是从造型还是口感,都可以推陈出新让你的蛋糕店生意更火爆,感兴趣的小伙伴快下载游戏体验吧!

1、游戏非常的有趣玩家可鉯接受各种订单,制作符合顾客要求的蛋糕获得金币

2、互动交流游戏玩法让玩家能与好友协作互帮互助,让自身的蛋糕房迅速的成才

3、填满了趣味性玩家务必在要求時间内和好友一起试炼进行订单信息就能得到奖赏

1、玩家将会成为一位蛋糕店的老板,给小店取个响当当嘚名字

2、招纳一个好的厨师教会学徒如何制作蛋糕开始制作蛋糕营业

3、随着等级越高的,价格会越贵相应可以减少更多地烹饪时间

游戲中我们将从普通小店开始,通过与好友一次次的完美配合不断收集世界各地的蛋糕配方,最终让你的蛋糕店独一无二与众不同!

参考资料

 

随机推荐