mongodb初体验

mongodb初体验

开年后,需要开发一款新的工作流产品,主要用于汽车领域管理过程的管理工作,由于和去年的老产品业务类似,也就采用同一个平台。
老的平台,其中的静态数据和业务数据都是基于hibernate和mysql,ORM关系比较复杂,所以老的平台上面的相关业务代码就变的异常复杂。由于采用的是RIA方式,全部采用的是ajax来请求json数据来完成业务过程,所以数据库这一块的校验等就比较复杂。同时,由于mysql的表结构在处理关系映射的时候,多采用中间表的方式进行关联,所以在处理细部表单数据报表的时候,就比较痛苦,提起一个数据,就需要关联很多表来处理,所以有很多HQL语句写的很痛苦。
于是决定引入mongodb,由于mongodb是文件型数据库,最像关系型数据库的NOSQL数据库,也是最近几年在互联网领域应用的非常广泛的NOSQL数据库。由于系统本身的特点,对于事务要求不是很高,所以选择mongodb也是基于比较慎重的考虑。
由于系统框架使用的是spring,所以mongodb就采用spring-data-mongodb作为中间价,用法和hibernate类似。为了慎重起见,我们对于结构化的数据,比如部门、人员、权限等数据依然放在mysql中,而对于业务数据,比如元工作流,工作流,节点,表单,字段等放在mongodb中。
在设计的时候,采用单项的DBRef关联,对于子文档,同时保存父文档和祖宗文档的id,这样的好处在后期就能体现出来,我们后面细讲。
框架很快的就起来了,由于基础模块已经是很完善了,主要处理业务数据库这一块,mongodb的优势一下子就体现出来了,由于mongodb是文档型的,所以字段没有约束,可以和JAVA POJO无缝关联,在入库和更新的过程中,只需要对字符的格式进行验证和过滤即可,对于长度等无需考虑,所以代码就简单了很多。对象之间分别进行处理,关联关系相应的处理也简单了很多,代码量减少了至少三分之二,这样维护量也响应的会减少很多。
刚才讲到子文档保存父文档和祖父文档ID的原因,在于我们在维护数据的时候,可以通过父ID活着祖父ID一下子直接查出来进行维护,这样相当于将一个有层级的数据进行平面化,查询的效率就非常高,尤其是在做更新数据的时候,就更加明显。另外,对于报表数据,也同样提升了查询效率。
目前我们的应用还处于比较浅层次的基础应用,不过已经体现出了NOSQL数据库的天生优势。这一点,让我们的产品的开发效率得到了极大的提升,维护成本得到了极大的降低。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。