请教商品价格排序的性能问题

122 天前
 dyv9

最近碰到一个业务排序要求,多家供应商提供相似的商品 但可能折扣不一样,折扣也至少有 2 种,一个是当前供应商的通用折扣作用于它的所有商品,还有另一种比如不同重量区间(重量越大折扣越少,甚至加价)设置不同的折扣,比如商品重量在 20 - 30 重量单位的 9 折,40 - 50 重量单位之间的 95 折,300 以上的 重量单位的可能是加价 15%。

现在搜索时符合条件的数据要按折后价排序后分页显示。

这个查询本身还有 7 ,8 个 过滤条件可选,比如颜色,形状等。 商品不会频繁修改,可以多加些索引。老板还说客户可以不输入任何限制条件。商品的规模 暂时估计 总共 1 千万,一个供应商的商品估计不超过 50 万。

因为要实时计算价格再排序的话,会影响性能,那个重量范围还要联表查询得到区间折扣率,所有数据 MySQL 要立即先计算一次才能比较价格,换个思路,如果事先把价格转换成折后价 避免查询时临时计算价格,如果供应商级别修改了折扣率,最多的可能有几十万个商品都要受影响,在后台换算成折后价的话,会有生效的延迟,全部更新完之前客户查询时排序结果就不正确。

大家说说,这个怎么处理比较好。

1972 次点击
所在节点    程序员
24 条回复
XxxxD
121 天前
不是很熟悉实际场景,个人想法是:
先全部产品原价排序,在这基础上,按除否有店铺折扣排序,有店铺折扣的往前(有店铺折扣肯定是更省钱的吧),再在这基础上,再次按照重量排序,如果全部供应商对于重量的折扣是差不多的,找出折扣为 0 的重量区间,低于这个重量的就是有减价,往前,高于这个重量的加价,分别把这两个重量区间放在第二次排序的前和后

不知道有没有说清楚
chenxiankong
121 天前
建议监听 binlog ,异构数据到 es
dyv9
120 天前
@chenxiankong es 擅长多栏位组合查询吗? 10 位过滤,多数是枚举值(多选),另有可选的 2 个范围查询(比如重量范围)。
dyv9
120 天前
@dyv9 12 个过滤条件

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1009851

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX