PDF 试卷资源管理方案设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dream4ever
V2EX    Web Dev

PDF 试卷资源管理方案设计

  •  
  •   dream4ever 2021 年 1 月 4 日 2870 次点击
    这是一个创建于 1857 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    • 对应教材版本,如人教版为 1 、XX 版为 2
    • 对应学科,如语文为 1 、数学为 2 、英语为 3
    • 对应年级,小学一年级为 1 、二年级为 2
    • 对应学期上学期为 1,下学期为 2
    • 对应单元,期中为 98,期末为 99
    • 试卷编号,对应到以上各级别分类之后,在所属分类下的试卷编号,暂定 0001 ~ 0009

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

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

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

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

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

    至于唯一标识,可能我没说清楚,并不是物理文件的文件名,而是数据库一张表的一条记录中的"id",用来唯一对应一份试卷。不过这么有规律,的确太容易被爬了,是得考虑这方面的反制措施,多谢建议。
    baobao1270
        3
    baobao1270  
       2021 年 1 月 4 日
    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 值。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2912 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:17 PVG 12:17 LAX 20:17 JFK 23:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86