上周与D老师的会议上进行了PPT展示,主要内容是对项目的整体理解。发现的问题是:需求功能点基本梳理清楚,具体的理解与实现方法还有很大的差距,需要多补充基础知识。 同时先前制定的XML规范被驳回,老师帮助重新梳理了XML规范,讲通应该如何制定。小组本周会重新整理。 本周学习mongodb并分析目前项目的数据库架构。MongoDB是文档型的非关系型数据库。最直观的理解是,在关系型数据库中每一行的数据,对应mongodb里是一个文档。
mongodb的文档是以binary json格式存储的,其格式就是json格式。一个document里可以包含多种类型的field,可以是日期、数字等,也可以是数组,还可以内嵌别的文档。
MongoDB没有固定的行列组织结构,这是no-sql与rdbms最大的区别之一,同时mongodb也不需要预先定义字段类型与数量,可灵活增加或变更字段,对于频繁变化的业务的数据模型非常适合。
MongoDB不支持join,对类似情况的处理方式是直接将有关联的表信息组织成嵌套的层级文档结构。 发现其优点是减少了上层文档的数据冗余,如果是embedded data形式的话,可以一次获取对应关系的所有明细数据。
本项目数据库部分代码分析: 需要存储:
- 用户信息
- 日志
- 古籍信息
- 文章信息
- 古文字信息
- 图片信息
其中,用户信息、古籍信息和日志采用mysql存储。 文章信息由于古文格式多样化,部分信息可能缺失,因此采用mongoDB存储,从而节省存储空间。古文字同理也采用mongoDB存储。
文章信息 文章是多种多样的,有些文章可能作者信息丢失,有些文章可能缺失数据,因此使用mongoDB,减少空白数据的空间占用。 { “_id”: ObjectId(“604df4373e48000080001e62”), “title”: “”, “bookname”: “”, “articleAuthor”: “”, “content”: “”, “imgurl”: “”, “notes”: [ { “word”: “”, “pronunciation”: “”, “annotation”: “”, “location”: “”, “label”: [ ] } ], “XML”: “”, “annotation”: “”, “page”: 0 }
其中notes是一个对象数组,储存每个字的简要信息,方便查询,格式如下: “notes”: [ { “word”: “”, “pronunciation”: “”, “annotation”: “”, “location”: “”, “label”: [ ] } ],
古文字信息 古文字信息可扩展性很强,使用mongoDB存储,并且实现了倒排索引来加快查询速度
结构如下: { “_id”: ObjectId(“604df63f3e48000080001e63”), “word”: “”, “pronunciation”: “”, “meaning”: “”, “notes”: “”, “imgurl”: “”, “diff_form”: [ { “id”: “” } ], “diff_pron”: [ { “id”: “” } ], “article”: [ { “id”: “” } ] }
|