1. 项目背景与核心需求
人脸识别技术在当代应用系统中扮演着越来越重要的角色,从门禁系统到移动支付,其应用场景不断扩展。当我们将这项技术整合到Spring Boot项目中时,数据库的设计与管理就成为整个系统稳定运行的关键支柱。
这个项目的核心挑战在于:如何设计一个既能高效存储人脸特征数据,又能满足业务查询需求的数据库结构。不同于传统的关系型数据,人脸特征数据具有维度高(通常128维或更高)、数据量大(单个用户可能有多张人脸样本)、实时性要求严格等特点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据库设计方案
2.1 表结构设计
在MySQL中,我们设计了以下核心表结构:
sql复制CREATE TABLE `face_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(64) NOT NULL COMMENT '用户登录名',
`real_name` varchar(64) DEFAULT NULL COMMENT '真实姓名',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态:1-正常 0-禁用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`),
KEY `idx_phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户基础信息表';
CREATE TABLE `face_feature` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL COMMENT '关联用户ID',
`feature_data` blob NOT NULL COMMENT '人脸特征数据',
`image_url` varchar(255) DEFAULT NULL COMMENT '人脸图片存储路径',
`version` int(11) NOT NULL DEFAULT '1' COMMENT '特征版本号',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人脸特征数据表';
这种分离设计(用户基础信息与人脸特征数据分开存储)的优势在于:
- 基础信息表保持轻量,便于频繁查询
- 特征数据表可以灵活扩展,支持一个用户多张人脸
- 减少特征数据对常规业务查询的影响
2.2 特征数据存储方案
人脸特征数据通常是由深度学习模型提取的128维或256维浮点数组。我们有几种存储选择:
-
二进制BLOB存储:
- 将特征数组序列化为字节流直接存储
- 优点:存储紧凑,读写效率高
- 缺点:无法直接查询分析
-
JSON文本存储:
- 将数组转为JSON字符串
- 优点:可读性好
- 缺点:存储空间大,解析开销高
-
专用向量数据库:
- 如Milvus、FAISS等
