70 lines
4.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
USE hyapp_user;
-- 用户在房时长服务端事实:消费 room outbox 的 RoomUserJoined/RoomUserLeft/RoomUserKicked
-- 替代只靠客户端 room_stay 埋点的口径(杀进程丢时长导致进房时长偏低甚至小于上麦时长)。
CREATE TABLE IF NOT EXISTS user_room_sessions (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
room_session_id VARCHAR(128) NOT NULL COMMENT '在房会话 ID取 RoomUserJoined 事件 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态 open/ended',
is_robot TINYINT(1) NOT NULL DEFAULT 0 COMMENT '进房时固化的机器人标记,机器人会话不产生统计事实',
joined_at_ms BIGINT NOT NULL COMMENT '进房时间UTC epoch ms',
ended_at_ms BIGINT NULL COMMENT '离房时间UTC epoch ms',
end_reason VARCHAR(64) NOT NULL DEFAULT '' COMMENT '结束原因',
room_online_ms BIGINT NOT NULL DEFAULT 0 COMMENT '在房毫秒值',
opened_event_id VARCHAR(128) NOT NULL COMMENT '进房事件 ID',
closed_event_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT '闭合事件 ID',
last_event_id VARCHAR(128) NOT NULL COMMENT '最后事件 ID',
last_room_version BIGINT NOT NULL DEFAULT 0 COMMENT '最后房间版本',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, room_session_id),
KEY idx_user_room_sessions_user_status (app_code, user_id, status, joined_at_ms),
KEY idx_user_room_sessions_room_user (app_code, room_id, user_id, status),
KEY idx_user_room_sessions_open_timeout (app_code, status, joined_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户在房会话表';
CREATE TABLE IF NOT EXISTS user_room_daily_stats (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
user_id BIGINT NOT NULL COMMENT '用户 ID',
stat_date CHAR(10) NOT NULL COMMENT '统计日期UTC',
room_online_ms BIGINT NOT NULL DEFAULT 0 COMMENT '在房毫秒值',
session_count BIGINT NOT NULL DEFAULT 0 COMMENT '会话数量',
first_room_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '首次在房时间UTC epoch ms',
last_room_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '最后在房时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, user_id, stat_date),
KEY idx_user_room_daily_date (app_code, stat_date, room_online_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户在房每日统计表';
CREATE TABLE IF NOT EXISTS user_room_orphan_leaves (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
event_id VARCHAR(128) NOT NULL COMMENT '离房事件 ID',
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
left_at_ms BIGINT NOT NULL COMMENT '离房时间UTC epoch ms',
reason VARCHAR(64) NOT NULL DEFAULT '' COMMENT '离房原因',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_user_room_orphan_room_user (app_code, room_id, user_id, left_at_ms),
KEY idx_user_room_orphan_left_at (app_code, left_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='先于进房事实到达的离房事件暂存表';
CREATE TABLE IF NOT EXISTS user_room_event_consumption (
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
event_id VARCHAR(128) NOT NULL COMMENT '事件幂等 ID',
event_type VARCHAR(64) NOT NULL COMMENT '事件类型',
room_id VARCHAR(64) NOT NULL COMMENT '房间 ID',
user_id BIGINT NOT NULL COMMENT '用户 ID',
status VARCHAR(32) NOT NULL COMMENT '业务状态',
skip_reason VARCHAR(128) NOT NULL DEFAULT '' COMMENT '跳过原因',
created_at_ms BIGINT NOT NULL COMMENT '创建时间UTC epoch ms',
consumed_at_ms BIGINT NULL COMMENT '消费时间UTC epoch ms',
updated_at_ms BIGINT NOT NULL COMMENT '更新时间UTC epoch ms',
PRIMARY KEY (app_code, event_id),
KEY idx_user_room_event_user (app_code, user_id, created_at_ms)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户在房事件消费位点表';