SaaS 电商设计 (八) 直接就能用的一套商品池完整的设计方案(建议收藏)

news2025/2/22 1:41:38

目录

  • 一.前言
    • 1.1 在哪些业务场景里使用
    • 1.2 一些名词搞懂他
    • 1.3 结合业务思考一下-业务or产品的意图
  • 二.方案设计
    • 2.1 业务主流程
    • 2.2 一步步带你分析B端如何配置
    • 2.3 数据流
      • 2.3.1 ES 数据表建设
      • 2.3.2 核心商品池流程
        • 2.3.2.1 商品池B端维护流程
        • 2.3.2.2 商品池版本更新逻辑
    • 2.4 核心代码设计
    • 2.5 附 DB 设计以及 Mapping设计
  • 三.总结

一.前言

1.1 在哪些业务场景里使用

一般在具体应用场景中常见的是,营销的一些活动投放以及面向 C 端平台首页.店铺首页的展示的类目下的商品.具体的场景如下:

场景1:解决 C 端应用(App,小程序)营销活动投放.如下某东的首页营销活动 ICON


场景2::解决 App 平台首页或者 App 中店铺首页的前台类目下的商品投放.如下某东的店铺首页商品池

  • 店铺首页

  • 平台首页 ICON /二级活动页.如下某宝的活动页商品池

场景3:解决 线下快捷收银的 POS 端线下快捷收银场景

1.2 一些名词搞懂他

有了上面的一些场景我们再来结合下面的一些名词解释,相对来说理解起来会更加有立体感一些.不然就和九年义务教育里的语文一样,就是生硬的灌输,没有了场景,没有了画面就显得很没有体验.

  • 商品池:
    一个商家或者电商平台所销售的所有商品的集合。在一个商品池中,可以包括各种不同类型的商品,例如服装、家电、食品等。商家可以根据消费者的需求和市场趋势来选择合适的商品放入商品池中进行销售。商品池的管理和优化可以帮助商家提高销售效果,增加收入。
    如上的场景中,我们通过营销活动以及 POS 收银常卖的一些商品.

  • 前台类目:
    是指在电商平台或者线下店铺中,用于展示和分类商品的一级、二级或更多级别的分类目录。前台类目的设置对于消费者的购物体验和商品搜索非常重要,能够帮助消费者快速找到自己所需的商品。在电商平台中,前台类目一般会按照商品的类型、品牌、功能等进行划分,例如服装类目可以分为男装、女装、童装等子类目。商家需要根据自己所售商品的特点和市场需求,合理设置前台类目以便于消费者的浏览和购买。

  • 后台类目:
    是指电商平台或者线下店铺中,用于管理和组织商品的分类目录。与前台类目不同,后台类目通常是商家自己设定和管理的,用于方便商品的库存管理、订单处理和统计分析等后台操作。后台类目可以根据商家自身的需求和商品特点进行设置,例如按照商品类型、品牌、价格等进行分类。在后台类目中,商家可以对商品进行归类、标签管理、库存调整等操作,以便于更好地管理和营销商品。后台类目的设置与管理对于商家的运营和管理非常重要,能够提高工作效率和订单处理的准确性。

1.3 结合业务思考一下-业务or产品的意图

一点思考:程序员对于产品思考的必要性:

不管你是长时间的技术思维和习惯与代码沟通的情况下,还是沉浸在 CRUD 的海洋里不能自已.那么个人觉得还是有必要多多少少了解一些业务和产品的思维,至少在目前的国内互联网环境下,业务和技术,项目管理结合的复合型人才目前还是比较稀缺的.那后面尽量还是去会去在这些点上多一些思考,前期没有感觉,至少先把这些产品的一些专业用语混个脸熟,别到时候产品开讲,咱也是听过的.与君共勉.

回来这里

通过聚合商品池为 App 端页面提供商品投放服务,包括活动落地页的商品楼层、前台分类页的商品楼层、以及线下场景的下 POS 端收银得快捷收银场景. 并以此为场来通过数据反馈建设需求侧和供给的循环,增加 CTR (点击率) 甚至 GMV (交易额).


从以上的分析来看,基本是整体的商品池的业务定位是用于线上营销,活动,线下这块用于快捷支付收银的场景.基本上是一些商家的一些热点商品,那么对于以上的这些业务场景:

q1:对于既存在线上C端售卖场景又存在线下的收银场景,我们如何去利用这样一套技术解决方案来去解决呢 ?
q2:详细一点具体的模型层面我们该怎么去设计 ?
q3:对于 toC 侧我们能不能有好的性能 ?


带着这些问题我们继续往下看.

二.方案设计

2.1 业务主流程



B 端能力:通过配置来支持商品池的管理.目前的主要是两个维度.自定义的维度.固定规则维度.

C 端:主要分为两个场. 小程序 或 app 端的的商品池.线下 POS 收银场景的快捷收银.

2.2 一步步带你分析B端如何配置


回忆下问题q1:

对于既存在线上C端售卖场景又存在线下的收银场景,我们如何去利用这样一套技术解决方案来去解决呢 ?

那实际的业务过程中会出现这样的场景单一的某个租户在平台开设门店存在多个,多个的店铺场景下,对于 C 端小程序或者 app 端的展示类目树同样存在复用前台类目树展示的场景.基于这个场景分析得到前台类目树是店铺是存在和前台类目的关联场景的.



从上面我们知道店铺和前台类目存在 n:n 的关联关系.接着分析从以上的表述我们知道实际业务过程中存在一套前台类目(一组稳定的前台类目树)既存在店铺 A ,也存在店铺 B 的场景中. 为了应对这种场景也便于后端的配置端的操作便捷性.在原来的基础上延伸出一个模板的概念.

前台类目模版:一套稳定的前台类目树集合.

同时由 场景3 可知,某个店铺 A 是既存在线上场景也存在线下的收银场景,对于数据层面这时候我们其实是同一个店铺 ID ,那就需要解决店铺 A 同时关联两套前台类目树的场景所以在上面的前台类目模版基础上通过新增场景的概念来表达线上,线下的两种场景.延伸之后的关联如下.



基于店铺维度的配置诉求以及线上线下的业务背景,我们通过延伸出模版的概念来做到店铺和前台类目模型的解耦.以此店铺维度的关联关系绑定都存在于模版维度,以及前台类目的维护的不需要关心了.这不就是我们想要的吗?



  • B端配置详细用例

配置前台类目模版



配置前台类目



配置前台类目下的商品池



2.3 数据流

2.3.1 ES 数据表建设



如上在整体构建 商品池 服务过程中,本身是基于一些规则来实现商品池的圈定.如类目(后台类目)规则,促销等规则来实现商品的召回.在整体商品池建设前期去构建了一个ES数据大宽表建设.具体的过程

  • step1:监听商品,库存,促销,数据中心的 binlog
  • step2:通过 binlog 工具,如 Canal databus DTS 等.解析 binlog 后实现 binlogmq 的转换.
  • step3:通过消费 mq 完成数据到 ES data 的转换,实现宽表建设.

2.3.2 核心商品池流程

2.3.2.1 商品池B端维护流程


整体流程的核心在于规则到商品池的形成的转换.
规则这里目前可以支持后台类目的抓取.如:圈定后台类目为 酒水饮料 的三级类目为一个商品池.

  • step1:通过三级类目反查得到整颗酒水饮料所在的类目树.如:零食,水,酒水饮料
  • step2:在后端接口处理的过程中,由于圈定商品池的时间并不可预测,创建的动作是异步来进行的.
  • step3:创建成功仅仅表达的是后台该商品池规则的创建成功.创建规则成功的同时将发送 mq 消息.
  • step4:最终的商品池创建过程中会依赖 mq 消息的消费来实现商品池创建.消费 mq ,调用 searchService 来实现商品池圈定.


    这里涉及到一个问题,后台类目这个规则是一个固定规则,这块的逻辑是存在于商品领域.同时会存在后台类目下商品新增的场景,这个过程同时需要做到对于商品池的动态更新.那么整个更新过程同时也会涉及到商品主档新增的逻辑处理.那么在整个处理过程中会有一个商品池的刷新,同样有这个问题的场景还有诸如店品的上下架.
    目前是这样的一个设计.
2.3.2.2 商品池版本更新逻辑


如上我们通过版本号的逻辑来保证商品池更新的时候既有版本 preVersion 商品池数据仍能够正常展示.在依赖的逻辑事件发生后通过新增的版本号来执行具体的商品池全新版本 newVersion 的落库,最终通过监听商品池数据库来进行商品池 es 表的更新.

这样一来保证了 c 端的正常查询,同时 问题3 的性能问题也可以通过 es 的查询能力做到支持.基本是满足使用.

2.4 核心代码设计

目前支持的规则有

  • 主档类目更新规则
  • 门店商品更新规则
  • 门店状态变更规则

后续还可能新增促销变更等规则,为了在代码层面尽可能支持灵活扩展.以及核心逻辑不变更.通过抽离规则接口的形式来实现规则可更加灵活的变更.比较生硬,还是直接看图.





  • 1.通过实现 applicationContextAware 扩展点来动态获取 spring 容器上下文中所有实现 ZoneRuleAnalyse 接口的
    实现类。
  • 2.在进行更新或初始化商品池时通过持有 List 来实现所有规则的读取。后续在新增规则的场景
    时能够通过继续实现ZoneRuleAnalyse 来做到,核心流程 ProductZoneInitiator 的稳定,仅需要适配接口的规则读取即可。

2.5 附 DB 设计以及 Mapping设计

老规矩:https://github.com/Baixiu-code/project-product-pool.git

三.总结

以上主要是本次商品池相关的内容设计,涵盖了从业务分析到业务流程分析以及具体的用例分析以及最后的核心代码实现,具体的 db , mapping 结构参考 git repo ,后续将持续完善这个工程.

赠人玫瑰 手有余香 我是柏修 一名持续更新的晚熟程序员
期待您的点赞,关注加收藏,加个关注不迷路,感谢
您的鼓励是我更新的最大动力
↓↓↓↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1434500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle

目录 RDD持久化 RDD 的数据是过程数据 RDD 缓存 RDD CheckPoint 共享变量 广播变量 累加器 Spark 内核调度 DAG DAG 的宽窄依赖和阶段划分 内存迭代计算 Spark是怎么做内存计算的? DAG的作用?Stage阶段划分的作用? Spark为什么比MapReduce快? Spar…

Java项目服务器部署

Java项目服务器部署 Tomocat Java项目进行云服务器部署 如果有需要比赛部署的同学也可以联系我,我后续还会对于这个专栏继续展开 1、云服务器选购 1.1 阿里云选购(宝塔面板) 1.2 端口放行 这里说的就是端口放行,后面一些访问比…

打造直播带货商城APP:源码开发技术全解析

直播带货商城APP的创新模式吸引了用户,提升销售业绩,已经成为了近期开发者讨论的热门话题。今天,小编将深入讲解如何打造一款功能强大的直播带货商城APP,着重分析源码开发技术,为开发者提供全方位的指导。 一、前期准…

电商推荐系统

此篇博客主要记录一下商品推荐系统的主要实现过程。 一、获取用户对商品的偏好值 代码实现 package zb.grms;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Doub…

docker自定义镜像并使用

写在前面 本文看下如何自定义镜像。 ik包从这里 下载。 1:自定义带有ik的es镜像 先看下目录结构: /opt/program/mychinese [rootlocalhost mychinese]# ll total 16 -rw-r--r-- 1 root root 1153 Feb 5 04:18 docker-compose.yaml -rw-rw-r-- 1 el…

2024智慧城市新纪元:引领未来,重塑都市生活

随着科技的飞速发展和数字化转型的不断深入,2024年智慧城市领域迎来了全新的发展格局。 这一年,智慧城市的建设更加注重人性化、可持续性和创新性,为城市居民带来了前所未有的便捷与舒适。以下将重点关注智慧城市的几个核心内容,…

Java设计模式-模板方法模式(14)

行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对…

【UE 材质】扇形材质

目录 效果 步骤 (1)控制扇形的弧宽度 (2)控制扇形的角度 (3)完整节点 效果 步骤 (1)控制扇形的弧宽度 创建一个材质,混合模式设置为“Additive”,着色…

代码随想录算法训练营DAY13 | 栈与队列 (3)

