Skip to content

对象存储 #7

@renyh

Description

@renyh

书目记录及下级对象资源的文档结构

类型 备注
_id ObjectId dp3成员,代替dp2的id。由MongoDB自动生成的文档唯一标识,例如 ObjectId("5aaceadd3b683f1598ceb894"), 12字节,每个字节两位16进制数字。
range String 资源的字节范围,资源不完整时值形态为#0~(当前长度-1)多个range以逗号分隔,完整时值为#在dp2系统中,资源可以分块多次保存,一块的尺寸前端自己定义,目前一块尺寸是500KB(500*1024),超过这个尺寸会分成多次保存,该字段主要用于存储资源未完整时的字节范围。
dptimestamp String 资源的时间戳,形态为十六进制文本字符串,从左到右每二个字符表示一个byte的值。例如568c4a13a4b8d5080000000000000018,当资源不完整时值为null
newdptimestamp String 资源的临时时间戳,当资源不完整时有值,完整后为null,在dp2系统中,主要用于大的资源分块多次保存时,每次写后的时间戳。
metadata String 资源元数据内容,资源未完整时为null。对于书目记录,元数据格式为<file size="4145" lastmodified="2018/5/13 15:58:54" />;对于对象资源,元数据格式一般为。<file mimetype="application/octet-stream" localpath="C:\0-d\0-测试\大备份与恢复测试\l1.dp2bak" size="3298463" lastmodified="2018/5/13 15:35:18" />,dp2是这样设计的,在想dp3对于书目记录,是否就分成两个成员size和lastmodified;对于对象资源元数据字段多时再用xml表示或者也分成字段。
filename String 对于MySQL、SQLite数据库,资源本身存储在本地文件,当资源完整时,该字段存储文件名。如0000000\001。如果资源不完整值为null。
newfilename String 当资源不完整时,该字段存储临时文件名。如0000000\001_0.temp。资源完整值为null。
files Collection dp3新增的在员,用于存储对象资源,待讨论确认。

问题一:在MongoDB中,书目下的对象资源,是否用内嵌的文档来存储?
在dp2系统,书目记录与其下级的对象资源是作为1+n条记录存储在同一个数据表中,他们记录路径id有内在关联,例如书目记录的id是0000000001,它的第1个对象的路径id为0000000001_0,第2个对象的路径id为0000000001_1

外部访问资源的路径也有规则,书目记录路径为:数据库名/书目记录id,例如中文图书/1
书目下的对象路径格式为数据库名/书目记录id/object/对象id,例如中文图书/1/object/0

在MongoDB中,书目记录与其下级的对象,可以考虑用一条文档存储,书目文档中有个成员是files,files是个集合,用于存储下级对象。

目前觉得对象的结构与书目记录结构类似。

问题二:关于像书目Xml这类资源的结构,是否有些字段可以不要
如果将书目与对象资源分成不同的结构,对于书目记录结构,不知是否会超过500KB(一般不会吧),如果不超过就可以一次性保存,那么还需要这些range,newdptimestamp,newfilename字段吗?

另外考虑数据库中第一层的结构,可能会存除了书目xml之外的资源,比如新闻一类其它信息,尺寸比较大的情况。

问题三:在MongoDB中,考虑是用二进制类型,还是用本地文件
MongoDB的二进制类型,最大尺寸限制是16MB,对于XML一类是够了。
对于大的对象,有可能超过这个尺寸。MongoDB有关于大文件存储的GridFs,还没有学习。是否先考虑参考dp2用本地文件存储大对象。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions