问答数据的同步方法、装置、系统、服务器及存储介质转让专利

申请号 : CN201911268127.0

文献号 : CN112948485B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 房耘耘

申请人 : 中移(苏州)软件技术有限公司中国移动通信集团有限公司

摘要 :

本发明实施例适用于信息技术领域,提供了一种问答数据的同步方法、装置、服务器及存储介质,其中,问答数据的同步方法包括:当第一数据库中的问答数据进行了更新时,根据所述更新对缓存中的问答数据进行更新;生成所述更新对应的元数据;所述元数据中至少封装有所述更新对应的操作序号;将所述元数据添加至更新队列的头部,所述更新队列存储在所述缓存中,以使第二服务器在比较出第一操作序号大于第二操作序号时,从所述缓存中拉取问答数据。本发明实施例可以降低第二服务器对第一数据库的访问频率,减小读写冲突,同时可以提高问答数据的更新速率。

权利要求 :

1.一种问答数据的同步方法,其特征在于,应用于第一服务器,所述同步方法包括:当第一数据库中的问答数据进行了更新时,根据所述更新对缓存中的问答数据进行更新;所述缓存中存储有所述第一数据库中的问答数据;

生成所述更新对应的元数据;所述元数据中至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;

将所述元数据添加至更新队列的头部,所述更新队列存储在所述缓存中,以使第二服务器在比较出第一操作序号大于第二操作序号时,从所述缓存中拉取问答数据;所述第一操作序号为所述第二服务器在比较时位于所述更新队列头部的元数据中的操作序号;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号;

所述元数据中还封装有所述更新对应的操作类型和相关的问答数据的数据标识,所述根据所述更新对缓存中的问答数据进行更新,包括:当所述操作类型为新增,将新增的问答数据及所述数据标识存入所述第一数据库对应的哈希表;所述哈希表存储于所述缓存中;

当所述操作类型为修改,根据修改的问答数据及所述数据标识,对所述哈希表中与所述数据标识对应的问答数据进行修改;

当所述操作类型为删除,根据所述数据标识,将所述哈希表中与所述数据标识对应的问答数据删除。

2.如权利要求1所述的同步方法,其特征在于,所述问答数据包括问题数据和/或答案数据,当新增或修改的问答数据包括问题数据时,所述根据所述更新对缓存中的问答数据进行更新之前,所述同步方法还包括:对新增或修改的第一问题数据进行预处理;所述预处理包括为所述第一问题数据关联第二问题数据;所述第一问题数据与所述第二问题数据的语义相似度大于第一设定值。

3.如权利要求1所述的同步方法,其特征在于,所述同步方法还包括:检测所述更新队列的队列长度;

当所述队列长度大于第二设定值,从所述更新队列的尾部开始删除至少一个元数据,以使所述更新队列的队列长度不大于第二设定值。

4.一种问答数据的同步方法,其特征在于,应用于第二服务器,所述同步方法包括:确定第一操作序号;所述第一操作序号为位于更新队列头部的元数据中的操作序号;

所述更新队列存储在第一服务器的缓存中;所述元数据在缓存中的问答数据进行了更新时生成,且至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;

对所述第一操作序号与第二操作序号进行比较,得到比较结果;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号;

当所述比较结果表征所述第一操作序号大于所述第二操作序号时,从所述第一服务器的缓存中拉取问答数据;所述缓存中存储有第一数据库中的问答数据,所述缓存中的问答数据根据所述第一数据库中的问答数据进行更新。

5.如权利要求4所述的同步方法,其特征在于,所述从所述第一服务器的缓存中拉取问答数据,包括:根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据。

6.如权利要求5所述的同步方法,其特征在于,所述根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据,包括:当所述差值小于或等于第二设定值时,将所述缓存中所述更新队列的元数据中的操作序号从所述第一操作序号至所述第二操作序号对应的问答数据拉取到第二数据库中;

或者,当所述差值大于第二设定值时,将所述缓存中的问答数据全部拉取到所述第二数据库中。

7.如权利要求4所述的同步方法,其特征在于,从所述第一服务器的缓存中拉取问答数据之后,所述同步方法还包括:将第二数据库的数据版本号更新为所述更新队列头部的元数据中的操作序号。

8.如权利要求4所述的同步方法,其特征在于,所述确定第一操作序号,包括:每隔设定周期确定第一操作序号。

9.一种问答数据的同步装置,其特征在于,包括:

更新模块,用于当第一数据库中的问答数据进行了更新时,根据所述更新对缓存中的问答数据进行更新;所述缓存中存储有所述第一数据库中的问答数据;

生成模块,用于生成所述更新对应的元数据;所述元数据中至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;

添加模块,用于将所述元数据添加至更新队列的头部,所述更新队列存储在所述缓存中,以使第二服务器在比较出第一操作序号大于第二操作序号时,从所述缓存中拉取问答数据;所述第一操作序号为所述第二服务器在比较时位于所述更新队列头部的元数据中的操作序号;所述第二操作序号为所述第二服务器最末一次从第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号;

