
1) 【一句话结论】针对招聘信息这类混合数据,采用关系型数据库存储结构化字段(如岗位名称、薪资等),非结构化数据(文本、图片)通过对象存储(如S3)存储并记录路径,索引设计上对结构化字段用普通索引提升查询效率,对文本内容采用全文索引(如Elasticsearch)实现高效检索。
2) 【原理/概念讲解】老师口吻,解释关键概念:
3) 【对比与适用场景】
| 方案类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 关系型表结构 | 用表存储结构化数据,通过主键/外键关联 | 数据结构化,事务一致性(ACID),查询灵活(SQL) | 结构化字段(如岗位名称、薪资、发布时间) | 不适合存储大文件(如图片),表结构复杂时查询性能下降 |
| 非结构化数据存储(对象存储) | 将非结构化文件(文本、图片)存入对象存储,数据库存路径 | 弹性存储,高可用,适合大文件 | 图片、附件、长文本(如岗位描述) | 需额外管理文件路径,数据一致性依赖存储系统 |
4) 【示例】
-- 招聘信息表(结构化数据)
CREATE TABLE job_info (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
company VARCHAR(100),
location VARCHAR(50),
salary DECIMAL(10,2),
publish_time DATETIME,
description TEXT, -- 长文本描述
image_path VARCHAR(255), -- 图片路径(指向对象存储)
attachment_path VARCHAR(255) -- 附件路径
);
-- 全文索引(MySQL 8+)
CREATE FULLTEXT INDEX idx_title_description ON job_info (title, description);
s3://job-images/20240101/job-title1.jpgs3://job-attachments/20240101/company.pdf5) 【面试口播版答案】(约90秒)
“面试官您好,针对招聘信息的数据库设计,核心思路是分结构化与非结构化存储。首先,结构化字段(如岗位名称、薪资、发布时间)用关系型表存储,比如创建job_info表,包含id、title、salary等字段,通过主键索引提升查询效率。然后,非结构化数据(图片、附件、长文本描述)存入对象存储(如S3),数据库仅记录文件路径(如image_path字段),这样既避免关系型表存储大文件的性能问题,又保证数据可访问性。索引设计上,对结构化字段用普通索引(如publish_time索引快速按发布时间筛选),对文本内容(如title、description)采用全文索引(如MySQL的FULLTEXT索引或Elasticsearch),实现高效文本检索。这样设计既能满足结构化查询需求,又能灵活处理非结构化数据,提升整体系统性能。”
6) 【追问清单】
7) 【常见坑/雷区】