首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

秒杀数据高并发,除了分库分表还能分什么?

欢迎订阅小臣的公众号:小臣醉,亦可赏玩同名小程序:小臣醉。

在互联网电商系统中,海量数据存储与高并发处理,就是前后对着胸口和后背的利刃。绕不开的就得面对。

应对海量数据库表的快速访问,分库分表策略已然是大家耳熟目染了。而对于数据层面(暂不考虑借助内存数据库、缓存层)高并发的处理,还有不一样的思路否?

借用X米手机秒杀活动,场景强行代入,尝试分析秒杀单品数据存储设计:

一般情况,在商品基表下都关联SKU明细表,其中一个字段存储了库存数,活动商品可能是商品库中的某SPU。不过,和其他商品共用表,数量大而不利于秒杀活动商品的快速查找。

假设活动商品名(product_name):X米手机,库存数量(store_count)有n个。

为解决活动单品的并发访问快速读写压力:

将活动商品单独建表存放,并根据库存数量拆分该商品为对应数量的数据行。

拆分前:

问题:

对于高并发下单扣减库存,每个用户请求都需要对此商品库存进行更新操作。由于innodb存储引擎存在行锁,此时就会出现大量请求作用在同一条数据行上。不同请求线程对行锁的竞争,也就造成大部分线程的等待,邮储出现读写性能瓶颈,连接数可能就此被占满。

拆分后:

很大程度上解决行锁集中竞争问题。用户请求可以操作哪条记录,则可以灵活控制了。可以随机,也可以用取摸方式分配数据行,比如user_id mod(store_count),就可以把用户划分不同区间,去竞争对应数据行锁(抢到则可成功下单,否则就当失败),并发读写压力骤减、可控。

大体思路下,细节可优化。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180419G1MHA100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券