System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及数据处理领域,尤其涉及一种基于内容版本的数据存储、读取方法、设备及存储介质。
技术介绍
1、在目前的系统中,需要对存储的非结构化数据进行版本控制用于随时回退,以及查看过往的修订记录,并针对其中重要修订创建版本,并且需要对这些数据进行审计,以及针对其中信息进行多场景查询。
2、现有的非结构化数据进行版本控制方案往往基于全量保存每一次修订完整的内容;操作记录则依赖于全量日志记录下时间,操作人,变更内容等;而这种非结构化数据的查询则依赖于非关系型数据库进行数据检索以达到预期性能要求,增加系统技术栈及风险点。
3、因此,需要设计一种基于内容版本的数据存储、读取方法、设备及存储介质,来提升内容版本管理的精度、可靠性以及效率。
技术实现思路
1、本申请提供一种基于内容版本的数据存储、读取方法、设备及存储介质,用以解决非结构化数据进行版本控制方案全量保存每一次修订完整的内容问题和非结构化数据读取的性能问题。
2、第一方面,本申请提供一种基于内容版本的数据存储方法,包括:
3、获取文件内容的变更命令,所述变更命令包括聚合根的标识符、聚合根的类型和操作命令;
4、根据所述聚合根的标识符和聚合根的类型,查询事件流信息表,以获取所述聚合根的最后状态对应的历史事件版本号,所述事件流信息表包括聚合根的标识符、聚合根的类型和聚合根最新的版本号;
5、根据所述变更命令和所述历史事件版本号,生成新的事件对象,所述新的事件对象包括聚合
6、根据所述事件发生时间将所述事件对象序列化存入事件表中,所述事件表包括聚合根的标识符、聚合根的类型、事件类型和事件对象序列化结果。
7、在一种可能的设计中,所述获取所述文件内容的变更命令之前,所述方法还包括:
8、获取所述文件内容的打开命令,所述打开命令包括聚合根的标识符和聚合根的类型;
9、根据所述聚合根的标识符和聚合根的类型,查询所述事件表,以判断所述事件表中是否存储已操作命令对应的至少一个历史事件对象;
10、若是,则根据所述至少一个历史事件对象进行重放处理,获取所述聚合根的最后状态;
11、若否,则将所述聚合根的初始状态作为所述最后状态;
12、对应的,所述生成新的事件对象之后,所述方法还包括:
13、根据所述新的事件对象,对所述最后状态进行修改,得到所述聚合根的新的状态。
14、在一种可能的设计中,所述根据所述变更命令和所述历史事件版本号,生成新的事件对象,包括:
15、若所述历史事件版本号存在,则对所述历史事件版本号进行递增处理,得到新的事件版本号;
16、若所述历史事件版本号不存在,则将初始化版本号作为所述新的事件版本号;
17、根据所述聚合根的标识符、所述聚合根的类型、所述新的事件版本号、所述事件发生时间和所述操作命令对应的变更内容,生成所述新的事件对象。
18、在一种可能的设计中,所述根据所述事件发生时间将所述事件对象序列化存入事件表中,包括:
19、将所述事件对象添加到暂存事件容器;
20、根据所述事件发生时间,将所述暂存事件容器中的事件对象序列化存入所述事件表中,并将所述事件对象从所述暂存事件容器中删除;
21、将所述聚合根的标识符、聚合根的类型和所述新的事件版本号存储至所述事件流信息表。
22、在一种可能的设计中,所述根据所述事件发生时间将事件对象序列化存入所述事件表中之后,所述方法还包括:
23、根据快照异步策略,生成所述事件表中的事件对象对应的聚合快照,并存储在聚合快照表中;所述聚合快照表包括所述聚合根的标识符,聚合根的类型和聚合快照的序列化数据。
24、在一种可能的设计中,所述根据所述事件发生时间将所述事件对象序列化存入事件表中之后,所述方法还包括:
25、监听数据库日志,以获取所述事件表中的事件对象;
26、将所述事件对象通过事件发布器进行发布,以使得不同的应用或服务根据所述事件对象进行状态变更,并持久化得到对应的物化视图。
27、第二方面,本申请提供一种基于内容版本的数据读取方法,包括:
28、获取查询指令,所述查询指令包括聚合根的标识符、聚合根的类型和待查询的目标版本号;
29、根据所述查询指令查询事件流信息表,以判断是否存在所述目标版本号;
30、若是,则根据所述目标版本号查询所述事件表,以获取所述目标版本号对应的序列化的事件对象;其中,所述事件表是通过如上第一方面所述的方法生成;
31、根据所述序列化的事件对象,重放生成所述目标版本号的版本内容。
32、在一种可能的设计中,所述根据所述目标版本号查询所述事件表,以获取所述目标版本号对应的序列化的事件对象,包括:
33、根据所述聚合根的标识符、聚合根的类型查找聚合快照表,以判断所述聚合快照表中是否存储有对应的聚合快照的序列化数据,其中,所述聚合快照表包括所述聚合根的标识符,聚合根的类型和聚合快照的序列化数据;
34、若是,则根据所述目标版本号查询所述事件表,以获取除所述聚合快照的序列化数据之外的所述目标版本号对应的目标序列化的事件对象;
35、对应的,所述根据所述序列化的事件对象,重放生成所述目标版本号的版本内容,包括:
36、根据所述聚合快照的序列化数据和所述目标序列化的事件对象,重放生成所述目标版本号的版本内容。
37、第三方面,本申请提供一种基于内容版本的数据存储装置,包括:
38、获取模块,用于获取文件内容的变更命令,所述变更命令包括聚合根的标识符、聚合根的类型和操作命令;
39、处理模块,用于根据所述聚合根的标识符和聚合根的类型,查询事件流信息表,以获取所述聚合根的最后状态对应的历史事件版本号,所述事件流信息表包括聚合根的标识符、聚合根的类型和聚合根最新的版本号;
40、所述处理模块,还用于根据所述变更命令和所述历史事件版本号,生成新的事件对象,所述新的事件对象包括聚合根的标识符、聚合根的类型、新的事件版本号、事件发生时间和所述操作命令对应的变更内容;
41、执行模块,用于根据所述事件发生时间将所述事件对象序列化存入事件表中,所述事件表包括聚合根的标识符、聚合根的类型、事件类型和事件对象序列化结果。
42、在一种可能的设计中,所述处理模块还具体用于:
43、获取所述文件内容的变更命令之前,获取所述文件内容的打开命令,所述打开命令包括聚合根的标识符和聚合根的类型;
44、根据所述聚合根的标识符和聚合根的类型,查询所述事件表,以判断所述事件表中是否存储已操作命令对应的至少一个历史事件对象;
...【技术保护点】
1.一种基于内容版本的数据存储方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述获取所述文件内容的变更命令之前,所述方法还包括:
3.根据权利要求1所述的方法,其特征在于,所述根据所述变更命令和所述历史事件版本号,生成新的事件对象,包括:
4.根据权利要求1所述的方法,其特征在于,所述根据所述事件发生时间将所述事件对象序列化存入事件表中,所述事件表包括聚合根的标识符、聚合根的类型、事件类型和事件对象序列化结果,包括:
5.根据权利要求1所述的方法,其特征在于,所述根据所述事件发生时间将所述事件对象序列化存入事件表中之后,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,所述根据所述事件发生时间将所述事件对象序列化存入事件表中之后,所述方法还包括:
7.一种基于内容版本的数据读取方法,其特征在于,包括:
8.根据权利要求7所述的方法,其特征在于,所述根据所述目标版本号查询所述事件表,以获取所述目标版本号对应的序列化的事件对象,包括:
9.一种基于内容版本的
10.一种基于内容版本的数据读取装置,其特征在于,包括:
11.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至8任一项所述的方法。
...【技术特征摘要】
1.一种基于内容版本的数据存储方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述获取所述文件内容的变更命令之前,所述方法还包括:
3.根据权利要求1所述的方法,其特征在于,所述根据所述变更命令和所述历史事件版本号,生成新的事件对象,包括:
4.根据权利要求1所述的方法,其特征在于,所述根据所述事件发生时间将所述事件对象序列化存入事件表中,所述事件表包括聚合根的标识符、聚合根的类型、事件类型和事件对象序列化结果,包括:
5.根据权利要求1所述的方法,其特征在于,所述根据所述事件发生时间将所述事件对象序列化存入事件表中之后,所述方法还包括:
6.根据权利要求1所述的方法,其特征在于,所述根据所述事件...
【专利技术属性】
技术研发人员:康兴茂,
申请(专利权)人:中国联合网络通信集团有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。