文档目录
用户行为表

简介

本文件面向数据分析人员与产品经理,系统化梳理 DouPHP 用户行为追踪的表结构设计。围绕“浏览记录、操作日志、访问时间”等行为数据,说明用户画像分析、行为统计、个性化推荐等场景所需的数据模型;并给出数据采集、清洗、统计分析的业务逻辑与表设计建议。文档以仓库中现有表结构与控制器/服务调用为依据,确保可落地与可追溯。

项目结构

DouPHP 采用模块化分层组织:前端控制器负责页面渲染与访问计数触发,业务服务封装具体统计逻辑,数据库层提供持久化存储。行为相关的关键位置包括:

  • 内容模块(课程、商品等)在详情页展示时触发访问计数
  • 聊天/AI 使用日志用于统计请求、耗时、成功率等指标
  • 用户审计日志用于记录登录失败、密码重置等操作事件
  • 日统计表用于聚合指标,支撑报表与分析
graph TB
FE["前端控制器<br/>CourseController / ItemController"] --> SVC["业务服务<br/>recordView / recordItemView"]
SVC --> DB["数据库<br/>dou_article / dou_course / dou_item 等"]
FE --> LOG["使用日志<br/>dou_ai_usage_log / dou_chat_message"]
FE --> STATS["日统计<br/>dou_chat_daily_stats"]

核心组件

  • 用户审计日志表(dou_user_log)
    • 作用:记录用户关键操作事件(如登录失败、密码重置、邮箱变更等),支持按用户、动作、IP、时间检索
    • 关键字段:用户ID、动作类型、IP、时间戳、结果、详情
    • 索引:用户ID、动作、IP、创建时间,便于多维查询
  • AI 使用日志表(dou_ai_usage_log)
    • 作用:记录后台AI能力调用明细(应用、模型、供应商、密钥、请求ID、tokens、耗时、状态码、错误信息、元数据等)
    • 索引:管理员ID、应用ID、创建时间,便于成本与性能分析
  • 消息表(dou_chat_message)
    • 作用:会话级消息明细,包含角色、发送者、内容、模型、tokens、耗时、错误、元数据、IP、时间等
    • 索引:会话ID,便于会话回放与对话分析
  • 日统计表(dou_chat_daily_stats)
    • 作用:按日期、用户、应用、模型、供应商维度聚合请求次数、成功次数、tokens、成本、平均耗时等
    • 唯一键:统计日期+用户+应用+模型,避免重复聚合

架构总览

用户行为数据从“采集—存储—聚合—分析”形成闭环:

  • 采集:前端控制器在内容详情页触发访问计数;聊天/AI 调用写入消息与使用日志
  • 存储:行为明细写入对应日志表;内容点击数回写至内容主表
  • 聚合:定时任务或接口将明细聚合成日统计,降低查询复杂度
  • 分析:基于日统计与明细表进行用户画像、热门内容、转化率、推荐策略等分析
sequenceDiagram
participant U as "用户"
participant C as "控制器<br/>CourseController/ItemController"
participant S as "服务<br/>recordView"
participant D as "数据库<br/>内容表/日志表"
participant R as "报表/分析"
U->>C : 打开课程/商品详情页
C->>S : 记录访问(内容ID)
S->>D : 更新内容点击数/写入日志
Note over C,D : 同时可能写入AI使用日志/消息表
C-->>U : 返回页面
R->>D : 查询日统计/明细
R-->>R : 生成画像/推荐/报表

详细组件分析

用户审计日志表(dou_user_log)

  • 字段要点
    • 用户ID:关联用户主体,未登录可为0
    • 动作类型:如登录失败、密码重置、邮箱变更等
    • IP:支持IPv6,便于安全风控与地域分析
    • 时间:统一为datetime字符串,便于排序与范围查询
    • 结果:成功/失败标记
    • 详情:失败原因等扩展信息
  • 索引与查询
    • 已对用户ID、动作、IP、创建时间建立索引,适合按用户、动作、时间段检索
  • 业务用途
    • 安全审计:识别异常登录、暴力破解
    • 用户画像:结合其他行为表,构建活跃时段、偏好渠道
    • 合规留存:满足审计与追溯要求
