38 | 电商系统表设计优化案例分析
该思维导图由 AI 生成,仅供参考
核心业务
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了电商系统中表设计优化的重要性,并从核心业务和业务难点两个方面详细介绍了电商系统中的表结构设计优化。文章首先介绍了电商系统的核心业务,包括商品模块、购物车模块、订单模块、库存模块和促销活动模块。随后,针对订单表海量数据和抢购业务的性能瓶颈,提出了分表分库、缓存和分布式锁等优化方案。对于促销活动中的抢购场景,也提出了使用缓存和分布式锁来查询、更新优惠券和红包的数量的解决方案。最后,总结了在设计表时应考虑使用键值对、缓存代替数据库操作、水平分表或分库以及避免复杂的JOIN查询操作等要点。整体而言,本文通过具体的业务案例,深入浅出地介绍了电商系统中表设计的优化方法,对于需要了解电商系统表设计优化的读者来说,是一篇非常有价值的文章。
《Java 性能调优实战》,新⼈⾸单¥59
全部留言(22)
- 最新
- 精选
- -W.LI-外键关联,对表数据操作时,一锁锁好几张表。删除时还要做校验。影响性能
作者回复: 对的
2019-08-1751 - 张德老师好 请教一个问题 以前阿里面试官就问过这么一个问题 比如在订单表中缓存了商品的名称 后来这个商品改了名字了 那我原先在订单表中的字段应该怎么处理 或者是类似的订单表中缓存的字段名称发生了改变 希望老师可以解答 谢谢
作者回复: 订单表冗余了商品的名称,如果修改了商品名称,我们一般不会再去修改订单中的冗余数据了。 商品是有唯一标识的,商品的具体名称的修改,其实是不会影响到用户的体验,如果商品名称修改比较大,会影响到用户体验了,这个时候我们建议下架商品,上架一个新的商品。
2019-09-01334 - 小橙橙老师,文中说的“通过大数据查询订单信息”这部分,能不能深入讲一下大数据实现的方案
作者回复: 收到
2019-08-2039 - td901105比较好的方式是通过一个公共表字段来存储一些具有共性的字段,创建单独的商品类型表,例如手机商品一个表、服饰商品一个表。 老师您好,请问一下这里说的是只有商品类型表还是存在一个所有的商品的表,但是只存放通用字段,比如类型、库存、价格等?
作者回复: 对的,不通用的这些字段可以拼成json存在一个字段中,冗余在键值对数据库,也可以作为查询字段使用。
2020-05-284 - better老师,以订单表为例,怎么简单理解什么叫水平分表,什么叫垂直分表呢
作者回复: 以订单的某个列作为hash,通过hash求余或一致性哈希算法来分表,例如 数据A和数据B,水平分表后就会放到两张表中; 垂直分表则是将一张表的一些列分开到另外一张表中,例如,订单表有 订单号、付款金额、付款时间等,如果将付款金额和付款时间单独为另外一张表,这种情况就是垂直分表。
2019-09-114 - 许童童外键对数据库性能有影响,比如保持数据的一致性,所以我们在程序层面保证数据的一致性,这样数据库的性能就会好很多。
作者回复: 对的,用逻辑关联来保证各个表数据的一致性。
2019-08-173 - 老杨同志使用外键,在手工处理数据时特别麻烦。update数据要求先后顺序。程序在更新数据时多了外键约束检查也影响性能
作者回复: 是的,即麻烦又影响性能。
2019-08-173 - 灿烂明天老师,你好,那逻辑上实现表的关联,具体怎么做才好呢?举个例子吧,谢谢
作者回复: 例如,订单表和详细订单表中,如果是物理关联的情况下,是以订单表的ID关联详细订单表外键orderID。 在逻辑上关联的意思就是,在没有任何业务操作的情况下,详细订单表依然有orderID字段,只是我们不需要再物理关联订单表ID了。一旦有业务操作,我们记得在业务层将两张表的操作关联起来,例如,删除主订单,此时记得删除详细订单表。
2019-08-232 - 小笨蛋有两个疑问,第一:如果把订单表以用户id维度水平分表,商家要查看他们店的所有订单情况怎么办?第二:如果商品比较多,商品也需要分表的话,用户搜索商品怎么处理?商家的要看自己店的商品怎么办?
作者回复: 第一个疑问,商家的订单表可用冗余数据来实现,商家查看的一套数据存放在键值对数据库;第二个问题,如果商品数据量比较大,我们可将商品存放在Elasticsearch、Solr。
2019-08-181 - 怀草诗老师好,请问如果一张表后期数据量会很大,那应该怎么设计呢?
作者回复: 分表,如果考虑到后期再分表带来的数据迁移问题,考虑基于一致性哈希算法进行分表
2020-04-22