营销系统:商品名称模糊搜索参与的活动

最近开发遇到一个值得讨论的问题,总结如下,可发表下具体的看法,一起学习进步。

背景

规则1:活动服务(简称MBC)中活动表(简称promotion)大致信息如下:ID、商品ID、参与活动的数量、其他信息,如下表所示

属性意义
id主键
good_id商品唯一ID
exchange_num参与活动的数量
……

规则2:商品服务(简称SSC)提供商品的基本的信息表(简称item)如下:

属性意义
id商品主键,对应MBC表good_id
good_name商品名称
total_num库存
……

规则3:SSC中的商品名称可编辑

需求:MBC以商品名称(good_name)进行模糊查询,返回以分页显示的积分活动列表(包括good_name、exchange_num)

思考

以商品名称进行搜索,直观的想法有两种

  • good_name冗余到promotion表中,若业务不允许修改正在参与活动的商品名称这样做比较合适,若业务允许修改,SSC可做一些同步机制
  • 搜索时根据good_id关联item表,获取good_name,需要考虑接口性能

于是有了下面的方案,方案中的想法只做参考,具体选用哪一种需要根据业务场景

方案

1. 活动表冗余商品名称(promotion表中增加good_name字段),且不允许修改参与活动的商品的名称
这里写图片描述

做法:可以从promotion表直接分页查询,满足要求。SSC需要定制字段锁,保证该商品正在参与活动就不允许修改商品的名称,直至活动失效,便释放商品字段锁

优点:活动记录表冗余商品名称,查询不需要跨其他服务,性能高

缺点:活动期间,参与活动的商品不能编辑商品的名称,同时SSC需要维护字段锁

2. 活动表冗余商品名称(promotion表中增加good_name字段),允许修改参与活动的商品的名称
这里写图片描述

做法:可以从promotion表直接分页查询,满足要求。SSC中参与活动的商品一旦修改活动名称,需要把活动名称同步到promotion表中(如以MQ方式)

优点:活动记录表冗余商品名称,查询不需要跨其他服务,性能高,且可获取最新的商品名称

缺点:活动期间,参与活动的商品名称一旦修改,就需要同步给MBC,增加了系统复杂性

3. 活动表不冗余商品名称,允许修改参与活动的商品的名称

以下两种做法取决于具体的业务场景,若活动表量级小可采取做法一,若商品表量级小可采取做法二

这里写图片描述

做法一:以搜索商品名称为例,如”鸡腿“,首先从promotion表中查询出所有参与活动的good_id列表,然后用good_id列表和“鸡腿”关键字从商品服务中查出pagesize条,返回。

优点:商品和优惠券服务做额外功,可编辑商品名称

缺点:搜索性能很低,针对活动表量级小

这里写图片描述

做法二:以搜索商品名称为例,如”鸡腿“,首先从商品服务中查出所有匹配”鸡腿“的商品,并从中获取good_id列表,然后去活动记录表一一匹配,匹配出pagesize条,返回。

优点:商品和优惠券服务做额外功,可编辑商品名称

缺点:搜索性能很低,针对商品表量级小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bboyzqh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值