flowchart TD
Start(["写入日志"]) --> Build["组装日志行<br/>用户/动作/IP/时间/结果/详情"]
Build --> Insert["插入 dou_user_log"]
Insert --> End(["完成"])

AI 使用日志表(dou_ai_usage_log)

  • 字段要点
    • 管理员ID、应用ID、模型ID、供应商ID、密钥ID:定位资源与成本归属
    • 请求ID:上游API返回的唯一标识,便于对账与排障
    • tokens:输入/输出/总计,支撑计费与配额管理
    • 耗时:毫秒级,评估性能瓶颈
    • 状态码、是否错误、错误信息:质量监控
    • 端点、元数据:扩展上下文
    • 时间:创建时间,用于趋势分析
  • 索引与查询
    • 管理员ID、应用ID、创建时间索引,便于按人/应用/时间筛选
  • 业务用途
    • 成本核算:按模型/供应商统计tokens与费用
    • 性能分析:平均耗时、超时率、错误率
    • 容量规划:峰值QPS与并发评估
classDiagram
class AI使用日志 {
+id
+管理员ID
+应用ID
+模型ID
+供应商ID
+密钥ID
+请求ID
+输入tokens
+输出tokens
+总tokens
+耗时
+状态码
+是否错误
+错误信息
+端点
+元数据
+创建时间
}

消息表(dou_chat_message)

  • 字段要点
    • 会话ID:串联一次对话
    • 角色:用户/AI/人工/系统
    • 发送者ID:用户或人工客服
    • 内容与类型:文本、图片、音频、视频、文件、Markdown
    • 模型/密钥/请求ID:关联AI调用
    • tokens/耗时/错误:质量与成本
    • 元数据:知识库命中等扩展信息
    • IP/时间:来源与时间线
  • 索引与查询
    • 会话ID索引,便于会话回放与对话分析
  • 业务用途
    • 对话质检:错误率、响应时长、命中率
    • 知识优化:高频问题与命中效果
    • 用户体验:首响时间、重试次数
erDiagram
DOU_CHAT_MESSAGE {
bigint id PK
bigint session_id
enum role
int sender_id
longtext content
enum content_type
varchar file
text file_metadata
int model_id
int key_id
varchar request_id
int prompt_tokens
int completion_tokens
int total_tokens
int duration
tinyint has_error
text error_message
text metadata
varchar ip
datetime created_at
}

日统计表(dou_chat_daily_stats)

  • 字段要点
    • 维度:日期、用户、应用、模型、供应商、密钥
    • 指标:请求次数、成功次数、总tokens、输入/输出tokens、总成本、平均耗时
    • 唯一键:统计日期+用户+应用+模型,保证聚合幂等
  • 索引与查询
    • 唯一键天然去重;可按日期/用户/应用/模型快速聚合查询
  • 业务用途
    • 报表看板:成功率、成本、耗时趋势
    • 用户画像:活跃度、偏好模型/应用
    • 推荐策略:基于历史交互热度与转化
flowchart TD
A["明细日志<br/>ai_usage_log / chat_message"] --> B["按日/用户/应用/模型聚合"]
B --> C{"是否存在相同维度记录?"}
C -- 是 --> D["累加指标/更新成本"]
C -- 否 --> E["新建统计行"]
D --> F["写入 dou_chat_daily_stats"]
E --> F

内容访问计数(课程/商品)

  • 触发点:课程/商品详情页展示时,调用服务方法记录访问
  • 数据落盘:内容主表的点击数自增;同时可写入日志表用于细粒度分析
  • 分析价值:热门内容排行、内容生命周期、推荐权重
sequenceDiagram
participant U as "用户"
participant CC as "CourseController"
participant IC as "ItemController"
participant S as "Service"
participant T as "内容表"
U->>CC : 访问课程详情
CC->>S : recordCourseView(id)
S->>T : click = click + 1
U->>IC : 访问商品详情
IC->>S : recordItemView(id)
S->>T : click = click + 1

聊天使用日志管理(后台)

  • 功能:列表查看、详情查看,支持按供应商、模型筛选
  • 数据来源:dou_ai_usage_log 与 dou_chat_daily_stats
  • 界面文案:统计汇总、会员、应用、供应商、模型、请求次数、成功次数、成功率、总Tokens、平均耗时等

依赖关系分析

  • 控制器到服务:CourseController/ItemController 通过服务方法记录访问,解耦业务逻辑
  • 服务到数据库:写入内容点击数与日志表,必要时写入消息与使用日志
  • 日志到统计:明细日志经聚合生成日统计表,降低复杂查询开销
  • 报表到统计:后台报表直接读取日统计表,提升性能
graph LR
CC["CourseController"] --> SVC["Service"]
IC["ItemController"] --> SVC
SVC --> DB1["内容表"]
SVC --> DB2["日志表"]
DB2 --> AGG["聚合任务"]
AGG --> DB3["日统计表"]
ADMIN["后台报表"] --> DB3

性能考量

  • 高并发写入
    • 内容点击数可采用批量更新或缓存合并,减少热点行竞争
    • 日志写入建议异步队列,削峰填谷
  • 索引设计
    • 日志表已对用户ID、动作、IP、创建时间建索引;日统计表具备唯一键,避免重复聚合
  • 查询优化
    • 报表优先读日统计表;明细仅用于溯源与深度分析
  • 存储与归档
    • 日志表按时间分表或冷热分离,保留周期内明细,超期转归档库

故障排查指南

  • 登录失败与账号安全
    • 通过 dou_user_log 按IP、动作、时间范围检索异常登录
    • 结合 dou_user_sns 排查第三方登录异常
  • AI 调用失败
    • 通过 dou_ai_usage_log 的状态码、错误信息、耗时定位问题
    • 结合 dou_chat_message 的会话上下文与元数据复现问题
  • 报表数据不一致
    • 检查 dou_chat_daily_stats 的唯一键约束与聚合任务幂等性
    • 核对明细与聚合口径(tokens、成本计算)

结论

DouPHP 的用户行为追踪体系以“明细日志+日统计”为核心,既满足实时写入的高吞吐需求,又保障报表查询的性能与稳定性。通过 dou_user_log、dou_ai_usage_log、dou_chat_message、dou_chat_daily_stats 等表,可支撑用户画像、行为统计、个性化推荐等多类分析场景。建议在后续迭代中完善内容点击的细粒度日志、统一时间字段格式、增强元数据扩展能力,以提升分析与运营效率。

附录

表结构参考(节选)

  • 用户审计日志(dou_user_log)
    • 字段:用户ID、动作、IP、时间、结果、详情
    • 用途:安全审计、用户行为分析
  • AI 使用日志(dou_ai_usage_log)
    • 字段:管理员ID、应用ID、模型ID、供应商ID、密钥ID、请求ID、tokens、耗时、状态码、错误信息、端点、元数据、时间
    • 用途:成本核算、性能分析、容量规划
  • 消息表(dou_chat_message)
    • 字段:会话ID、角色、发送者、内容、类型、模型、密钥、请求ID、tokens、耗时、错误、元数据、IP、时间
    • 用途:对话质检、知识优化、体验分析
  • 日统计表(dou_chat_daily_stats)
    • 字段:日期、用户、应用、模型、供应商、密钥、请求次数、成功次数、tokens、成本、平均耗时
    • 用途:报表看板、用户画像、推荐策略
添加日期:2026-10-05