Skip to content

对象存储 #7

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用本地文件存储大对象。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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