一、LeetCode 239 滑动窗口最大值 题目链接&#xff1a;239.滑动窗口最大值https://leetcode.cn/problems/sliding-window-maximum/ 思路&#xff1a;使用单调队列&#xff0c;只保存窗口中可能存在的最大值&#xff0c;从而降低时间复杂度。 public class MyQueue{Deque<I…

On the Spectral Bias of Neural Networks论文阅读

1. 摘要 众所周知&#xff0c;过度参数化的深度神经网络(DNNs)是一种表达能力极强的函数&#xff0c;它甚至可以以100%的训练精度记忆随机数据。这就提出了一个问题&#xff0c;为什么他们不能轻易地对真实数据进行拟合呢。为了回答这个问题&#xff0c;研究人员使用傅里叶分析…

mysql+node.js+html+js完整扫雷项目

一.下载 可以直接下载绑定资源&#xff0c; 也可以访问&#xff1a;克隆仓库&#xff1a;mine_clearance: mysqlnode.jshtmljs完整扫雷项目 (gitee.com) 二.运行sql数据文件 将mysql数据文件导入到本地 先在本地localhost里创建数据库 mine_clearance&#xff0c; 然后如图&…

编译原理本科课程 专题5 基于 SLR(1)分析的语义分析及中间代码生成程序设计

一、程序功能描述 本程序由C/C编写&#xff0c;实现了赋值语句语法制导生成四元式&#xff0c;并完成了语法分析和语义分析过程。 以专题 1 词法分析程序的输出为语法分析的输入&#xff0c;完成以下描述赋值语句 SLR(1)文法的语义分析及中间代码四元式的过程&#xff0c;实现…

进程和线程的区别详解

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 进程 进程在系统中是如何管理的 进一步认识PCB 线程 能否一直增加线程数目来提高效率 进程和线程…

【240126】上海大学—调剂信息

上海大学 学校层级&#xff1a;211 调剂专业&#xff1a;081000 信息与通信工程 发布时间&#xff1a;2024.1.26 发布来源&#xff1a;网络发布 调剂要求&#xff1a;要求考数一英一且初试成绩在320分以上 来源说明 1、官方发布&#xff1a;学校官网、研招网 2、网络发布…

EOF和0区别

题目描述 KiKi学习了循环&#xff0c;BoBo老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“*”组成的X形图案。 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜…

Architecture Lab:Part C【流水线通用原理/Y86-64的流水线实现/实现IIADDQ指令】

目录 任务描述 知识回顾 流水线通用原理 Y86-64流水线实现&#xff08;PIPE-与PIPE&#xff09; 开始实验 IIADDQ指令的添加 优化 ncopy.ys 仅用第四章知识&#xff0c;CEP11.55 8x1展开&#xff0c;CPE9.35 8x1展开2x1展开消除气泡&#xff0c;CPE8.10 流水线化通过…

在VM虚拟机上搭建MariaDB数据库服务器

例题&#xff1a;搭建MariaDB数据库服务器&#xff0c;并实现主主复制。 1.在二台服务器中分别MariaDB安装。 2.在二台服务器中分别配置my.cnf文件&#xff0c;开启log_bin。 3.在二台服务器中分别创建专用于数据库同步的用户replication_user&#xff0c;并授权SLAVE。&#x…

【DDD】学习笔记-数据分析模型

在 Eric Evans 提出领域驱动设计之前&#xff0c;对企业系统的分析设计多数采用数据模型驱动设计。如前所述&#xff0c;这种数据模型驱动设计就是站在数据的建模视角&#xff0c;逐步开展分析、设计与实现的建模过程。通过对数据的正确建模&#xff0c;设计人员就可以根据模型…

【INTEL(ALTERA)】为什么在编译 HDMI 英特尔® FPGA IP设计示例 VHDL 变体时看到错误 (13879)?

说明 由于英特尔 Quartus Prime Pro Edition 软件版本 23.2 存在一个问题&#xff0c;您在编译 HDMI 英特尔 FPGA IP设计示例的 VHDL 变体时可能会看到以下错误&#xff1a; 错误 &#xff08;13879&#xff09;&#xff1a; VHDL 绑定指示 hdmi_rx_ram_1port_intel_mce_2010…

Java设计模式大全:23种常见的设计模式详解(一)

本系列文章简介&#xff1a; 设计模式是在软件开发过程中&#xff0c;经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合&#xff0c;可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在…