-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
书目中立格式 #5
Comments
书目中立格式(作废)于20180509作废,详细原因参见后面跟帖 书目记录
ISBN
题名与责任者说明
|
最近一段时间尝试做书目MARC数据的中立格式,用MongoDB数据库存储。 试验下来发现MongoDB C# Driver的类结构,不足以表示MARC字段或子字段的顺序及内在关系。
但实际情况是,200 字段的子字段数量较多,子字段之间也有复杂的内在关系,比如$a$f是成对出现的,不能简单把它的子字段打散了随便存储,一定要描述好子字段之间的内在逻辑联系才行。 当初提出设计书目中立格式主要是两个目的:一是创建输出格式(例如 ISBD) 方便; 关于书目的检索换一个方案:退回用传统关系数据库的方法,突破“记录”边界,不试图用一个物理记录描述一个 MARC 记录,而是用若干物理 mongodb 记录从逻辑上组织起来描述一条 MARC 记录中的重复字段。dp2 的 keys 表方法就是一个典型的方法,用若干原本散乱平行的物理记录,用一个记录 ID 字段联络起来构成一个逻辑 MARC 记录。不过这个方法的缺点是,原本只需要操作一条物理记录的,现在需要操作若干条物理记录,才对应一条 MARC 记录,效率稍低。 记录三个结构的层次关系: 另外为检索点表的父ID字段建立索引,因为要根据书目记录ID检索Keys表。 虽然MARC转中立格式比较困难,但册记录的结构非常适合存到MongoDB里,让我们感动很安慰。册记录的xml结构如下:
在MongoDB对应的结构如下,这样我们检索册记录时,直接从MongoDB中检索即可,其中不用再向dp2那样建keys表了。
|
20180509与谢老师还讨论了: |
数字平台谢*回复: 你需要去了解一下mongodb 的这个 GridFS。我可以说一些自己的体会和需求,如果 GridFS 能直接满足最好了,如果不能直接满足,也有可能通过基于它包裹一层处理来间接满足。 dp2kernel 在设计这个对象管理系统的时候,是允许对象尽可能大的,即操作系统文件允许多大,一个对象就可以多大。所以在上传和下载对象的时候,肯定是分片进行的。也可以提供类似 Stream 的 API,模仿文件指针,文件读写操作。比如前一段刚开始设计的从 pdf 文件中预览的功能,有关开源模块就要用到 Stream 接口,以便从对象中获取一部分内容创建 .jpg 文件。 在上传和下载对象内容的过程中,支持多前端并发操作。并发下载没有太大问题,比较简单。但并发上传就比较麻烦了,首先是不同的前端分别独立地上传去覆盖修改同一个位置的对象,这个需要建立不同的会话,而且最好要有时间戳保护,避免交替写入混乱的内容。 dp2kernel 的一个对象记录,**利用了两套时间戳字段,意图是让这两个字段轮转,实现一边允许上传内容到临时区,一边同时允许下载进行。**比如一个大的对象需要上传一天,这一天中你不可能禁止别人下载。那样系统就没法实用了。这也是初步的会话的概念,但不完满。如果这次 dp3 要做这样的功能,可以允许多个会话,每个会话都有独立的存储区,等对象上传完成后瞬间突然切换到正式位置。 **dp2kernel 也利用了对象存储机制来存储 XML 记录。**XML 记录可以理解为元数据 ,一般不会有那么大,但从存储角度来说和对象数据其实没有什么区别,所以 dp2kernel 就用同一套设施了。从长远来看,你也确实不清楚前端是不是要用一个一百兆的 XML 文件,对不对。XML 也不总是用 XmlDocument 处理,还可以用 XmlReader 处理,reader 就是允许文件无限大的。比如 dp2 系统里面的发票库的发票记录。很难说一张发票里面总共要包括多少条册记录详情。可能会很大。 dp3 设计时候的中立格式,是为了方便处理的一个中间格式,是可以限制它的大小的。但原始数据不好做出尺寸限制。**所以原始数据存储问题必须得到彻底解决。**这是不同的问题。 dp2kernel 直接用一个一个文件来存储对象数据,一个文件对应一个对象。这是过分使用了文件系统的能力。也不是没有缺点。缺点就是拷贝的时候,成千山万个文件会有某些问题。另外初始化数据库的时候,要一瞬间删除掉成千上万的物理文件,耗时很长。如果是用一个大文件,在里面划分小块,构成链表来存储对象信息,则可能更体面合理一些。如果 GridFS 能用,也可以看看它是怎么实现的,效果如何。 在开发和探索的时候,可以分阶段实现不同的模块。* 刚开始为了集中精力解决对象存储以外的问题,可以把对象存储用一些简单的机制实现,先不考虑并发上载等复杂问题。* 等后面有精力了再过来替换模块或者增补开发。对象存储这部分接口可以早期制定好,保持稳定,不会影响到其他模块的开发。 以后的正式产品中,对象存储引擎这个部分也可以提供不同的版本,让用户选用。在开发阶段多实现几个不同的版本,也有利于考验接口的合理性。 考虑到联合编目的情形,可能同一条 MARC 记录,要允许保存所有历史版本。所以存储这个模块还需要比 dp2kernel 更进步。 |
SQL反模式:SQL 建模与使用指南(分享自知乎网)https://zhuanlan.zhihu.com/p/36831350?utm_source=qq&utm_medium=social&utm_oi=30747138195456 这篇文字你参考一下: |
https://docs.mongodb.com/manual/core/gridfs/
|
书目中立格式设计思路
关于书目中立格式设计讨论:
https://github.com/DigitalPlatform/dp3/issues/1
CNMARC参考资料
书目摘要参考:http://dp2003.com:8088/doc/web/#/7?page_id=40
书目查询浏览格式:http://dp2003.com:8088/doc/web/#/7?page_id=41
书目表格格式 table_unimarc:http://dp2003.com:8088/doc/web/#/7?page_id=42
公共查询格式 opac_biblio:http://dp2003.com:8088/doc/web/#/7?page_id=43
检索点文件参考 keys:http://dp2003.com:8088/doc/web/#/7?page_id=44
其它参考资料
DC参考:http://dp2003.com:8088/doc/web/#/7?page_id=45
册记录Xml参考:http://dp2003.com:8088/doc/web/#/7?page_id=46
USMARC参考资料
书目摘要参考:http://dp2003.com:8088/doc/web/#/7?page_id=47
书目查询浏览格式:http://dp2003.com:8088/doc/web/#/7?page_id=48
公共查询格式 opac_biblio:http://dp2003.com:8088/doc/web/#/7?page_id=49
检索点文件参考 keys:http://dp2003.com:8088/doc/web/#/7?page_id=50
作废的一稿中立格式 :http://dp2003.com:8088/doc/web/#/7?page_id=62
The text was updated successfully, but these errors were encountered: