DigitalPlatform / dp2

Integrated Library System / 图书馆集成系统
http://digitalplatform.github.io/dp2
Apache License 2.0
105 stars 54 forks source link

dp2kernel 外接对象存储机制设计 #1160

Open DigitalPlatform opened 1 year ago

DigitalPlatform commented 1 year ago

目前 dp2kernel 是利用 SQL 数据库记录的 image 类型字段或者本地对象文件存储对象。希望设计一种接口机制,允许 dp2kernel 利用外部对象存储来存储这些对象。

目前可以想到的外部对象存储方式有如下这些:

接口应该设计成一种标准的 API,然后根据不同的存储方式实现这些 API 的功能。

为了节省存储空间,存储系统可以建立一种内容 hash 和物理文件的对照关系,凡是相同的内容只在存储系统中存储一份。每一个引用事项删除的时候,自动检查它是不是引用这个物理文件的最后一个引用事项,如果是,则一并删除物理文件;否则还将保留物理文件。不过,这种存储策略是可选的,从 API 角度并没有规定必须采用这种存储策略。当然,API 角度要做一些配合,比如可能需要传递内容 hash。

存储系统应当实现独立的备份和恢复机制,当存储系统被损坏后,可以用备份进行恢复。建议采用大备份和日备份结合的方式。大备份可以考虑采用某种增量 delta 备份的方式(即不再备份以前备份过的内容),节省备份存储空间。

最后剩下一个问题,dp2kernel 内置的对象管理机制,还需要用这套 API 改写么?或者说取消以前的内置机制,默认使用一套文件型的 API 实现代替。