1. 项目概述与核心价值
作为一名长期从事电商系统开发的工程师,我最近完成了一个节日鲜花店的智能推荐系统项目。这个系统的核心目标是通过协同过滤算法,为不同节日场景下的鲜花购买提供个性化推荐。不同于传统电商推荐系统,我们特别强化了节日属性的权重计算,使得母亲节、情人节等特殊时段的推荐结果更符合用户潜在需求。
这个项目采用Vue.js+Python技术栈实现前后端分离架构,其中包含几个关键创新点:首先,我们设计了动态权重调整机制,使系统能够根据节日远近自动平衡协同过滤和内容推荐的占比;其次,开发了基于时间衰减因子的用户行为模型,解决了节日性商品推荐中的时效性问题;最后,在前端交互上采用了情感化设计,通过节日主题色和动态效果增强用户购买欲望。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计解析
2.1 技术选型决策过程
在架构设计阶段,我们对比了三种主流方案:
- 传统单体架构(Spring Boot+Thymeleaf)
- 前后端分离架构(Vue.js+Python Flask)
- 全栈JavaScript方案(Node.js+React)
最终选择Vue.js+Python组合主要基于以下考量:
- 开发效率:Vue的渐进式特性适合快速迭代前端界面,而Python在算法实现上比Java更简洁
- 性能平衡:鲜花推荐系统不需要处理极高并发,Python足以支撑,同时避免了Node.js在复杂算法运算上的性能瓶颈
- 生态适配:Python的surprise和scikit-learn库为推荐算法提供了完善支持,Vue的组件化开发则完美匹配推荐系统的界面模块化需求
2.2 分层架构实现细节
系统采用经典的三层架构,但针对推荐场景做了特殊优化:
表现层:
- 基于Vue CLI 4搭建工程化前端项目
- 使用Vuex管理推荐状态,解决多组件间数据共享问题
- 采用Element UI+自定义主题实现节日皮肤切换功能
业务逻辑层:
- Python Flask作为RESTful API服务框架
- 单独部署推荐引擎服务,与主业务服务解耦
- 引入Celery实现异步任务处理(如离线相似度计算)
数据访问层:
- MySQL 8.0作为主数据库,存储结构化数据
- Redis 6.x缓存热门推荐结果和用户相似度矩阵
- 使用SQLAlchemy ORM提高开发效率,关键查询手写SQL优化性能
关键决策:将推荐计算服务独立部署,通过gRPC与主服务通信。实测表明,这种设计在高并发推荐请求场景下,比传统单体架构响应时间降低40%。
3. 数据模型设计与优化
3.1 核心表结构设计
用户表(user)
sql复制CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`password` varchar(255) NOT NULL COMMENT 'bcrypt加密',
`register_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`preference_tags` json DEFAULT NULL COMMENT '存储用户手动选择的兴趣标签',
`holiday_weights` json DEFAULT NULL COMMENT '各节日偏好系数,如{"valentine":0.8,"mother":0.6}',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
商品表(product)
sql复制CREATE TABLE `product` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`category_id` int NOT NULL COMMENT '关联分类表',
`price` decimal(10,2) NOT NULL,
`stock` int NOT NULL DEFAULT '0',
`holiday_tags` json NOT NULL COMMENT '适用节日标签,如["valentine","mother"]',
`feature_vector` json DEFAULT NULL COMMENT '商品特征向量,用于内容推荐',
`main_image` varchar(255) NOT NULL,
`sales_count` int NOT NULL DEFAULT '0',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `category_id` (`category_id`),
KEY `holiday_tags` ((CAST(`holiday_tags` AS CHAR(255)))),
FULLTEXT KEY `ft_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
用户行为表(user_behavior)
sql复制CREATE TABLE `user_behavior` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL,
`product_id` int NOT NULL,
`behavior_type` enum('view','collect','cart','buy') NOT NULL COMMENT '行为类型',
`behavior_time` datetime NOT
