PDF 试卷资源管理方案设计

2021-01-04 11:39:10 +08:00
 dream4ever

最近在做一项业务,面向中小学生提供在线查看的试卷资源,试卷全部为 PDF 文件。为了方便及规范管理,每份试卷会在数据库中生成一个唯一标识,标识里会记录下面这些信息:

最终某份试卷的唯一标识就会是 2112010001 这种形式,这样不管是我们这边进行管理,还是用户反馈试卷上的各种问题,都可以通过这个唯一标识迅速找到目标试卷。

试卷物理文件的存储,目前不考虑收费的 OSS 之类的方案,打算直接存放在阿里云服务器的磁盘上。

第一个问题,就是存放 PDF 物理文件的目录结构的设计,有什么好的方案可以参考么?比如根据教材版本、学科、年级等信息,放到对应的文件夹下,这样单个文件夹内的文件数量不会太多。

第二个问题就是 PDF 文件的版本控制,因为即使在发布试卷资源之前做了各种检查,也难免会有疏漏,后续还需要不断地对有问题的试卷进行修改,没有版本控制很容易一团糟。对于 PDF 这种文件,有什么合适的版本控制方案么?还是说直接 git-lfs 就可以?

2315 次点击
所在节点    Web Dev
3 条回复
jucelin
2021-01-04 11:47:22 +08:00
这种可视化管理,其实是线下图书馆的管理思路。
如果换成线上,可以把纬度(教材版本、学科等)全部维护成一个字段,以后拓展查询都方便。
另外,这中有规律的命名文件名,不怕没爬吗
dream4ever
2021-01-04 12:28:03 +08:00
@jucelin 嗯,是有考虑把不同维度的数据分别存在不同的字段里,提升可扩展性。

至于唯一标识,可能我没说清楚,并不是物理文件的文件名,而是数据库一张表的一条记录中的"id",用来唯一对应一份试卷。不过这么有规律,的确太容易被爬了,是得考虑这方面的反制措施,多谢建议。
baobao1270
2021-01-04 17:29:49 +08:00
1 、同 #1,这些数据作为字段,前端可以提供筛选工具让用户进行筛选
2 、考虑如下数据库结构:
试卷表{
id 主键 INT 自增或 GUID
年级
教材
学期
……
}

试卷版本表{
id 主键 INT 自增或 GUID
试卷_id 外键:试卷表.id
修改时间
……
sha1
}

3 、即:试卷版本与试卷存在多对一关系,数据库仅仅保存试卷 PDF 文件的 SHA-1 值。
4 、物理储存上,将所有 PDF 存在同一个文件夹下。形如 "/var/path/to/pdf/" + sha1 + ".pdf"。
5 、试卷标题可存储在数据库中,并通过 HTTP 的 filename 设置。这样用户下载时,浏览器可以自动重命名为正确的文件名,而非 SHA1 值。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/741440

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX