CN109871373B - 一种数据存储方法和装置、计算机可读存储介质 - Google Patents
一种数据存储方法和装置、计算机可读存储介质 Download PDFInfo
- Publication number
- CN109871373B CN109871373B CN201910100842.7A CN201910100842A CN109871373B CN 109871373 B CN109871373 B CN 109871373B CN 201910100842 A CN201910100842 A CN 201910100842A CN 109871373 B CN109871373 B CN 109871373B
- Authority
- CN
- China
- Prior art keywords
- data
- database
- stored
- modification time
- version
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据存储方法和装置、计算机可读存储介质,所述方法包括:检测待存储数据为最新版本或历史版本数据;如果为最新版本数据,同时通过第一数据库和第二数据库存储待存储数据及其对应的修改时间,第一数据库用于存储最新版本数据,第二数据库用于存储所有版本数据,第二数据库中修改时间在一个预设的时间宽度范围内的一个或多个版本存储为一行;如果为历史版本数据,通过第二数据库存储待存储数据及其对应的修改时间。本申请通过第一数据库和第二数据库分别存储最新版本和历史版本数据,并将第二数据库中修改时间在一个时间宽度范围内的版本存储为一行,能够快速地查询任意时间点上的数据状态并尽量减少历史存储空间的消耗。
Description
技术领域
本申请涉及但不限于数据处理技术领域,尤其涉及一种数据存储方法和装置、计算机可读存储介质。
背景技术
知识图谱被用来描述真实世界中存在的各种事物以及它们之间的关联关系,一种知识图谱的描述方式包括:实体(即知识图谱中的点)、关系(即知识图谱中的边)及和实体或者关系关联的属性。其中,实体拥有多个属性,且由一个主键字段进行唯一标示;关系亦拥有多个属性,且由关系的主体主键字段及关系的客体主键字段进行唯一标示。
由于知识图谱中的实体、关系数据是从原始数据(包括结构化、半结构化、非结构化数据)抽取得到,而原始数据会发生变化,比如数据表的一个字段值被修改,导致知识图谱的实体属性、关系属性以及图谱的拓扑结构,都会随着时间的变化而变化,例如,某员工入职一个单位后来又离职了,则该员工实体和单位实体从“有聘用关系”变为“没有聘用关系”。如果采取直接更新图谱存储内容的方式(即不保留过去的历史状态),无法满足根据业务需要去查询过去时间点上的实体属性、关系属性的状态和修改历史的需求。
在现有的数据库领域中,对于历史版本的支持方式有以下几种:
(1)通过检查点(Checkpoint)的方式创建快照(Snapshot),并将每个Snapshot视为一个版本,某些关系型数据库(如MySQL)等使用的就是这种方案。这种方案的缺点在于Snapshot往往只能针对所有的数据,无法针对单个的元素(即实体或者关系)进行细粒度的操作,并且Snapshot占用的空间很大;
(2)通过链表结构存储每条记录的历史版本,比如一个数据从v1变成v2,则数据库中存储v2->v1这样的链表结构来体现最新值为v2。这种方案添加新的版本很快,但由于链表结构查询效率是线性的(即O(N)时间复杂度),无法快速查询历史状态;
(3)用图数据库的关系数据记录关系和实体的不同历史状态,这种方案的问题是对于有频繁数据修改的实体,它在图数据库中的关系边会比没有记录历史状态的情况膨胀很多倍(每一个历史状态都会产生一条新的关系边),因此会极大地影响图谱当前最新状态下的图遍历速度;此外,为了能根据历史时间点查询历史状态,需要为这些记录历史状态的关系边上的有效起止时间建立复杂的索引;
(4)像Hbase(Hadoop Database)等存储方案提供的多版本并发控制(Multi-Version Concurrency Control,MVCC)方案,为了性能和存储空间的考虑,一般只会保留最新的少数几个版本,比较旧的版本会随时间推移被删除。
此外,在不同的使用场景中,数据被修改的频率存在差异,比如,有的情况下数据一个月会更新几次,有的情况下一天内会被更新多次,如何能根据具体情况灵活地记录数据更新历史,在满足对任意历史时间点的修改历史查询需求的情况下,尽量减少历史存储空间的消耗,是一个重要的待解决问题。
发明内容
本发明实施例提供了一种数据存储方法和装置、计算机可读存储介质,能够快速地查询任意时间点上的数据状态并尽量减少历史存储空间的消耗。
本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种数据存储方法,包括:
检测待存储数据为最新版本的数据或历史版本的数据;
如果为最新版本的数据,则同时通过第一数据库和第二数据库存储所述待存储数据及所述待存储数据对应的修改时间,其中,第一数据库用于存储最新版本的数据,第二数据库用于存储所有版本的数据,第二数据库中修改时间在一个预设的时间宽度范围内的一个或多个版本存储为一行;
如果为历史版本的数据,则通过第二数据库存储所述待存储数据及所述待存储数据对应的修改时间。
在一实施例中,所述第一数据库中各行数据由数据的主属性进行标识;所述第二数据库中各行数据由所述数据的主属性和所述修改时间所属的第k个所述时间宽度范围:k*d进行标识,其中,k为自然数,d为预设的时间宽度范围。
在一实施例中,在所述第二数据库的各行数据中,预设的第一存储位置存储有所述数据的全部属性及属性值,除所述第一存储位置之外的存储位置存储有所述数据的增量更新值。
在一实施例中,所述第二数据库中的数据的存储结构为键值对存储结构,所述键值对存储结构中的键为所述各版本的修改时间t及其所属的第k个时间宽度范围d的差值,即(t-k*d),所述键值对存储结构中的值为所述数据的全部属性及属性值或所述数据的增量更新值,所述键值对存储结构中的值采用预定义的Java脚本对象表示法JSON数据结构。
在一实施例中,当所述增量更新值为删除数据时,所述JSON数据结构包含预定义的第一删除标识;
当所述增量更新值为删除数据的属性时,所述JSON数据结构包含预定义的第二删除标识。
在一实施例中,所述数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。
在一实施例中,所述数据包括以下至少之一:实体、关系,所述关系的主属性包括关系的两个端点实体的主属性及关系的类型。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如以上任一项所述的数据存储方法的步骤。
本发明实施例还提供了一种数据存储装置,包括处理器及存储器,其中:所述处理器用于执行存储器中存储的程序,以实现如以上任一项所述的数据存储方法的步骤。
本发明实施例还提供了一种数据存储装置,包括检测模块和处理模块,其中:
所述检测模块,用于检测待存储数据为最新版本的数据或历史版本的数据,如果为最新版本的数据,发送第一通知至处理模块,如果为历史版本的数据,发送第二通知至处理模块;
所述处理模块,用于接收到第一通知,同时通过第一数据库和第二数据库存储所述待存储数据及所述待存储数据对应的修改时间,其中,第一数据库用于存储最新版本的数据,第二数据库用于存储所有版本的数据,第二数据库中修改时间在一个预设的时间宽度范围内的一个或多个版本存储为一行;接收到第二通知,通过第二数据库存储所述待存储数据及所述待存储数据对应的修改时间。
本发明实施例提供的数据存储方法和装置、计算机可读存储介质,通过第一数据库和第二数据库分别存储最新版本的数据和所有版本的数据,并将第二数据库中修改时间在一个时间宽度范围内的版本存储为一行,不仅可以在不影响最新状态的数据遍历效率的情况下,快速地查询任意时间点上的数据的历史状态,而且可以尽量减少历史存储空间的消耗。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例的一种数据存储方法的流程示意图;
图2为本发明实施例的一种数据存储装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
如图1所示,根据本发明实施例的一种数据存储方法,包括如下步骤:
步骤101:检测待存储数据为最新版本的数据或历史版本的数据;
在本发明的一实施例中,所述步骤101具体包括:
检测第一数据库或第二数据库中是否包含待存储数据的主属性;
当第一数据库或第二数据库中包含待存储数据的主属性时,获取所述待存储数据对应的修改时间,将所述获取的修改时间与第一数据库或第二数据库中存储的待存储数据的修改时间进行比较;
如果第一数据库或第二数据库中不包含待存储数据的主属性,或者所述获取的修改时间在第一数据库中所述待存储数据的修改时间之后,则判断所述待存储数据为最新版本的数据;
如果第一数据库或第二数据库中包含待存储数据的主属性且所述获取的修改时间在第一数据库中所述待存储数据的修改时间之前,则判断所述待存储数据为历史版本的数据。
在本发明的一实施例中,所述数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。
需要说明的是,本申请使用两种不同的存储方式(分别为图数据库、表数据库)实现以下存储方案:
图数据库,比如Titan Graph(一个分布式图数据库,特别为存储和处理大规模图而优化),用于存储图中的点(即实体)的最新版本状态,图中的边(即关系)的最新版本状态;
带树结构索引的表数据库,比如带有日志结构的合并树(Log Structured MergeTree,LSM-tree)树索引的Hbase,用于存储图中的点的所有版本(包括历史版本和最新版本)状态、图中的边的所有版本状态。
在本发明的一实施例中,所述数据包括以下至少之一:实体、关系,所述关系的主属性包括关系的两个端点实体的主属性及关系的类型。
需要说明的是,实体是产生事件的一个个体,是事件发生的主体,比如火车事件,它是以人为主,则这个实体就是某个人,而表示一个人的方式有多种,如:身份证,护照号,军官证等,所以有时也将一个具体表示一个人的唯一ID作为一个实体。实体关联的属性即实体的详细信息,例如在火车事件中,实体关联的属性有车次、车厢、座位号、发站、到站等信息。
在本发明的一实施例中,第一数据库中各行数据由数据的主属性进行标识。如表1所示,实体通过主属性(Key)进行标识,实体关联的属性包括一个或多个键值(Key-Value)对,modt为该最新版本的修改时间。
表1
在表1中,实体的最新版本由唯一主属性Key标识,一个实体包含多个Key-Value业务属性,如果实体被删除,则将一个名为Deleted的内部属性设置为True。示例性地,在表2中,在t4时刻,由Key1标识的实体关联的属性k3被删除(此时,直接把图数据库的表2中的k3属性的内容删除),在t4时刻,由Key2标识的实体被删除(此时,没有删除图数据库的表2中的Key2标识的实体,只是在Key2标识的实体内容栏添加了预定义的删除标识)。也就是说,在实体被删除时,并不会真正地把这条记录从图数据库中删除,而是在数据库中记录一个特殊的删除标识;并且也不会连带修改该被删除实体的相关关系数据的状态(不删除对应的关系,也不会设置关系的Deleted标识)。
表2
本申请所述的关系包括显性关系和隐性关系,其中,显性关系表示实体与实体之间的关系已经客观存在,可以通过事实直接作出判断,比如亲属关系;而隐性关系就是实体与实体之间的关系无法通过简单信息就可以判断,需要一定的计算规则从历史数据做一些统计和计算才能够确定它们是否存在,这种关系是一种可能性也就是满足某个规则的两个实体只是有非常大的可能有这个关系。如表3所示,关系通过关系的两个端点实体的主属性及关系的类型进行标识,关系关联的属性包括一个或多个键值对。
表3
在表3中,关系的最新版本由关系的两个端点实体的唯一主属性(表中的Key1和Key2)以及关系的类型(label)唯一标识,一个关系包含多个Key-Value业务属性,与实体被删除时的处理方法类似,如果关系的最新版本被删除,则将内部属性Deleted删除标识设置为True。
在本发明的一实施例中,第二数据库中各行数据由所述数据的主属性和所述修改时间所属的第k个所述时间宽度范围:k*d进行标识,其中,k为自然数,d为预设的时间宽度范围。
在表4中,利用表数据库的线性分布式可扩展性,表数据库中存储一个被修改实体的所有版本。如表4所示,各行实体数据通过实体的主属性以及该行实体数据所属的第k个时间宽度范围进行标识(d1即表示各行实体数据所属的第k个时间宽度范围d,即d1=k*d)。
表4
其中,Max_Long代表计算机系统中长整型整数的最大值,拼接版本的唯一标识时通过(Max_Long-d1)对修改时间进行转换,当检索实体或关系的状态时,如果用户没有输入需要检索的数据的修改时间或时间范围,则取(Max_Long-d1)整体值最小的版本即为最新版本,便于快速检索。
在该实施例的一示例中,在所述第二数据库的各行数据中,预设的第一存储位置存储有所述数据的全部属性及属性值,除所述第一存储位置之外的存储位置存储有所述数据的增量更新值。示例性地,在表4中,第一存储位置为各行数据中的第一个数据存储位置。
在该实施例的一示例中,所述第二数据库中的数据的存储结构为键值对存储结构,所述键值对存储结构中的键为所述各版本的修改时间t及其所属的第k个时间宽度范围d的差值,即(t-k*d),所述键值对存储结构中的值为所述数据的全部属性及属性值或所述数据的增量更新值,所述键值对存储结构中的值采用预定义的Java脚本对象表示法(JavaScript Object Notation,JSON)数据结构。
需要注意的是,这里的d1并不是直接使用所述待存储数据对应的修改时间t,而是根据用户配置指定的版本划分粒度(即预设的时间宽度范围d)计算得到的。假设d=1天=24小时*3600秒/小时*1000毫秒/秒=86400000毫秒,则d1=t-t%d=t-t%864000000=k*86400000,%为取模余操作符,k为自然数。一行数据里的第一个Key-Value存储该时间宽度范围内实体所有的初始属性值,后续的每一个Key-Value存储该时间宽度范围内的增量更新值,Key-Value的Key为各版本的修改时间t及其所属的第k个时间宽度范围d的差值ti=t-k*d=t–d1,i为大于或等于0的整数,Value是这次修改中涉及的属性内容的JSON数据结构。
表5
在表5中,关系版本同样存储的是一条关系数据的所有版本。各行关系数据由关系的两个端点实体的主属性Key1和Key2、关系的类型label以及该行关系版本对应的时间宽度范围d1唯一标识,拼接唯一标识时与实体版本一样通过(Max_Long-d1)对修改时间t进行转换。对于每个关系版本的属性存储方式与实体类似。
对于进入本申请的知识图谱系统的新的实体或关系数据,在内部处理时均被赋予一个修改时间t,如果已指定使用实体/关系的一个属性作为该修改时间的来源则直接使用,如果没有指定则使用当前系统时间戳。
在本发明的一实施例中,当所述增量更新值为删除数据时,所述JSON数据结构包含预定义的第一删除标识;
当所述增量更新值为删除数据的属性时,所述JSON数据结构包含预定义的第二删除标识。
如表6所示,在t4时刻,由Key1标识的实体关联的属性k3被删除;在t4时刻,由Key2标识的实体整体被删除。
表6
步骤102:如果为最新版本的数据,则同时通过第一数据库和第二数据库存储所述待存储数据及所述待存储数据对应的修改时间,其中,第一数据库用于存储最新版本的数据,第二数据库用于存储所有版本的数据,第二数据库中修改时间在一个预设的时间宽度范围内的一个或多个版本存储为一行;
值得注意的是,本申请中,增加一个新的实体修改历史记录与增加一个新的关系修改历史记录,除了行键的组成方式有差异之外,其他逻辑一致。
在本发明的一实施例中,当增加一个新的实体或关系的版本时,如果该版本为最新版本的数据,则往图数据库中覆盖写入所述增加的版本的内容,并记录modt=t;同时按照以上介绍的方式计算得到d1的值,在表数据库中添加一行数据,这行数据只有一个Key-Value,Key为(t-d1),Value为该实体或关系的所有属性值的JSON数据结构。
步骤103:如果为历史版本的数据,则通过第二数据库存储所述待存储数据及所述待存储数据对应的修改时间。
在本发明的一实施例中,当增加一个新的实体或关系的版本时,如果该版本为历史版本的数据,则从图数据库中把旧的记录内容(记作S1)读出来,按照以上介绍的方式计算得到本次修改操作的d1值,拼接成RowKey在表数据库中查询该行记录是否存在;
如果该行记录存在,则往表数据库中追加一个Key-Value,Key为t-d1,Value为本次修改的增量属性修改内容S’;
如果该行记录不存在,则参照以上介绍的行键拼接方式,在表数据库中新建一行,并将S1与S’进行合并(即不在S’范围内的其他属性值采用S1里的,在S’范围内的属性值使用S’里定义的),得到S2,以(t-d1)作为这行数据第一个Key-Value的Key,以S2的JSON数据结构作为Value。
本发明实施例还提供了一种存储介质,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如以上任一项所述的数据查存储方法的步骤。
本发明实施例还提供了一种数据存储装置,包括处理器及存储器,其中:所述处理器用于执行存储器中存储的程序,以实现如以上任一项所述的数据存储方法的步骤。
如图2所示,本发明实施例还提供了一种数据存储装置,包括检测模块201和处理模块202,其中:
所述检测模块201,用于检测待存储数据为最新版本的数据或历史版本的数据,如果为最新版本的数据,发送第一通知至处理模块202,如果为历史版本的数据,发送第二通知至处理模块202;
所述处理模块202,用于接收到第一通知,同时通过第一数据库和第二数据库存储所述待存储数据及所述待存储数据对应的修改时间,其中,第一数据库用于存储最新版本的数据,第二数据库用于存储所有版本的数据,第二数据库中修改时间在一个预设的时间宽度范围内的一个或多个版本存储为一行;接收到第二通知,通过第二数据库存储所述待存储数据及所述待存储数据对应的修改时间。
在本发明的一实施例中,所述检测模块201具体用于:
检测第一数据库或第二数据库中是否包含待存储数据的主属性;
当第一数据库或第二数据库中包含待存储数据的主属性时,获取所述待存储数据对应的修改时间,将所述获取的修改时间与第一数据库或第二数据库中存储的待存储数据的修改时间进行比较;
如果第一数据库或第二数据库中不包含待存储数据的主属性,或者所述获取的修改时间在第一数据库中所述待存储数据的修改时间之后,则判断所述待存储数据为最新版本的数据;
如果第一数据库或第二数据库中包含待存储数据的主属性且所述获取的修改时间在第一数据库中所述待存储数据的修改时间之前,则判断所述待存储数据为历史版本的数据。
在本发明的一实施例中,所述数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。
在本发明的一实施例中,所述数据包括以下至少之一:实体、关系,所述关系的主属性包括关系的两个端点实体的主属性及关系的类型。
在本发明的一实施例中,第一数据库中各行数据由数据的主属性进行标识。在表1中,实体的最新版本由唯一主属性Key标识,一个实体包含多个Key-Value业务属性,如果实体被删除,则将一个名为Deleted的内部属性设置为True。示例性地,在表2中,在t4时刻,由Key1标识的实体关联的属性k3被删除,在t4时刻,由Key2标识的实体被删除。也就是说,在实体被删除时,并不会真正地把这条记录从图数据库中删除,而是在数据库中记录一个特殊的删除标识;并且也不会连带修改该被删除实体的相关关系数据的状态(不删除对应的关系,也不会设置关系的Deleted标识)。
在表3中,关系的最新版本由关系的两个端点实体的唯一主属性(表中的Key1和Key2)以及关系的类型(label)唯一标识,一个关系包含多个Key-Value业务属性,与实体被删除时的处理方法类似,如果关系的最新版本被删除,则将内部属性Deleted删除标识设置为True。
在本发明的一实施例中,第二数据库中各行数据由所述数据的主属性和所述修改时间所属的第k个所述时间宽度范围:k*d进行标识,其中,k为自然数,d为预设的时间宽度范围。
在表4中,利用表数据库的线性分布式可扩展性,表数据库中的实体版本存储一个被修改实体的所有版本。如表4所示,各行实体数据通过实体的主属性以及该行实体数据所属的第k个时间宽度范围进行标识(d1即表示各行实体数据所属的第k个时间宽度范围)。
表中的Max_Long代表计算机系统中长整型整数的最大值,拼接版本的唯一标识时通过(Max_Long-d1)对修改时间进行转换,当检索实体或关系的状态时,如果用户没有输入需要检索的数据的修改时间或时间范围,则取(Max_Long-d1)整体值最小的版本即为最新版本,便于快速检索。
在该实施例的一示例中,在所述第二数据库的各行数据中,预设的第一存储位置存储有所述数据的全部属性及属性值,除所述第一存储位置之外的存储位置存储有所述数据的增量更新值。示例性地,在表4中,第一存储位置为各行数据中的第一个数据存储位置。
在该实施例的一示例中,所述第二数据库中的数据的存储结构为键值对存储结构,所述键值对存储结构中的键为所述各版本的修改时间t及其所属的第k个时间宽度范围d的差值,即(t-k*d),所述键值对存储结构中的值为所述数据的全部属性及属性值或所述数据的增量更新值,所述键值对存储结构中的值采用预定义的JSON数据结构。
需要注意的是,这里的d1并不是直接使用所述待存储数据对应的修改时间t,而是根据用户配置指定的版本划分粒度(即预设的时间宽度范围d)计算得到的。假设d=1天=24小时*3600秒/小时*1000毫秒/秒=86400000毫秒,则d1=t-t%d=t-t%864000000=k*86400000,%为取模余操作符,k为自然数。一行数据里的第一个Key-Value存储该时间宽度范围内实体所有的初始属性值,后续的每一个Key-Value存储该时间宽度范围内的增量更新值,Key-Value的Key为各版本的修改时间t及其所属的第k个时间宽度范围d的差值ti=t-k*d=t–d1,i为大于或等于0的整数,Value是这次修改中涉及的属性内容的JSON数据结构。
在表5中,关系版本同样存储的是一条关系数据的所有版本。各行关系数据由关系的两个端点实体的主属性Key1和Key2、关系的类型label以及该行关系版本对应的时间宽度范围d1唯一标识,拼接唯一标识时与实体版本一样通过(Max_Long-d1)对修改时间t进行转换。对于每个关系版本的属性存储方式与实体类似。
对于进入本申请的知识图谱系统的新的实体或关系数据,在内部处理时均被赋予一个修改时间t,如果已指定使用实体/关系的一个属性作为该修改时间的来源则直接使用,如果没有指定则使用当前系统时间戳。
在本发明的一实施例中,当所述增量更新值为删除数据时,所述JSON数据结构包含预定义的第一删除标识;
当所述增量更新值为删除数据的属性时,所述JSON数据结构包含预定义的第二删除标识。
在使用本申请的数据存储方法和装置、计算机可读存储介质时,如果需要查询一个指定修改时间t的实体或关系的版本记录,首先检查待查询数据是否是当前最新版本的数据,如果是当前最新版本的数据,则可以直接从图数据库中读取;
如果不是当前最新版本的数据,首先需要根据指定的修改时间t计算得到其所属的时间宽度范围d1(d1=k*d,k为自然数,d为预设的时间宽度范围),然后结合实体或关系的主属性,拼成行键RowKey,在表数据库中查询行键对应的数据是否存在,如果该行数据不存在,则查询(k-1)*d对应的行键标识的数据是否存在,如果(k-1)*d对应的行键标识的数据不存在,则查询(k-2)*d对应的行键标识的数据是否存在,依次类推,直至查询到1*d对应的行键标识的数据不存在,代表指定的修改时间t前没有该数据的修改历史,返回空结果;
假设在上述查询过程中,查询到d1对应的行键标识的行数据不存在但(k-j)*d对应的行键标识的行数据存在,j为大于或等于1的自然数,则将(k-j)*d对应的行键标识的行数据中所有属性修改记录按每个Value中的属性名进行合并,修改时间较新的属性值覆盖修改时间较旧的,把合并后的结果返回;如果想获取离指定的修改时间t最近的一次修改操作的内容,则只要把(k-j)*d对应的行键标识的行数据中时间最新的一个Key-Value返回即可;
假设在上述查询过程中,查询到d1对应的行键标识的行数据存在,则通过表数据库的列筛选器(Column Filter)查询,通过条件col<=(t–d1),过滤出该行数据中在指定的修改时间t之前的所有属性修改记录(记作C1)。将C1中的多个Key-Value按每个Value中的属性名进行合并,修改时间较新的属性值覆盖修改时间较旧的,把合并后的结果返回;如果想获取离指定的修改时间t最近的一次修改操作的内容,则只要把C1中时间最新的一个Key-Value返回即可。
示例性地,假设当前图数据库、表数据库中未存储任何数据,在t1时刻,写入两个实体、一个关系,存储的数据状态如表7、表8、表9和表10所示(假设配置了d=1天=86400000毫秒,其中,d1=(t–t%86400000),t0=t–d1):
表7
表8
表9
表10
在t2时刻(t2与t1在同一天范围内),将Key1对应实体的k1属性值修改为v1’,k2的值修改为v2’,则数据存储状态变为(其中,t01=t2–d1):
表11
表12
表13
表14
假设在t3时刻(t3与t1不在同一天范围内),Key1对应实体添加了新的属性k3=v3,并删除了Key2实体,则数据存储状态变为(其中,d2=t3–t3%86400000,t02=t3–d2):
表15
表16
表17
表18
此时想要查询离t2时间点最近的一次Key1实体修改历史,通过t2–t2%86400000得到d1,结合Key1可定位到表数据库中的一行数据,并通过Filter条件col<=t01取得时间最新的一条修改记录是{k1=v1',k2=v2'}。
根据Key2查询t3时刻的实体将返回空结果。
根据Key1查询t3时刻的关系时,首先在图数据库中查询到Key1+Key2+label这条关系,然后在表数据库中查询发现Key2实体在t3时刻已被删除,因此关系查询也返回空结果。
本发明实施例提出的数据存储方法和装置、计算机可读存储介质,可以根据具体使用需求在知识图谱实体、关系的属性修改历史的存储空间和查询效率间做折中,并且能保证支持细粒度的任意时间点的修改历史查询。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
以上仅为本申请的优选实施例,当然,本申请还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请所附的权利要求的保护范围。
Claims (10)
1.一种数据存储方法,其特征在于,包括:
检测待存储数据为最新版本的数据或历史版本的数据;
如果为最新版本的数据,则同时通过第一数据库和第二数据库存储所述待存储数据及所述待存储数据对应的修改时间,其中,第一数据库用于存储最新版本的数据,第二数据库用于存储所有版本的数据,第二数据库中修改时间在一个预设的时间宽度范围内的一个或多个版本存储为一行;
如果为历史版本的数据,则通过第二数据库存储所述待存储数据及所述待存储数据对应的修改时间;
其中,所述检测待存储数据为最新版本的数据或历史版本的数据,包括:
当第一数据库或第二数据库中包含待存储数据的主属性时,获取所述待存储数据对应的修改时间,将所述获取的修改时间与第一数据库或第二数据库中存储的待存储数据的修改时间进行比较;
如果第一数据库或第二数据库中不包含待存储数据的主属性,或者所述获取的修改时间在第一数据库中所述待存储数据的修改时间之后,则判断所述待存储数据为最新版本的数据;
如果第一数据库或第二数据库中包含待存储数据的主属性且所述获取的修改时间在第一数据库中所述待存储数据的修改时间之前,则判断所述待存储数据为历史版本的数据;
其中,所述待存储数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。
2.根据权利要求1所述的方法,其特征在于,所述第一数据库中各行数据由数据的主属性进行标识;所述第二数据库中各行数据由所述数据的主属性和所述修改时间所属的第k个所述时间宽度范围:k*d进行标识,其中,k为自然数,d为预设的时间宽度范围。
3.根据权利要求2所述的方法,其特征在于,在所述第二数据库的各行数据中,预设的第一存储位置存储有所述数据的全部属性及属性值,除所述第一存储位置之外的存储位置存储有所述数据的增量更新值。
4.根据权利要求3所述的方法,其特征在于,所述第二数据库中的数据的存储结构为键值对存储结构,所述键值对存储结构中的键为所述各版本的修改时间t及其所属的第k个时间宽度范围d的差值,即(t-k*d),所述键值对存储结构中的值为所述数据的全部属性及属性值或所述数据的增量更新值,所述键值对存储结构中的值采用预定义的Java脚本对象表示法JSON数据结构。
5.根据权利要求4所述的方法,其特征在于,当所述增量更新值为删除数据时,所述JSON数据结构包含预定义的第一删除标识;
当所述增量更新值为删除数据的属性时,所述JSON数据结构包含预定义的第二删除标识。
6.根据权利要求1所述的方法,其特征在于,所述数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。
7.根据权利要求6所述的方法,其特征在于,所述数据包括以下至少之一:实体、关系,所述关系的主属性包括关系的两个端点实体的主属性及关系的类型。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求1至7中任一项所述的数据存储方法的步骤。
9.一种数据存储装置,其特征在于,包括处理器及存储器,其中:所述处理器用于执行存储器中存储的程序,以实现如权利要求1至7中任一项所述的数据存储方法的步骤。
10.一种数据存储装置,其特征在于,包括检测模块和处理模块,其中:
所述检测模块,用于检测待存储数据为最新版本的数据或历史版本的数据,如果为最新版本的数据,发送第一通知至处理模块,如果为历史版本的数据,发送第二通知至处理模块;
所述处理模块,用于接收到第一通知,同时通过第一数据库和第二数据库存储所述待存储数据及所述待存储数据对应的修改时间,其中,第一数据库用于存储最新版本的数据,第二数据库用于存储所有版本的数据,第二数据库中修改时间在一个预设的时间宽度范围内的一个或多个版本存储为一行;接收到第二通知,通过第二数据库存储所述待存储数据及所述待存储数据对应的修改时间;
其中,所述检测待存储数据为最新版本的数据或历史版本的数据,包括:
当第一数据库或第二数据库中包含待存储数据的主属性时,获取所述待存储数据对应的修改时间,将所述获取的修改时间与第一数据库或第二数据库中存储的待存储数据的修改时间进行比较;
如果第一数据库或第二数据库中不包含待存储数据的主属性,或者所述获取的修改时间在第一数据库中所述待存储数据的修改时间之后,则判断所述待存储数据为最新版本的数据;
如果第一数据库或第二数据库中包含待存储数据的主属性且所述获取的修改时间在第一数据库中所述待存储数据的修改时间之前,则判断所述待存储数据为历史版本的数据;
其中,所述待存储数据为知识图谱数据,所述第一数据库为图数据库,所述第二数据库为表数据库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910100842.7A CN109871373B (zh) | 2019-01-31 | 2019-01-31 | 一种数据存储方法和装置、计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910100842.7A CN109871373B (zh) | 2019-01-31 | 2019-01-31 | 一种数据存储方法和装置、计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109871373A CN109871373A (zh) | 2019-06-11 |
CN109871373B true CN109871373B (zh) | 2021-06-08 |
Family
ID=66918503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910100842.7A Active CN109871373B (zh) | 2019-01-31 | 2019-01-31 | 一种数据存储方法和装置、计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109871373B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111476534A (zh) * | 2020-03-20 | 2020-07-31 | 深圳万威科技有限公司 | 一种企业管理系统中架构版本及权限的处理方法 |
WO2021207830A1 (en) * | 2020-04-14 | 2021-10-21 | Dfuse Platform Inc. | Method and systems for indexing databases based on states and state transitions |
CN112287269B (zh) * | 2020-06-22 | 2024-03-22 | 上海柯林布瑞信息技术有限公司 | 数据加载方法及装置、计算设备、计算机可读存储介质 |
CN111475602B (zh) * | 2020-06-23 | 2020-10-16 | 成都数联铭品科技有限公司 | 多版本知识图谱的存储方法、装置、存储介质及电子设备 |
CN111966870A (zh) * | 2020-08-14 | 2020-11-20 | 深圳市万物云科技有限公司 | 一种基于图数据库的社区关系实时构建方法及其相关组件 |
CN112965952B (zh) * | 2021-02-09 | 2024-02-27 | 中国工商银行股份有限公司 | 一种数据资产处理方法及装置 |
CN112860668B (zh) * | 2021-02-23 | 2023-07-14 | 浪潮云信息技术股份公司 | 一种Store禁用和启用功能的实现方法 |
CN113254505B (zh) * | 2021-06-17 | 2021-10-08 | 湖南视觉伟业智能科技有限公司 | 分布式数据存储方法、检索方法、系统及可读存储介质 |
CN114579888B (zh) * | 2022-04-26 | 2022-08-30 | 支付宝(杭州)信息技术有限公司 | 知识图谱数据构建的方法、系统和非瞬态计算机可读介质 |
CN114665887B (zh) * | 2022-05-24 | 2022-09-06 | 成都索贝视频云计算有限公司 | 一种基于整体压缩的json字符串数据压缩方法 |
CN115328057B (zh) * | 2022-08-29 | 2024-08-20 | 中国核动力研究设计院 | 一种基于dcs变量监视历史数据保存方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101546318A (zh) * | 2008-03-27 | 2009-09-30 | 林兆祥 | 一种基于版本的数据存储方法 |
CN101609407A (zh) * | 2009-07-22 | 2009-12-23 | 天津市电力公司 | 基于发布者/订阅者模式的全站模型文件匹配的检测方法 |
CN104298760A (zh) * | 2014-10-23 | 2015-01-21 | 北京京东尚科信息技术有限公司 | 一种应用于数据仓库的数据处理方法和数据处理装置 |
CN109032641A (zh) * | 2018-07-24 | 2018-12-18 | 杭州安恒信息技术股份有限公司 | 应用版本更新方法及装置 |
CN109189464A (zh) * | 2018-07-11 | 2019-01-11 | 高新兴科技集团股份有限公司 | 一种版本管理的方法和设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6576699B2 (ja) * | 2015-06-12 | 2019-09-18 | コニカミノルタ株式会社 | 暗号化システム、更新方法、および更新プログラム |
-
2019
- 2019-01-31 CN CN201910100842.7A patent/CN109871373B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101546318A (zh) * | 2008-03-27 | 2009-09-30 | 林兆祥 | 一种基于版本的数据存储方法 |
CN101609407A (zh) * | 2009-07-22 | 2009-12-23 | 天津市电力公司 | 基于发布者/订阅者模式的全站模型文件匹配的检测方法 |
CN104298760A (zh) * | 2014-10-23 | 2015-01-21 | 北京京东尚科信息技术有限公司 | 一种应用于数据仓库的数据处理方法和数据处理装置 |
CN109189464A (zh) * | 2018-07-11 | 2019-01-11 | 高新兴科技集团股份有限公司 | 一种版本管理的方法和设备 |
CN109032641A (zh) * | 2018-07-24 | 2018-12-18 | 杭州安恒信息技术股份有限公司 | 应用版本更新方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109871373A (zh) | 2019-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109871373B (zh) | 一种数据存储方法和装置、计算机可读存储介质 | |
US11429641B2 (en) | Copying data changes to a target database | |
CN109918386B (zh) | 一种数据恢复方法和装置、计算机可读存储介质 | |
US9953051B2 (en) | Multi-version concurrency control method in database and database system | |
AU2023204128A1 (en) | System for synchronization of changes in edited websites and interactive applications | |
US7133884B1 (en) | Unobtrusive point-in-time consistent copies | |
US9183268B2 (en) | Partition level backup and restore of a massively parallel processing database | |
US7610317B2 (en) | Synchronization with derived metadata | |
CN107657049B (zh) | 一种基于数据仓库的数据处理方法 | |
US8682859B2 (en) | Transferring records between tables using a change transaction log | |
US20070118547A1 (en) | Efficient index versioning in multi-version databases | |
CN109902130A (zh) | 一种数据存储方法、数据查询方法和装置、存储介质 | |
US9594794B2 (en) | Restoring records using a change transaction log | |
EP2936351B1 (en) | Maintenance of active database queries | |
CN106933703A (zh) | 一种数据库数据备份的方法、装置及电子设备 | |
CN107330024B (zh) | 标签系统数据的存储方法和装置 | |
JP6202929B2 (ja) | リレーショナル・データベースにおける時間的に一意のインデックス内のギャップ検出 | |
Kvet et al. | Uni-temporal modelling extension at the object vs. attribute level | |
WO2023129310A1 (en) | Version control interface for accessing data lakes | |
US20210216516A1 (en) | Management of a secondary vertex index for a graph | |
KR20170137756A (ko) | 다수의 중첩하는 소스들로부터 대량의 시간적 데이터의 어그리게이트 | |
CN111694853B (zh) | 基于世系的数据增量采集方法、装置、存储介质和电子设备 | |
US10061654B1 (en) | Depth first search of summary change log records for backup | |
US20230409545A1 (en) | Version control interface supporting time travel access of a data lake | |
CN104317820B (zh) | 报表的统计方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220628 Address after: 15, second floor, east side of clean coal workshop, No. 68, Shijingshan Road, Shijingshan District, Beijing 100043 (cluster registration) Patentee after: Beijing Zhizhi Heshu Technology Co.,Ltd. Address before: 102218 5th floor, building 1, China Coal Construction Group building, 398 Zhongdong Road, Dongxiaokou Town, Changping District, Beijing Patentee before: MININGLAMP SOFTWARE SYSTEMS Co.,Ltd. |
|
TR01 | Transfer of patent right |