原业务流程平台审批单使用横向表纵向存储的思路,所有流程所使用的业务表单的数据都存在一张物理表中,表中每条数据记录包含Column定义和Value,Column所对应的字段信息,通过定义表来定义。这种做法就是在实现时,需要使用代码进行数据组装,比较繁琐。当表单较大时,界面展现速度慢。此方案查询统计支持有限。
为了满足可配置动态表单的需求,并解决上述方案的不足,采用NoSQL技术来优化设计,因为NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。按NoSQL的特性,可以灵活进行schema结构(列定义)的修改,理论上应该可以很好支持这些动态表单的持久化保存。
基于上述思路,采用审批单(表单)模版,以及NoSQL与关系型数据库相结合的方案,设计目标如下:
(1)使用用户化工具设计审批单模版;
(2)通过配置管理工具,配置审批单关键数据项,例如:标题、部门、关键数值(例如统计、流程流转规则所需要的)、时间等;
(3)审批单模版需要版本化管理;
(4)审批单数据存储分为两部分:一是关键字段内容,存储到关系型数据库中;整个表单(含HTML、CSS、JavaScript、图标等)连同数据内容,以文档整体对象存储到NoSQL数据库中;
(5)审批单上所涉及到的CSS、JS、图标等资源性文件,需要进行版本管理(在数据库中只保存他们的URL);
(6)历史表单查询保存原样;
(7)保留表单数据内容修改痕迹(存储流转中多版本表单),提供定期清理功能;
(8)保证高效读写性能,以及稳定性。
上述目标也适用于信息专栏内容。
另外,还有一套折中方案,也是在审批单模版的基础上,表单上非关键数据,组合成一个字符串保存(例如:JSON格式),在数据保存和提取展现时,按配置数据进行展现数据适配。
上述方案需要技术验证,欢迎读者反馈、建议。
参考资料: