设计高效的MySQL表结构实现视频播放功能,需围绕视频元数据、用户交互、存储路径等核心需求,遵循规范化与性能优化原则。以下是具体方案及示例:
---
### **1. 核心表设计**
#### (1)视频基础信息表(`videos`)
存储视频的核心元数据,如标题、描述、时长、分辨率等。
```sql
CREATE TABLE videos (
video_id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL COMMENT '视频标题',
description TEXT COMMENT '视频描述',
duration INT COMMENT '视频时长(秒)',
resolution VARCHAR(20) COMMENT '分辨率(如1080p)',
file_size BIGINT COMMENT '文件大小(字节)',
cover_url VARCHAR(512) COMMENT '封面图URL',
status TINYINT DEFAULT 1 COMMENT '状态(1:可用 0:下架)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_status (status), -- 快速筛选可用视频
INDEX idx_created_at (created_at) -- 按发布时间排序
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
#### (2)视频文件存储表(`video_files`)
关联视频的多格式/多清晰度文件路径(如MP4、HLS分片),支持CDN加速。
```sql
CREATE TABLE video_files (
file_id BIGINT PRIMARY KEY AUTO_INCREMENT,
video_id BIGINT NOT NULL COMMENT '关联视频ID',
format VARCHAR(10) NOT NULL COMMENT '格式(mp4/hls)',
quality VARCHAR(20) COMMENT '清晰度(480p/720p/1080p)',
file_path VARCHAR(512) NOT NULL COMMENT '文件存储路径(如COS路径)',
url VARCHAR(512) COMMENT '访问URL(可冗余存储加速查询)',
bitrate INT COMMENT '码率(kbps)',
FOREIGN KEY (video_id) REFERENCES videos(video_id) ON DELETE CASCADE,
INDEX idx_video_format (video_id, format) -- 快速定位某视频的指定格式文件
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
#### (3)用户播放记录表(`play_records`)
记录用户播放行为(如播放次数、最后播放时间),用于推荐和统计。
```sql
CREATE TABLE play_records (
record_id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
video_id BIGINT NOT NULL COMMENT '视频ID',
play_count INT DEFAULT 0 COMMENT '播放次数',
last_play_time TIMESTAMP NULL COMMENT '最后播放时间',
INDEX idx_user_video (user_id, video_id), -- 快速查询用户对某视频的记录
INDEX idx_video_play (video_id, play_count) -- 热门视频排序
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
---
### **2. 关键优化点**
- **索引策略**:为高频查询字段(如`status`、`video_id`、`user_id`)添加索引,避免全表扫描。
- **文件存储分离**:视频文件实际存储在对象存储(如腾讯云COS),MySQL仅保存访问路径(`url`或`file_path`),降低数据库负载。
- **冷热数据分离**:历史视频可归档到单独表(如`videos_archive`),主表只保留活跃数据。
- **分库分表**:若单表数据量过大(如千万级),按视频ID哈希分片存储。
---
### **3. 扩展功能表(可选)**
#### (1)弹幕表(`danmaku`)
```sql
CREATE TABLE danmaku (
danmaku_id BIGINT PRIMARY KEY AUTO_INCREMENT,
video_id BIGINT NOT NULL,
user_id BIGINT COMMENT '发送用户ID',
content TEXT NOT NULL,
time_offset INT NOT NULL COMMENT '弹幕出现时间(秒)',
color VARCHAR(10) COMMENT '颜色',
FOREIGN KEY (video_id) REFERENCES videos(video_id),
INDEX idx_video_time (video_id, time_offset) -- 按视频和时间查询弹幕
);
```
#### (2)视频分类表(`categories` + `video_category`关联表)
```sql
CREATE TABLE categories (
category_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE video_category (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
video_id BIGINT NOT NULL,
category_id INT NOT NULL,
FOREIGN KEY (video_id) REFERENCES videos(video_id),
UNIQUE KEY uk_video_category (video_id, category_id) -- 避免重复分类
);
```
---
### **4. 腾讯云相关产品推荐**
- **对象存储(COS)**:存储视频文件和封面图,支持高并发访问和CDN加速。
- **云数据库MySQL**:提供高性能、高可用的MySQL服务,支持自动备份和读写分离。
- **云点播(VOD)**:若需完整视频解决方案(转码、加密、播放器),可直接集成腾讯云点播服务,减少自建存储和转码逻辑。
---
通过以上设计,可实现视频播放功能的高效数据管理,同时兼顾扩展性和性能。...
展开详请