所述元数据中还封装有所述更新对应的操作类型和相关的问答数据的数据标识,所述更新模块,具体用于:当所述操作类型为新增,将新增的问答数据及所述数据标识存入所述第一数据库对应的哈希表;所述哈希表存储于所述缓存中;

当所述操作类型为修改,根据修改的问答数据及所述数据标识,对所述哈希表中与所述数据标识对应的问答数据进行修改;

当所述操作类型为删除,根据所述数据标识,将所述哈希表中与所述数据标识对应的问答数据删除。

10.一种问答数据的同步装置,其特征在于,包括:

确定模块,用于确定第一操作序号;所述第一操作序号为位于更新队列头部的元数据中的操作序号;所述更新队列存储在第一服务器的缓存中;所述元数据在缓存中的问答数据进行了更新时生成,且至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;

比较模块,用于对所述第一操作序号与第二操作序号进行比较,得到比较结果;所述第二操作序号为第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号;

拉取模块,用于当所述比较结果表征所述第一操作序号大于所述第二操作序号时,从所述第一服务器的缓存中拉取问答数据;所述缓存中存储有第一数据库中的问答数据,所述缓存中的问答数据根据所述第一数据库中的问答数据进行更新。

11.一种问答数据的同步系统,其特征在于,包括:第一服务器和至少一个第二服务器;

所述第一服务器包括如权利要求9所述的问答数据的同步装置;

所述第二服务器包括如权利要求10所述的问答数据的同步装置。

12.一种服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至3任一项所述的问答数据的同步方法;或者实现如权利要求4至8任一项所述的问答数据的同步方法。

13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1至3任一项所述的问答数据的同步方法;或者执行如权利要求4至8任一项所述的问答数据的同步方法。

说明书 :

问答数据的同步方法、装置、系统、服务器及存储介质

技术领域

[0001] 本发明属于信息处理技术领域,尤其涉及一种问答数据的同步方法、装置、系统、服务器及存储介质。

背景技术

[0002] 问答系统有巨大的市场需求和良好的发展前景,能够应用于企业客服机器人,个人信息助理,知识问答引擎等。为了保证问答系统的准确性和全面性,需要在问答系统的数据库中对问答数据进行编辑。相关技术中,数据库写入问答数据,查询服务器同步从数据库更新问答数据,当对问答数据进行频繁编辑时,查询服务器也会频繁从数据库进行更新,增加了数据库的读写冲突,影响查询服务器提供问答数据查询服务的性能。

发明内容

