4. 数据模型设计:评分事件模型、用户模型、商品/内容模型、聚合结果模型

实时评分系统的核心在于对海量、高并发的评分事件进行快速处理与准确聚合。数据模型的设计直接决定了系统的吞吐能力、数据一致性以及后续分析的灵活性。本章将详细定义四个核心数据模型:评分事件模型、用户模型、商品/内容模型以及聚合结果模型。

4.1 评分事件模型(Rating Event Model)

评分事件是系统的原始输入,代表一次独立的用户评分行为。该模型需要承载完整的上下文信息,以便进行去重、反欺诈以及实时流处理。

字段名 类型 描述 示例
event_id UUID 全局唯一事件ID,用于幂等去重 a1b2c3d4-...-e5f6
user_id String 评分用户标识 user_10086
target_id String 被评分对象ID(商品/内容) product_9527
target_type Enum 对象类型(product / content) product
score Integer 评分值(1-5分) 4
timestamp Long 事件发生时间戳(毫秒) 1712345678000
metadata Map 扩展属性(设备、渠道、标签等) {"device":"iOS","channel":"app"}
设计要点:使用 event_id 实现幂等写入,避免消息队列重试导致重复评分。 target_type 字段支持多业务线复用同一套评分管道。

4.2 用户模型(User Model)

用户模型不仅存储基础信息,还需记录用户的评分行为特征,用于风控与个性化推荐。

  • 基础信息: user_id、nickname、avatar_url、registration_time。
  • 评分统计: total_ratings(总评分次数)、avg_score_given(平均给出分数)、last_rating_time(最近评分时间)。
  • 风控标签: risk_level(风险等级)、is_blacklisted(是否黑名单)、daily_rating_count(当日评分次数)。
关键约束:用户模型中的 daily_rating_count 需要在内存中(如 Redis)实时更新,并与数据库异步同步,用于拦截刷分行为。

4.3 商品/内容模型(Product/Content Model)

该模型描述被评分对象的元数据,是聚合查询的维度基础。商品和内容可共用一套抽象模型,通过 type 字段区分。

字段名 类型 描述 示例
target_id String 对象唯一ID product_9527
type Enum 对象类型 product
title String 对象标题 无线蓝牙耳机
category_id String 所属分类ID cat_elec_audio
seller_id String 卖家/创作者ID seller_123
status Enum 上下架状态 online

4.4 聚合结果模型(Aggregation Result Model)

聚合结果模型是实时计算产出的最终数据,直接服务于前端展示与推荐系统。该模型需要支持高并发读取,通常存储在 Redis 或具备缓存层的数据库中。

// 聚合结果模型 JSON 示例
{
  "target_id": "product_9527",
  "target_type": "product",
  "total_ratings": 1580,
  "average_score": 4.2,
  "score_distribution": {
    "1": 20,
    "2": 45,
    "3": 210,
    "4": 680,
    "5": 625
  },
  "recent_trend": {
    "last_hour_avg": 4.5,
    "last_24h_avg": 4.1
  },
  "last_updated": 1712345678000
}
注意: score_distribution 字段用于前端展示评分柱状图,必须保证各分数段计数之和等于 total_ratings。 recent_trend 用于计算近期热度,需通过滑动窗口算法实时更新。

4.5 数据模型关系与流转架构

下图展示了四个模型之间的数据流转关系:评分事件经过流处理引擎后,更新用户模型与商品模型,最终产出聚合结果模型供 API 层查询。

实时评分系统数据模型流转架构 评分事件模型 event_id, user_id, score 用户模型 user_id, risk_level 商品/内容模型 target_id, category 流处理引擎(Flink / Kafka Streams) 去重 · 风控校验 · 滑动窗口聚合 聚合结果模型 avg_score, distribution, trend 说明:评分事件作为原始输入,结合用户模型(风控)与商品模型(维度),经流处理引擎计算后产出聚合结果模型。 聚合结果模型直接服务于 API 查询层,支持毫秒级响应。

4.6 模型设计核心原则总结

模型 存储选型 核心设计原则
评分事件模型 Kafka / Pulsar 不可变、有序、支持回溯重放
用户模型 Redis + MySQL 热数据在缓存,冷数据持久化
商品/内容模型 MySQL + CDN 维度表,变化频率低,可缓存
聚合结果模型 Redis Cluster 高并发读,最终一致性,TTL 过期
架构决策:评分事件模型采用不可变日志结构,确保数据完整性;聚合结果模型采用最终一致性,允许秒级延迟,换取极高的查询吞吐量。