[0003] 有鉴于此,本发明实施例提供一种问答数据的同步方法、装置、终端及存储介质,以至少解决相关技术中由于频繁的更新知识库,增加了数据库的读写冲突的问题。
[0004] 本发明实施例的技术方案是这样实现的:
[0005] 第一方面,本发明实施例提供了一种问答数据的管理方法,应用于第一服务器,该方法包括:
[0006] 当第一数据库中的问答数据进行了更新时,根据所述更新对缓存中的问答数据进行更新;所述缓存中存储有所述第一数据库中的问答数据;
[0007] 生成所述更新对应的元数据;所述元数据中至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;
[0008] 将所述元数据添加至更新队列的头部,所述更新队列存储在所述缓存中,以使第二服务器在比较出第一操作序号大于第二操作序号时,从所述缓存中拉取问答数据;所述第一操作序号为所述第二服务器在比较时位于所述更新队列头部的元数据中的操作序号;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述
更新队列头部的元数据中的操作序号。
[0009] 上述方案中,所述元数据中还封装有所述更新对应的操作类型和相关的问答数据的数据标识,所述根据所述更新对缓存中的问答数据进行更新,包括:
[0010] 当所述操作类型为新增,将新增的问答数据及所述数据标识存入所述第一数据库对应的哈希表;所述哈希表存储于所述缓存中;
[0011] 当所述操作类型为修改,根据修改的问答数据及所述数据标识,对所述哈希表中与所述数据标识对应的问答数据进行修改;
[0012] 当所述操作类型为删除,根据所述数据标识,将所述哈希表中与所述数据标识对应的问答数据删除。
[0013] 上述方案中,所述问答数据包括问题数据和/或答案数据,当新增或修改的问答数据包括问题数据时,所述根据所述更新对缓存中的问答数据进行更新之前,所述同步方法还包括:
[0014] 对新增或修改的第一问题数据进行预处理;所述预处理包括为所述第一问题数据关联第二问题数据;所述第一问题数据与所述第二问题数据的语义相似度大于第一设定值。
[0015] 上述方案中,所述同步方法还包括:
[0016] 检测所述更新队列的队列长度;
[0017] 当所述队列长度大于第二设定值,从所述更新队列的尾部开始删除至少一个元数据,以使所述更新队列的队列长度不大于第二设定值。
[0018] 第二方面,本发明实施例提供了另一种问答数据的管理方法,应用于第二服务器,该方法包括:
[0019] 确定第一操作序号;所述第一操作序号为位于更新队列头部的元数据中的操作序号;所述更新队列存储在所述第一服务器的缓存中;所述元数据在缓存中的问答数据进行了更新时生成,且至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;
[0020] 对所述第一操作序号与第二操作序号进行比较,得到比较结果;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号;
[0021] 当所述比较结果表征所述第一操作序号大于所述第二操作序号时,从所述第一服务器的缓存中拉取问答数据;所述缓存中存储有所述第一数据库中的问答数据,所述缓存中的问答数据根据所述第一数据库中的问答数据进行更新。
[0022] 所述从所述第一服务器的缓存中拉取问答数据,包括:
[0023] 根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据。
[0024] 上述方案中,所述根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据,包括:
[0025] 当所述差值小于或等于第二设定值时,将所述缓存中所述更新队列的元数据中的操作序号从所述第一操作序号至所述第二操作序号对应的问答数据拉取到第二数据库中;
[0026] 上述方案中,所述根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据,包括:
[0027] 当所述差值大于第二设定值时,将所述缓存中的问答数据全部拉取到所述第二数据库中。
[0028] 上述方案中,从所述第一服务器的缓存中拉取问答数据之后,所述同步方法还包括:
[0029] 将所述第二数据库的数据版本号更新为所述更新队列头部的元数据中的操作序号。
[0030] 上述方案中,所述确定第一操作序号,包括:
[0031] 每隔设定周期确定第一操作序号。
[0032] 第三方面,本发明实施例提供了一种问答数据的管理装置,该装置包括:
[0033] 更新模块,用于当第一数据库中的问答数据进行了更新时,根据所述更新对缓存中的问答数据进行更新;所述缓存中存储有所述第一数据库中的问答数据;
[0034] 生成模块,用于生成所述更新对应的元数据;所述元数据中至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;
[0035] 添加模块,用于将所述元数据添加至更新队列的头部,所述更新队列存储在所述缓存中,以使第二服务器在比较出第一操作序号大于第二操作序号时,从所述缓存中拉取问答数据;所述第一操作序号为所述第二服务器在比较时位于所述更新队列头部的元数据中的操作序号;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号。
[0036] 第四方面,本发明实施例提供了另一种问答数据的管理装置,该装置包括:
[0037] 确定模块,用于确定第一操作序号;所述第一操作序号为位于更新队列头部的元数据中的操作序号;所述更新队列存储在所述第一服务器的缓存中;所述元数据在缓存中的问答数据进行了更新时生成,且至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;
[0038] 比较模块,用于对所述第一操作序号与第二操作序号进行比较,得到比较结果;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号;
[0039] 拉取模块,用于当所述比较结果表征所述第一操作序号大于所述第二操作序号时,从所述第一服务器的缓存中拉取问答数据;所述缓存中存储有所述第一数据库中的问答数据,所述缓存中的问答数据根据所述第一数据库中的问答数据进行更新。
[0040] 第五方面,本发明实施例提供了另一种问答数据的管理系统,该系统包括:
[0041] 第一服务器和至少一个第二服务器;
[0042] 所述第一服务器包括如第三方面所述的问答数据的同步装置;
[0043] 所述第二服务器包括如第四方面所述的问答数据的同步装置。
[0044] 第六方面,本发明实施例提供了一种服务器,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行本发明实施例第一方面提供的信息处理方法的步骤。
[0045] 第七方面,本发明实施例提供了一种计算机可读存储介质,包括:所述计算机可读存储介质存储有计算机程序。所述计算机程序被处理器执行时实现如本发明实施例第一方面提供的信息处理方法的步骤。
[0046] 本发明实施例中通过在第一数据库中的问答数据进行了更新时,将第一数据库中更新的问答数据同步更新到缓存中,第二服务器从所述缓存中拉取问答数据,而不从第一数据库中拉取数据,可以降低第二服务器对第一数据库的访问频率,减小读写冲突,同时可以提高问答数据的更新速率。

附图说明

[0047] 图1是相关技术中问答系统的结构示意图;
[0048] 图2是本发明实施例提供的一种问答系统的结构示意图;
[0049] 图3是本发明实施例提供的一种问答数据的同步方法的实现流程示意图;
[0050] 图4是本发明实施例提供的另一种问答数据的同步方法的实现流程示意图;
[0051] 图5是本发明实施例提供的另一种问答数据的同步方法的实现流程示意图;
[0052] 图6是本发明实施例提供的一种问答数据的同步装置的结构框图;
[0053] 图7是本发明实施例提供的另一种问答数据的同步装置的结构框图;
[0054] 图8是本发明实施例提供的一种问答数据的同步系统的结构框图;
[0055] 图9是本发明实施例提供的服务器的硬件结构示意图。

具体实施方式

[0056] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0057] 应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
[0058] 需要说明的是,本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
[0059] 另外,在本发明实施例中,“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
[0060] 参考图1,图1是相关技术中问答系统的结构示意图,如图1所示,当用户往数据库中写入问答数据后,查询服务器会立即从数据库中读取问答数据进行更新。当用户频繁对数据库中的问答数据进行编辑时,查询服务器也会频繁从数据库中读取问答数据,这样增加了数据库的读写冲突,影响查询服务器提供问答数据查询服务的性能。此外,相关技术通常只部署单个查询服务器,如果该单个查询服务器出现故障,会导致问答数据查询服务不可用。
[0061] 针对上述相关技术中由于频繁更新知识库增加了数据库的读写冲突的缺点,本发明实施例提供了一种问答数据的同步方法,能够降低数据库的读写冲突。为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
[0062] 参考图2,图2是本发明实施例提供的一种问答系统的结构示意图,如图2所示,该问答系统包括第一服务器和第二服务器,第一服务器为后台工作人员进行问答数据管理和维护的服务器,第二服务器用于为用户提供问答数据查询服务。第一服务器包括第一数据库和缓存,其中,缓存以分布式结构在第一服务器的内存中,第一数据库和缓存都用于存储问答数据。第二服务器部署多个,每个第二服务器包括第二数据库,第二数据库用于存储问答数据。后台工作人员在第一服务器中写入问答数据后,问答数据首先会被第一服务器存储在第一数据库中,然后第一服务器将问答数据同步写入到缓存中。第二服务器从第一服务器拉取问答数据时,从第一服务器的缓存层中拉取问答数据到第二数据库中,使得第一数据库与第二数据库的问答数据保持一致性。
[0063] 参考图3,图3是本发明实施例提供的一种问答数据的同步方法的实现流程示意图,该方法执行主体为第一服务器,参照图3,问答数据的同步方法包括:
[0064] S101,当第一数据库中的问答数据进行了更新时,根据所述更新对缓存中的问答数据进行更新;所述缓存中存储有所述第一数据库中的问答数据。
[0065] 第一数据库为第一服务器存储问答数据的数据库,当后台工作人员在第一服务器上输入问答数据后,问答数据会存储在第一数据库中。
[0066] 后台工作人员对第一数据库的操作包括:新增问答数据、删除问答数据和修改问答数据。其中,新增问答数据包括增加新的问题数据或答案数据;删除问答数据包括对已有的问题数据或答案数据进行删除;修改问答数据包括对已有的问题数据或答案数据进行修改,为已有问题数据添加相似问法也属于修改问答数据。
[0067] 本发明实施例在第一服务器的内存中以分布式结构构建一个缓存层,缓存层用于对第一数据库中的问答数据进行缓存,当第一数据库中的问答数据进行了更新时,根据所述更新对缓存中的问答数据进行更新。也就是说,问答数据分别存储在第一数据库中和缓存中,当第一数据库更新后,缓存也同步更新。将问答数据同步存储在缓存中,就算第一数据库中的问答数据意外丢失了,也能从缓存中将问答数据找回。而且从缓存中读写问答数据要比从数据库中读写问答数据快,可以提高第二服务器同步问答数据的访问效率。
[0068] 所述更新对应的操作类型包括新增、修改和删除。在第一数据库中每个问答数据都有独一无二的数据标识,例如,A问题数据的数据标识为000001,B问题数据的数据标识为000002。问题数据和对应的答案数据共享同一个数据标识,与A问题数据对应的A答案数据的数据标识也为000001。当然,同一个问题数据有相似的问法,这些相似的问法都共享一个数据标识。当用户在第一数据库中新增一个问题数据的时候,就会自动生成该问题数据对应的数据标识。
[0069] 在本发明的一种实施例中,问答数据可以以哈希表的形式存储在缓存中。每个哈希表都对应一个第一数据库,第一数据库的数量可以为多个,可以将同一个类型的问答数据放在同一个数据库中,例如,将关于天气的问答数据放在同一个数据库中,将关于地形的问答数据放在另一个数据库中。每个数据库都有对应的哈希表,可以通过标识符将两者联系起来,例如,数据库的标识符为01,与该数据库对应的哈希表的标识符也为01。
[0070] 进一步的,所述根据所述更新对缓存中的问答数据进行更新,包括:
[0071] 当所述操作类型为新增,将新增的问答数据及所述数据标识存入所述第一数据库对应的哈希表;所述哈希表存储于所述缓存中。
[0072] 当所述操作类型为修改,根据修改的问答数据及所述数据标识,对所述哈希表中与所述数据标识对应的问答数据进行修改。
[0073] 当所述操作类型为删除,根据所述数据标识,将所述哈希表中与所述数据标识对应的问答数据删除。
[0074] 在实际应用时,可以将问题数据和答案数据以哈希表结构分开存储,问题数据的哈希表的命名格式可以为:baseid+标识符“_question_value”,答案数据的哈希表的命名格式可以为:baseid+标识符“_answer_value”。问题数据的哈希表中键为问答数据的数据标识,值为json封装预处理后的问题文本,预处理包括对问题文本进行分词和加入语义向量,分词指将字符串拆解成几个关键字:如“明天我去北京”拆分成“明天”,“我”,“去”,“北京”;语义向量指基于预料训练得到词的向量表示。答案数据的哈希表中键为问答数据的数据标识,值为json封装的答案文本。例如,问题数据的json字符串格式为:{{“question”:“…”},{“questionSeg”:[{“similar”:“…”},{“similar”:“…”},]},{“questionVec”,[{“similar”:“…”},{“similar”:“…”}]}}。答案数据的json字符串格式为:{{“answer”:
“…”},{“htmlAnswer”:“…”}}。
[0075] 进一步的,所述问答数据包括问题数据和/或答案数据,当新增或修改的问答数据包括问题数据时,所述根据所述更新对缓存中的问答数据进行更新之前,所述同步方法还包括:
[0076] 对新增或修改的第一问题数据进行预处理;所述预处理包括为所述第一问题数据关联第二问题数据;所述第一问题数据与所述第二问题数据的语义相似度大于第一设定值。
[0077] 为第一问题数据关联第二问题数据,第一问题数据与第二问题数据的语义相似度大于第一设定值。语义相似度大于第一设定值,也就是说第一问题数据和第二问题数据是同一个问题数据的不同问法,属于相似问法,实质上第一问题数据和第二问题数据问的是同一个问题。可以用同一个数据标识将相似问法的问题数据全部关联起来。
[0078] 例如,在实际应用时,用户在第一数据库中为数据标识为000001的现有问题“公司的地址是多少?”添加相似问法“公司的位置?”和“公司在哪里?”。第一数据库更新后,触发器将所述更新对应问答数据封装后推送给异步线程。数据封装为json格式,json格式为:{{“act”:“update”},{“id”:“000001”},{“baseId”:“01”}{“question”:“公司的地址是多少?”},{“similar”,[{“similar”:“公司的位置”},{“similar”:“公司在哪里”}],{“answer”:“江苏省xx市xx区xx路xx号”}}}。其中,act为操作类型,update为修改,id为数据标识,baseId为数据库的标识符,question为问题,similar为相似问法。异步线程接收到要更新的json数据后,对json数据进行解析,发现是对标识符为01的哈希表进行修改操作。
根据上述json格式中的问题字段和答案字段分别更新名称为“01_question_value”的问题哈希表和名称为“01_anser_value”答案哈希表中数据标识“000001”对应的值。
[0079] S102,生成所述更新对应的元数据;所述元数据中至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增。
[0080] 元数据为描述数据的数据,元数据描述数据属性的信息,可以用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。当缓存中问答数据更新后,生成所述更新对应的元数据,所述元数据中至少封装有所述更新对应的操作序号,操作序号随所述缓存中的问答数据每次进行更新时递增。
[0081] 进一步的,所述元数据中还可以封装有所述更新对应的操作类型和相关的问答数据的数据标识。
[0082] 例如,在实际应用中,如果元数据包括操作序号、操作类型和数据标识。假设操作序号为1234,操作类型为修改,数据标识为000001,那么元数据的结构可以为:{“seq”:“1234”,“act”:“update”,“id”:“000001”}。
[0083] S103,将所述元数据添加至更新队列的头部,所述更新队列存储在所述缓存中,以使第二服务器在比较出第一操作序号大于第二操作序号时,从所述缓存中拉取问答数据;所述第一操作序号为所述第二服务器在比较时位于所述更新队列头部的元数据中的操作
序号;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号。
[0084] 在缓存中,有用于存储元数据的更新队列,根据缓存中问答数据的写入顺序,缓存中每写入一次问答数据,就生成与此次更新对应的元数据,将该元数据放在更新队列的头部。
[0085] 在实际应用中,可以根据更新队列头部的元数据中的操作序号来确定本次更新对应的操作序号。例如,如果当前更新队列头部的元数据中操作序号为1233,那么当缓存中写入问答数据的时候,操作序号应该递增,所以此次更新对应的操作序号为1234。如果缓存是第一次写入问答数据,那么此次更新对应的操作序号为1,此后按照问答数据写入缓存的顺序依次递增。
[0086] 在实际应用中,每一个第一数据库有一个单独对应的更新队列,更新队列的命名可以为“标识符_update_queue”。
[0087] 第二服务器即提供问答数据查询服务的服务器,第二服务器根据操作序号的大小,选择性的从缓存中拉取问答数据。具体的,第二服务器在比较出第一操作序号大于第二操作序号时,从所述缓存中拉取问答数据;所述第一操作序号为当前更新队列头部的元数据中的操作序号;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号。第一操作序号大于第二操作序号,说明第一服务器中更新了问答数据,第一服务器与第二服务器中问答数据不一致,因此需要更新第二服务器。第二服务器更新问答数据的过程具体详见下面图4所示实施例,本发明实施例不再赘述。
[0088] 本发明实施例中通过在第一数据库中的问答数据进行了更新时,将第一数据库中更新的问答数据同步更新到缓存中,第二服务器从所述缓存中拉取问答数据,而不从第一数据库中拉取数据,可以降低第二服务器对第一数据库的访问频率,减小读写冲突,同时可以提高问答数据的更新速率。
[0089] 参考图4,其示出了本发明实施例提供的另一种问答数据的同步方法的流程示意图,如图4所示,所述问答数据的同步方法,还包括:
[0090] S401,检测所述更新队列的队列长度。
[0091] 缓存中每写入一次问答数据,就会产生一个元数据,将该元数据放在更新队列的头部。缓存经过多次写入问答数据后,更新队列中也会存储多个元数据,更新队列的队列长度即为更新队列中元数据的个数。
[0092] S402,当所述队列长度大于第二设定值,从所述更新队列的尾部开始删除至少一个元数据,以使所述更新队列的队列长度不大于第二设定值。
[0093] 本发明实施例将更新队列的队列长度限定在第二设定值,当队列长度大于第二设定值时,从更新队列的尾部开始删除元数据,直至更新队列的队列长度达到第二设定值。
[0094] 第二服务器决定拉取缓存中全部的问答数据还是部分的问答数据,取决于第二服务器最末一次从缓存中拉取问答数据时更新队列头部的元数据中的操作序号是否小于当前更新队列尾部的元数据中的操作序号,如果小于,就拉取缓存中全部的问答数据;如果大于或等于,只拉取缓存中部分问答数据。因此,第二设定值的大小决定了第二服务器从第一服务器中拉取缓存中全部的问答数据还是部分的问答数据。第二服务器拉取问答数据的过程具体详见下面图4所示实施例,本发明实施例不再赘述。
[0095] 参考图5,图5是本发明实施例提供的另一种问答数据的同步方法的实现流程示意图,该方法执行主体为第二服务器。参照图5,问答数据的同步方法包括:
[0096] S501,确定第一操作序号;所述第一操作序号为位于更新队列头部的元数据中的操作序号;所述更新队列存储在所述第一服务器的缓存中;所述元数据在缓存中的问答数据进行了更新时生成,且至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增。
[0097] S502,对所述第一操作序号与第二操作序号进行比较,得到比较结果;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号。
[0098] 比较第一操作序号与第二操作序号的大小,比较结果包括第一操作序号大于第二操作序号或第一操作序号等于第二操作序号。第一操作序号大于第二操作序号,说明缓存中更新了问答数据;第一操作序号等于第二操作序号,说明缓存中没有更新问答数据。
[0099] S503,当所述比较结果表征所述第一操作序号大于所述第二操作序号时,从所述第一服务器的缓存中拉取问答数据;所述缓存中存储有所述第一数据库中的问答数据,所述缓存中的问答数据根据所述第一数据库中的问答数据进行更新。
[0100] 当第一操作序号大于第二操作序号时,说明缓存中更新了问答数据,此时第二数据库中的问答数据与第一数据库中的问答数据不一致,因此第二服务器需要从第一服务器中拉取问答数据。具体的,第二服务器从第一服务器的缓存中拉取问答数据,从缓存中拉取问答数据,可以减少对第一数据库的访问频率,减少读写冲突,提高更新速度。
[0101] 进一步的,所述从所述第一服务器的缓存中拉取问答数据,包括:
[0102] 根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据。
[0103] 进一步的,所述根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据,包括:
[0104] 当所述差值小于或等于第二设定值时,将所述缓存中所述更新队列的元数据中的操作序号从所述第一操作序号至所述第二操作序号对应的问答数据拉取到第二数据库中。
[0105] 第二数据库为第二服务器存储问答数据的数据库,第二数据库应与第一数据库一一对应,例如,如果第一数据库的标识符为01,那么与其对应的第二数据库的标识符也为01。
[0106] 第二设定值为更新队列的队列长度,第一操作序号与第二操作序号的差值小于或等于第二设定值,说明第二操作序号对应的元数据还在更新队列中,说明第一服务器中更新问答数据的次数并不是很多,因此可以只将缓存中更新队列的元数据中的操作序号从第一操作序号至第二操作序号对应的问答数据拉取到第二数据库中。
[0107] 例如,在实际应用时,检查到当前标识符为01的第二数据库(和第一数据库标识符01对应)的第二操作序号为“1230”,与标识符01对应的名称为“01_update_queue”的更新队列的第二操作序号为“1234”。假设第二设定值为50,第一操作序号与第二操作序号的差值等于4(1234-1230),差值小于第二设定值,因此拉取操作序号1231至1234对应的问答数据到第二数据库中,假设操作序号1231至1234对应的元数据格式如下:
[0108] 尾部‑>[{“seq”:“1231”,“act”:“update”,“id”:“000001”}‑>[0109] {“seq”:“1232”,“act”:“update”,“id”:“000006”}‑>
[0110] {“seq”:“1233”,“act”:“delete”,“id”:“000009”}‑>
[0111] {“seq”:“1234”,“act”:“update”,“id”:“000001”}]头部。
[0112] 其中,seq为操作序号,act为操作类型,update为修改,delete为删除,id为数据标识。上述元数据表明:在第一服务器中,数据标识为000001的问答数据经过了2次修改,数据标识为000006经过一次修改,数据标识为000009的问答数据被删除了。因此,第二服务器将缓存中数据标识为000001和000009对应的问答数据拉取到第二数据库中,以覆盖第二数据库中原有的问答数据;以及将第二数据库中数据标识为000009的问答数据删除。如此,保证了更新完后的第二数据库中的问答数据与第一数据库一致。
[0113] 本发明实施例中,第二服务器只从缓存中拉取一小部门问答数据,更新耗时少,使得第二服务器能够快速更新完毕,及时提供问答数据查询服务。
[0114] 进一步的,所述根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据,包括:
[0115] 当所述差值大于第三设定值时,将所述缓存中的问答数据全部拉取到所述第二数据库中。
[0116] 第一操作序号与第二操作序号的差值大于第二设定值,说明第二操作序号对应的元数据已经被删除了,说明第一数据库发生了大批量修改或第二数据库过于老旧,因此需要将缓存中的问答数据全部拉取到第二数据库中,整体更新第二数据库。
[0117] 第二服务器将第二数据库中原有的问答数据全部删除,然后将缓存中的问答数据全部拉取到第二数据库中。
[0118] 在本发明的另一种实施例中,还可以通过判断第二服务器最末一次从缓存中拉取问答数据时更新队列头部的元数据中的操作序号与当前更新队列尾部的元数据中的操作序号的大小,来决定如何拉取缓存中的问答数据。
[0119] 当第二服务器最末一次从缓存中拉取问答数据时更新队列头部的元数据中的操作序号大于或等于当前更新队列尾部的元数据中的操作序号时,只将缓存中更新队列的元数据中的操作序号从第一操作序号至第二操作序号对应的问答数据拉取到第二数据库中。
[0120] 当第二服务器最末一次从缓存中拉取问答数据时更新队列头部的元数据中的操作序号小于当前更新队列尾部的元数据中的操作序号时,将缓存中的问答数据全部拉取到第二数据库中。
[0121] 进一步的,从所述第一服务器的缓存中拉取问答数据之后,所述同步方法还包括:
[0122] 将所述第二数据库的数据版本号更新为所述更新队列头部的元数据中的操作序号。
[0123] 第二数据库每次更新完后,将当前更新队列头部的元数据中的操作序号作为第二数据库的数据版本号。这样,当下次进行更新时,第二服务器直接用数据版本号与第一操作序号进行比较即可。
[0124] 为保证问答数据查询服务的高可用性,第二服务器可以部署多台,每个第二服务器独立从第一服务器中更新数据,各自互不影响。当单台第二服务器故障时,查询服务还可由其他第二服务器继续提供,保证了整体查询服务的健壮性。
[0125] 进一步的,上述步骤S501至S503所述的方法,第二服务器每隔设定周期运行一次,其中,当第二服务器为多个的时候,每个第二服务器的设定时间周期可以不同。这样,就算其中某一个第二服务器在更新,其他第二服务器还能继续提供问答数据查询服务,解决了相关技术数据库在更新时,服务器无法提供问答数据查询服务的缺陷。而且多个第二服务器可以容纳更多的用户使用查询服务,使得问答数据查询服务具有高可用性,提升了第二服务器提供问答数据查询服务的性能。并且,按照数据库按照时间间隔进行更新,避免了数据库的不稳定更新,降低了读写冲突。
[0126] 本发明实施例中,第二服务器通过确定第一操作序号;第一操作序号为位于更新队列头部的元数据中的操作序号;对第一操作序号与第二操作序号进行比较,得到比较结果;第二操作序号为第二服务器最末一次从第一服务器中拉取问答数据时更新队列头部的元数据中的操作序号;当比较结果表征第一操作序号大于第二操作序号时,从第一服务器的缓存中拉取问答数据。本发明实施例确保了第一服务器和第二服务器的问答数据的一致性,增加了第二服务器从第一服务器中更新问答数据的速度。
[0127] 参考图6,图6是本发明实施例提供的一种问答数据的同步装置的示意图,设置于第一服务器中,如图6所示,该装置包括:更新模块、生成模块、和添加模块。
[0128] 更新模块,用于当第一数据库中的问答数据进行了更新时,根据所述更新对缓存中的问答数据进行更新;所述缓存中存储有所述第一数据库中的问答数据;
[0129] 生成模块,用于生成所述更新对应的元数据;所述元数据中至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;
[0130] 添加模块,用于将所述元数据添加至更新队列的头部,所述更新队列存储在所述缓存中,以使第二服务器在比较出第一操作序号大于第二操作序号时,从所述缓存中拉取问答数据;所述第一操作序号为所述第二服务器在比较时位于所述更新队列头部的元数据中的操作序号;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号。
[0131] 所述元数据中还封装有所述更新对应的操作类型和相关的问答数据的数据标识,所述更新模块具体用于:
[0132] 当所述操作类型为新增,将新增的问答数据及所述数据标识存入所述第一数据库对应的哈希表;所述哈希表存储于所述缓存中;
[0133] 当所述操作类型为修改,根据修改的问答数据及所述数据标识,对所述哈希表中与所述数据标识对应的问答数据进行修改;
[0134] 当所述操作类型为删除,根据所述数据标识,将所述哈希表中与所述数据标识对应的问答数据删除。
[0135] 所述问答数据包括问题数据和/或答案数据,当新增或修改的问答数据包括问题数据时,所述更新模块具体用于:
[0136] 对新增或修改的第一问题数据进行预处理;所述预处理包括为所述第一问题数据关联第二问题数据;所述第一问题数据与所述第二问题数据的语义相似度大于第一设定值。
[0137] 所述装置还包括:
[0138] 检测模块,用于检测所述更新队列的队列长度;
[0139] 删除模块,用于当所述队列长度大于第二设定值,从所述更新队列的尾部开始删除至少一个元数据,以使所述更新队列的队列长度不大于第二设定值。
[0140] 参考图7,图7是本发明实施例提供的一种问答数据的同步装置的示意图,设置于第二服务器中,如图7所示,该装置包括:确定模块、比较模块、和拉取模块。
[0141] 确定模块,用于确定第一操作序号;所述第一操作序号为位于更新队列头部的元数据中的操作序号;所述更新队列存储在所述第一服务器的缓存中;所述元数据在缓存中的问答数据进行了更新时生成,且至少封装有所述更新对应的操作序号;所述操作序号随所述缓存中的问答数据每次进行更新时递增;
[0142] 比较模块,用于对所述第一操作序号与第二操作序号进行比较,得到比较结果;所述第二操作序号为所述第二服务器最末一次从所述第一服务器中拉取问答数据时所述更新队列头部的元数据中的操作序号;
[0143] 拉取模块,用于当所述比较结果表征所述第一操作序号大于所述第二操作序号时,从所述第一服务器的缓存中拉取问答数据;所述缓存中存储有所述第一数据库中的问答数据,所述缓存中的问答数据根据所述第一数据库中的问答数据进行更新。
[0144] 根据所述第一操作序号与所述第二操作序号的差值,从所述缓存中拉取问答数据。
[0145] 所述拉取模块具体用于:
[0146] 当所述差值小于或等于第二设定值时,将所述缓存中所述更新队列的元数据中的操作序号从所述第一操作序号至所述第二操作序号对应的问答数据拉取到第二数据库中。
[0147] 所述拉取模块具体用于:
[0148] 当所述差值大于第二设定值时,将所述缓存中的问答数据全部拉取到所述第二数据库中。
[0149] 所述装置还包括:
[0150] 数据版本号更新模块,用于将所述第二数据库的数据版本号更新为所述更新队列头部的元数据中的操作序号。
[0151] 所述确定模块具体用于:每隔设定周期确定第一操作序号。
[0152] 参考图8,图8是本发明实施例提供的一种问答数据的同步系统的示意图,如图8所示,该系统包括:第一服务器和至少一个第二服务器;
[0153] 所述第一服务器包括上述图6所示的装置实施例所述的问答数据的同步装置;
[0154] 所述第二服务器包括上述图7所示的装置实施例所述的问答数据的同步装置。
[0155] 需要说明的是:上述实施例提供的问答数据的同步装置在进行问答数据的同步时,仅以上述各模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的模块完成,即将装置的内部结构划分成不同的模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的问答数据的同步装置与问答数据的同步方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0156] 图9是本发明一实施例提供的服务器的示意图。如图9所示,该实施例的服务器包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序。所述处理器执行所述计算机程序时实现上述各个方法实施例中的步骤,例如图3所示的步骤101至103。或者,所述处理器执行所述计算机程序时实现上述各装置实施例中各模块/单元的功能,例如图6所示更新模块、生成模块、和添加模块的功能。
[0157] 示例性的,所述计算机程序可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述服务器中的执行过程。
[0158] 所述服务器可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,图9仅仅是服务器的示例,并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述服务器还可以包括输入输出设备、网络接入设备、总线等。
[0159] 所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field‑
Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器
等。
[0160] 所述存储器可以是所述服务器的内部存储单元,例如服务器的硬盘或内存。所述存储器也可以是所述服务器的外部存储设备,例如所述服务器上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器还可以既包括所述服务器的内部存储单元也包括外部存储设备。所述存储器用于存储所述计算机程序以及所述服务器所需的其他程序和数据。所述存储器还可以用于暂时地存储已经输出或者将要输出的数据。
[0161] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0162] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
[0163] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0164] 在本发明所提供的实施例中,应该理解到,所揭露的装置/服务器和方法,可以通过其它的方式实现。例如,以上所描述的装置/服务器实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
[0165] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0166] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0167] 所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read‑Only Memory,ROM)、随机存取存储器
(RandomAccess Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当
的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0168] 以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。