发明内容
本发明实施例提供了一种数据管理方法及装置,能够保证用户从缓存中读取到的数据与磁盘中的数据一致。
第一方面,本发明实施例提供了一种数据管理方法,包括:
获取来自用户的第一读取请求,其中,所述第一读取请求用于读取高实时性要求的第一执行数据;
判断缓存中是否存储有所述第一执行数据,其中,所述缓存中存储的所述第一执行数据从磁盘中存储的所述第一执行数据同步而来;
如果所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户;
如果所述缓存中未存储所述第一执行数据,则进一步判断磁盘中是否存储有所述第一执行数据,其中,所述磁盘中存储的所述第一执行数据由数据存储端进行存储;
如果所述磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户;
如果所述磁盘中未存储所述第一执行数据,则向所述用户发送告警信息,其中,所述告警信息用于指示所述第一执行数据更新失败。
优选地,
进一步包括:
S1:获取来自所述数据存储端的写入请求,其中,所述写入请求用于指示将第二执行数据写入所述磁盘;
S2:判断所述第二执行数据是否具有高实时性要求;
S3:如果所述第二执行数据具有高实时性要求,则进一步判断所述缓存中是否存储有与所述第二执行数据相匹配的历史执行数据,如果是,执行S4,否则执行S5;
S4:将所述缓存中存储的所述历史执行数据删除,执行S5;
S5:将所述第二执行数据存储到所述磁盘中,并删除所述磁盘中存储的所述历史执行数据;
S6:将所述磁盘中存储的所述第二执行数据同步到所述缓存中。
优选地,
在S2之后,进一步包括:
如果所述第二执行数据无高实时性要求,则将所述第二执行数据存储到所述磁盘中,并删除所述磁盘中存储的所述历史执行数据;
将所述磁盘中存储的所述第二执行数据同步到所述缓存中,并删除缓存中存储的所述历史执行数据。
优选地,
进一步包括:
获取来自所述用户的第二读取请求,其中,所述第二读取请求用于读取无高实时性要求的所述第二执行数据;
判断所述缓存中是否存储有所述第二执行数据,其中,所述缓存中存储的所述第二执行数据从所述磁盘中存储的所述第二执行数据同步而来;
如果所述缓存中存储有所述第二执行数据,则将所述缓存中存储的所述第二执行数据返回给所述用户;
如果所述缓存中未存储所述第二执行数据,则将所述缓存中存储的所述历史执行数据返回给所述用户。
优选地,
在所述S1之前,进一步包括:
设置至少两个缓存队列;
在如果所述第二执行数据具有高实时性要求时,在所述判断所述缓存中是否存储有与所述第二执行数据相匹配的历史执行数据之前,进一步包括:
从所述至少两个缓存队列中,确定用于缓存第二执行数据的目标缓存队列;
将所述第二执行数据缓存到所述目标缓存队列中;
在S5之前,进一步包括:
当所述目标缓存队列中的所述第二执行数据处于可读取状态时,建立与所述目标缓存队列相关联的连接;
通过所述连接执行S5和S6。
优选地,
在所述设置至少两个缓存队列之后,在所述获取来自所述数据存储端的写入请求之前,进一步包括:
分别设置每一个所述缓存队列的队列标识;
设置至少两个哈希值;
确定每一个所述队列标识与至少一个所述哈希值的关联关系;
在所述获取来自所述数据存储端的写入请求之后,在所述建立与所述目标缓存队列相关联的连接之前,进一步包括:
确定所述第二执行数据的唯一标识;
对所述唯一标识进行哈希计算,获得所述第二执行数据的哈希值;
所述从所述至少两个缓存队列中,确定用于保存所述第二执行数据的目标缓存队列,包括:
根据所述关联关系,确定与所述第二执行数据的哈希值相关联的目标队列标识;
将所述目标队列标识指示的缓存队列作为目标缓存队列。
优选地,
所述判断缓存中是否存储有所述第一执行数据,如果所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户,如果所述缓存中未存储所述第一执行数据,则进一步判断磁盘中是否存储有所述第一执行数据,包括:
确定在第一时长内,缓存中是否存储有所述第一执行数据;
如果在所述第一时长内所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户;
如果在所述第一时长内所述缓存中未存储所述第一执行数据,则进一步判断磁盘中是否存储有所述第一执行数据;
所述判断磁盘中是否存储有所述第一执行数据,如果所述磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户,如果所述磁盘中未存储所述第一执行数据,则向所述用户发送告警信息包括:
确定在第二时长内,磁盘中是否存储有所述第一执行数据;
如果在所述第二时长内磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户;
如果在所述第二时长内磁盘中未存储所述第一执行数据,则向所述用户发送告警信息;
其中,所述第一时长与所述第二时长之和不大于所述第一读取请求的响应时长。
第二方面,本发明实施例提供了一种数据管理装置,包括:
请求管理模块,用于获取来自用户的第一读取请求,其中,所述第一读取请求用于读取高实时性要求的第一执行数据;
缓存管理模块,用于判断缓存中是否存储有所述请求管理模块获取的所述第一读取请求所要读取的所述第一执行数据,其中,所述缓存中存储的所述第一执行数据从磁盘中存储的所述第一执行数据同步而来;如果所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户;如果所述缓存中未存储所述第一执行数据,则触发磁盘管理模块;
所述磁盘管理模块,用于在所述缓存中未存储所述第一执行数据条件下被所述缓存管理模块触发时,判断磁盘中是否存储有所述第一执行数据,其中,所述磁盘中存储的所述第一执行数据由数据存储端进行存储;如果所述磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户;如果所述磁盘中未存储所述第一执行数据,则向所述用户发送告警信息,其中,所述告警信息用于指示所述第一执行数据更新失败。
优选地,
进一步包括:数据属性管理模块;
所述请求管理模块,进一步用于获取来自所述数据存储端的写入请求,其中,所述写入请求用于指示将第二执行数据写入所述磁盘;
所述数据属性管理模块,用于判断所述第二执行数据是否具有高实时性要求;如果所述第二执行数据具有高实时性要求,则进一步判断所述缓存中是否存储有与所述第二执行数据相匹配的历史执行数据,如果是,触发所述缓存管理模块执行S4,否则触发所述磁盘管理模块执行S5;
所述缓存管理模块,进一步用于S4:将所述缓存中存储的所述历史执行数据删除,并触发所述磁盘管理模块执行S5;
所述磁盘管理模块,进一步用于被触发时,执行S5:将所述第二执行数据存储到所述磁盘中,并删除所述磁盘中存储的所述历史执行数据;S6:将所述磁盘中存储的所述第二执行数据同步到所述缓存中。
优选地,
所述缓存管理模块,用于确定在第一时长内,缓存中是否存储有所述第一执行数据;如果在所述第一时长内所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户;如果在所述第一时长内所述缓存中未存储所述第一执行数据,触发所述磁盘管理模块;
所述磁盘管理模块,用于在所述第一时长内所述缓存中未存储所述第一执行数据条件下,被所述缓存管理模块触发时,确定在第二时长内,磁盘中是否存储有所述第一执行数据;如果在所述第二时长内磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户;如果在所述第二时长内磁盘中未存储所述第一执行数据,则向所述用户发送告警信息;其中,所述第一时长与所述第二时长之和不大于所述第一读取请求的响应时长。
本发明实施例提供了一种数据管理方法及装置,如获取到用户读取高实时性要求的第一执行数据时,不是从磁盘中直接获取第一执行数据,而是先确定缓存中是否存储从磁盘中同步而来的第一执行数据,以使在确定缓存中存储有第一执行数据快速响应给用户,最大程度降低磁盘的访问次数;如果缓存中未存储有第一执行数据,则将磁盘中存储的第一执行数据返回给用户,当确定磁盘中也未存储第一执行数据时,则可以确定第一执行数据在更新到磁盘过程中更新失败,此时需要向用户发送告警信息,以提示用户第一执行数据在磁盘中更新失败。由于缓存中存储的数据是从磁盘中存储的数据同步而来的,因此能够保证用户从缓存中读取到的数据与磁盘中的数据一致。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种数据管理方法,包括:
步骤101:获取来自用户的第一读取请求,其中,所述第一读取请求用于读取高实时性要求的第一执行数据;
步骤102:判断缓存中是否存储有所述第一执行数据,其中,所述缓存中存储的所述第一执行数据从磁盘中存储的所述第一执行数据同步而来;
步骤103:如果所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户;
步骤104:如果所述缓存中未存储所述第一执行数据,则进一步判断磁盘中是否存储有所述第一执行数据,其中,所述磁盘中存储的所述第一执行数据由数据存储端进行存储;
步骤105:如果所述磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户;
步骤106:如果所述磁盘中未存储所述第一执行数据,则向所述用户发送告警信息,其中,所述告警信息用于指示所述第一执行数据更新失败。
在本发明实施例中,如获取到用户读取高实时性要求的第一执行数据时,不是从磁盘中直接获取第一执行数据,而是先确定缓存中是否存储从磁盘中同步而来的第一执行数据,以使在确定缓存中存储有第一执行数据快速响应给用户,最大程度降低磁盘的访问次数;如果缓存中未存储有第一执行数据,则将磁盘中存储的第一执行数据返回给用户,当确定磁盘中也未存储第一执行数据时,则可以确定第一执行数据在更新到磁盘过程中更新失败,此时需要向用户发送告警信息,以提示用户第一执行数据在磁盘中更新失败。由于缓存中存储的数据是从磁盘中存储的数据同步而来的,因此能够保证用户从缓存中读取到的数据与磁盘中的数据一致。
在本发明一实施例中,进一步包括:
S1:获取来自所述数据存储端的写入请求,其中,所述写入请求用于指示将第二执行数据写入所述磁盘;
S2:判断所述第二执行数据是否具有高实时性要求;
S3:如果所述第二执行数据具有高实时性要求,则进一步判断所述缓存中是否存储有与所述第二执行数据相匹配的历史执行数据,如果是,执行S4,否则执行S5;
S4:将所述缓存中存储的所述历史执行数据删除,执行S5;
S5:将所述第二执行数据存储到所述磁盘中,并删除所述磁盘中存储的所述历史执行数据;
S6:将所述磁盘中存储的所述第二执行数据同步到所述缓存中。
在本发明实施例中,对于具有高实时性要求的第二执行数据,在将第二执行数据存储到磁盘和缓存中之前,如缓存中已存在与第二执行数据相匹配的历史执行数据,则删除缓存中的历史执行数据,然后将第二执行数据存储到磁盘中,再删除磁盘中的历史执行数据,避免第二执行数据未在磁盘中存储成功,而磁盘中的历史执行数据又被删除,影响用户数据读取服务。最后再讲磁盘中存储的第二执行数据同步到缓存中,以保证用户从缓存中的数据与磁盘中的数据一致。
具体地,如果将具有高实时性要求的第一执行数据存储磁盘中失败的次数达到阈值,则可以基于预先设置的缓存更新时长,例如,2h,在2h后将磁盘中存储的与第一执行数据相匹配的历史执行数据同步到缓存中,以保证缓存中的数据与磁盘中的数据一致。
在本发明一实施例中,在S2之后,进一步包括:
如果所述第二执行数据无高实时性要求,则将所述第二执行数据存储到所述磁盘中,并删除所述磁盘中存储的所述历史执行数据;
将所述磁盘中存储的所述第二执行数据同步到所述缓存中,并删除缓存中存储的所述历史执行数据。
在本发明实施例中,在所要写入的第二执行数据无高实时性要求时,第二执行数据被读取的频率不高,因此可以先将第二执行数据存储到磁盘,然后删除磁盘中存储的与第二执行数据相匹配的历史执行数据,以使在磁盘中仅保留一份有效数据,然后将磁盘中存储的第二执行数据同步到缓存中,最后删除缓存中存储的历史执行数据,以避免先将缓存中的历史执行数据删除,在将第二执行数据存储到磁盘过程中失败时,还需要磁盘中存储的历史执行数据再次同步到缓存中,以简化数据更新操作。
在本发明一实施例中,进一步包括:
获取来自所述用户的第二读取请求,其中,所述第二读取请求用于读取无高实时性要求的所述第二执行数据;
判断所述缓存中是否存储有所述第二执行数据,其中,所述缓存中存储的所述第二执行数据从所述磁盘中存储的所述第二执行数据同步而来;
如果所述缓存中存储有所述第二执行数据,则将所述缓存中存储的所述第二执行数据返回给所述用户;
如果所述缓存中未存储所述第二执行数据,则将所述缓存中存储的所述历史执行数据返回给所述用户。
在本发明实施例中,当用户有读取无高实时性要求的第二执行数据的需求时,例如,读取某些词条的解释、某公司工作流程等无高实时性要求的数据。由于无高实时性要求的数据更新前更新后对用户影响较小,因此可以优先从缓存中读取第二执行数据返回给用户。当缓存中未存储第二执行数据时,则说明还未将磁盘中存储的第二执行数据同步到缓存中,因此可以先将缓存中与第二执行数据相匹配的历史执行数据返回给用户,以尽快响应用户。
在本发明一实施例中,在所述S1之前,进一步包括:
设置至少两个缓存队列;
在如果所述第二执行数据具有高实时性要求时,在所述判断所述缓存中是否存储有与所述第二执行数据相匹配的历史执行数据之前,进一步包括:
从所述至少两个缓存队列中,确定用于缓存第二执行数据的目标缓存队列;
将所述第二执行数据缓存到所述目标缓存队列中;
在S5之前,进一步包括:
当所述目标缓存队列中的所述第二执行数据处于可读取状态时,建立与所述目标缓存队列相关联的连接;
通过所述连接执行S5和S6。
在本发明实施例中,通过设置至少两个缓存队列,可以在数据存储端有数据写入请求时,从各个缓存队列中为写入请求指示的第二执行数据匹配对应的目标缓存队列,以实现将待写入的数据分发到不同的缓存队列中,再基于目标缓存队列建立用于写入第二缓存队列的连接,完成第二执行数据的写入服务。这样均衡的分发待写入的数据,可以使多个缓存队列同时工作,以使尽快完成数据写入服务,尽快响应给用户。并且还可以避免同一数据进行多次写入服务时需要建立多个连接占用内存的情况。
在本发明一实施例中,在所述设置至少两个缓存队列之后,在所述获取来自所述数据存储端的写入请求之前,进一步包括:
分别设置每一个所述缓存队列的队列标识;
设置至少两个哈希值;
确定每一个所述队列标识与至少一个所述哈希值的关联关系;
在所述获取来自所述数据存储端的写入请求之后,在所述建立与所述目标缓存队列相关联的连接之前,进一步包括:
确定所述第二执行数据的唯一标识;
对所述唯一标识进行哈希计算,获得所述第二执行数据的哈希值;
所述从所述至少两个缓存队列中,确定用于保存所述第二执行数据的目标缓存队列,包括:
根据所述关联关系,确定与所述第二执行数据的哈希值相关联的目标队列标识;
将所述目标队列标识指示的缓存队列作为目标缓存队列。
在本发明实施例中,在待写入的第二执行数据具有高实时性要求时,通过确定第二执行数据的唯一标识,计算第二执行数据的唯一标识的哈希值,再根据不同的缓存队列的队列标识和每一个队列标识与一个哈希值的关联关系,可以确定与第二执行数据的哈希值相关联的目标队列标识,进而确定目标缓存队列,以实现将待写入的数据均衡分发到不同的缓存队列中,通过多个队列同时工作尽快完成数据写入服务。
在本发明一实施例中,所述判断缓存中是否存储有所述第一执行数据,如果所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户,如果所述缓存中未存储所述第一执行数据,则进一步判断磁盘中是否存储有所述第一执行数据,包括:
确定在第一时长内,缓存中是否存储有所述第一执行数据;
如果在所述第一时长内所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户;
如果在所述第一时长内所述缓存中未存储所述第一执行数据,则进一步判断磁盘中是否存储有所述第一执行数据;
所述判断磁盘中是否存储有所述第一执行数据,如果所述磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户,如果所述磁盘中未存储所述第一执行数据,则向所述用户发送告警信息包括:
确定在第二时长内,磁盘中是否存储有所述第一执行数据;
如果在所述第二时长内磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户;
如果在所述第二时长内磁盘中未存储所述第一执行数据,则向所述用户发送告警信息;
其中,所述第一时长与所述第二时长之和不大于所述第一读取请求的响应时长。
在本发明实施例中,当在第一时长(例如,3s)内,确定缓存中存储有从磁盘同步而来的第一执行数据,则可将缓存中的第一执行数据返回给用户。反之,则确定在第二时长(例如4s)内,磁盘中是否存储有由数据存储端存储的第一执行数据,如果在第二时长内磁盘中存储了第一执行数据,则可以将底层磁盘中的第一执行数据返回给用户,以响应用户的数据读取服务,反之则向用户发送磁盘中的第一执行数据更新失败的告警信息,以使用户明确第一执行数据在磁盘中未更新成功。由于用户发来的第一读取请求有对应的响应时长,因此需要在该响应时长内将读取到的第一执行数据或磁盘中未存储有第一执行数据的告警信息返回给用户,以使用户在响应时间内得到回应。
如图2所示,为了更加清楚地说明本发明的技术方案及优点,下面对本发明提供的一种数据管理方法进行详细说明,具体可以包括以下步骤:
步骤201:获取来自用户用于读取高实时性要求的第一执行数据的第一读取请求。
步骤202:判断缓存中是否存储有第一执行数据,如果是,执行步骤203,否则,执行步骤204。
步骤203:将缓存中存储的第一执行数据返回给用户,结束当前流程。
步骤204:判断磁盘中是否存储有由数据存储端进行存储的第一执行数据,如果是,执行步骤205,否则,执行步骤206。
步骤205:将磁盘中存储的第一执行数据返回给用户,结束当前流程。
步骤206:向用户发送告警信息,其中,告警信息用于指示第一执行数据更新失败。
具体地,用户在请求读取具有高实时性要求的第一执行数据(例如,购物平台的库存、金额等实时性高的数据)时,优先从缓存中读取第一执行数据返回给用户,以降低磁盘的读取次数。当缓存中不存在由磁盘同步而来的第一执行数据时,再从底层的磁盘中读取第一执行数据返回给用户,以满足用户的数据读取需求。当磁盘中也不存在第一执行数据时,说明第一执行数据在写入磁盘时发生异常,因此需要向用户发送告警信息,以提示用户第一执行数据未在磁盘更新成功。
具体地,对于缓存还可以预先设置缓存时间,例如2h,当磁盘中的数据同步到缓存失败时,可以在缓存时间过期时,将磁盘中的数据再次同步到缓存中,以使保证磁盘中数据与缓存中数据的一致性。
具体地,在确定缓存中是否存储有具有高实时性要求的第一执行数据时,需要在第一时长(例如,3s)内完成,在确定磁盘中是否存储有数据存储端存储的具有高实时性要求的第一执行数据时,需要在第二时长内完成。由于用户发来的第一读取请求有对应的响应时长,因此第一时长和第二时长之和不大于响应时长,即在响应时长内将读取到的第一执行数据或磁盘中未存储有第一执行数据的告警信息返回给用户,以使用户在响应时间内得到回应。
步骤207:当获取到来自数据存储端用于指示将第二执行数据写入磁盘的写入请求时,判断第二执行数据是否具有高实时性要求,如果是,执行步骤208,否则,执行步骤214。
具体地,数据存储端可以在用户请求读取数据后发来数据写入请求,也可以在数据写入后再次发来数据写入请求,本实施例的数据存储端是在用户在读取数据失败后发来写入请求。
步骤208:从预设的至少两个缓存队列中,确定用于缓存第二执行数据的目标缓存队列,并将第二执行数据缓存到目标缓存队列中,执行步骤209。
具体地,数据存储端在发来数据写入请求时,当写入请求指示的第二执行数据具有高实时性要求时,先基于第二执行数据的唯一标识进行哈希计算,获得第二执行数据的哈希值,然后基于预设的至少两个缓存队列的队列标识中的每一个队列标识,与预设的一个哈希值的关联关系,确定第二执行数据的哈希值相关联的目标队列标识,进而确定目标队列标识所指示的缓存队列为与第二执行数据相匹配的目标缓存队列,再将第二执行数据缓存到目标缓存队列中等待写入。
具体地,每一个队列标识与一个哈希值的关联关系可以是相等关系、倍数关系,但不限于此。
步骤209:判断缓存中是否存储有与第二执行数据相匹配的历史执行数据,如果是,执行步骤210,否则执行步骤211。
步骤210:将缓存中存储的历史执行数据删除,执行步骤211。
步骤211:当目标缓存队列中的第二执行数据处于可读取状态时,建立与目标缓存队列相关联的连接,执行步骤212。
步骤212:通过连接,将第二执行数据存储到磁盘中,并删除磁盘中存储的历史执行数据,执行步骤213。
步骤213:通过连接,将磁盘中存储的第二执行数据同步到缓存中,结束当前流程。
步骤214:将第二执行数据存储到磁盘中,并删除磁盘中存储的历史执行数据,执行步骤215。
步骤215:将磁盘中存储的第二执行数据同步到缓存中,并删除缓存中存储的历史执行数据。
具体地,在将具有高实时性要求的第二执行数据缓存到目标缓存队列后,先删除缓存中与第二执行数据相匹配的历史执行数据,避免此时用户从缓存中读取数据,而磁盘中此时正在写入新的数据,导致用户从缓存中读取到的数据,与磁盘中存储的数据不一致的情况。再通过目标缓存队列中的第二执行数据处于可读取状态,即可进行写入服务时,建立目标缓存队列相关联的连接,并通过该连接将第二执行数据存储到磁盘中,并删除磁盘中与第二执行数据相匹配的历史执行数据,以在磁盘中保留一份有效数据,最后将磁盘中的第二执行数据同步到缓存中,实现缓存中的数据与磁盘中的数据一致的目的。
步骤216:当获取到来自用户的用于读取无高实时性要求的第二执行数据第二读取请求时,判断缓存中是否存储有从磁盘中同步而来的第二执行数据,如果是,执行步骤217,否则,执行步骤218。
具体地,用户可以在任何条件下读取无高实时性要求的第二执行数据,本实施例是在将高实时性要求的第二执行数据写入到磁盘,并同步到缓存后获取到用户读取无高实时性要求的第二读取请求。
步骤217:将缓存中存储的第二执行数据返回给用户,结束当前流程。
步骤218:将缓存中存储的历史执行数据返回给用户,结束当前流程。
具体地,当用户无高实时性要求的第二执行数据时,由于无高实时性要求的数据每次变更差异小,变更频率较低、且用户读取的频率也较低,因此,在缓存中存储有从磁盘中同步而来的无高实时性要求的第二执行数据时,直接将缓存中的第二执行数据返回给用户,以尽快响应用户。当缓存中未存有从磁盘中同步而来的无高实时性要求的第二执行数据时,则将缓存中与第二执行数据相匹配的历史执行数据返回给用户,以满足用户的读取需求。
综上所述,本方案可以短时间内或者说近实时的将实时性较低的数据更新到缓存当中,采用“缓存队列+数据更新服务+缓存更新通知”,三段服务协同处理策略。针对于实时性较高的数据,摒弃“缓存+磁盘数据”同时更新策略,而是采用“删除缓存+并行数据更新服务+延时读取正在更新的数据”策略保证更新数据时不会被打断,即使出现异常情况,用户的操作失败,也不会出现缓存和磁盘数据不一致的问题,这时只需要用户重新操作即可,或者***内提供自动重试功能。
如图3所示,本发明实施例提供了一种数据管理装置,包括:
请求管理模块301,用于获取来自用户的第一读取请求,其中,所述第一读取请求用于读取高实时性要求的第一执行数据;
缓存管理模块302,用于判断缓存中是否存储有所述请求管理模块301获取的所述第一读取请求所要读取的所述第一执行数据,其中,所述缓存中存储的所述第一执行数据从磁盘中存储的所述第一执行数据同步而来;如果所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户;如果所述缓存中未存储所述第一执行数据,则触发磁盘管理模块303;
所述磁盘管理模块303,用于在所述缓存中未存储所述第一执行数据条件下被所述缓存管理模块触发时,判断磁盘中是否存储有所述第一执行数据,其中,所述磁盘中存储的所述第一执行数据由数据存储端进行存储;如果所述磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户;如果所述磁盘中未存储所述第一执行数据,则向所述用户发送告警信息,其中,所述告警信息用于指示所述第一执行数据更新失败。
在本发明实施例中,如请求管理模块获取到用户读取高实时性要求的第一执行数据时,磁盘管理模块不是从磁盘中直接获取第一执行数据,而是缓存管理模块先确定缓存中是否存储从磁盘中同步而来的第一执行数据,以使在确定缓存中存储有第一执行数据快速响应给用户,最大程度降低磁盘的访问次数;如果缓存中未存储有第一执行数据,则触发磁盘管理模块将磁盘中存储的第一执行数据返回给用户,当确定磁盘中也未存储第一执行数据时,则可以确定第一执行数据在更新到磁盘过程中更新失败,此时需要向用户发送告警信息,以提示用户第一执行数据在磁盘中更新失败。由于缓存中存储的数据是从磁盘中存储的数据同步而来的,因此能够保证用户从缓存中读取到的数据与磁盘中的数据一致。
如图4所示,在本发明一实施例中,所述数据管理装置进一步包括:数据属性管理模块401;
所述请求管理模块301,进一步用于获取来自所述数据存储端的写入请求,其中,所述写入请求用于指示将第二执行数据写入所述磁盘;
所述数据属性管理模块401,用于判断所述第二执行数据是否具有高实时性要求;如果所述第二执行数据具有高实时性要求,则进一步判断所述缓存中是否存储有与所述第二执行数据相匹配的历史执行数据,如果是,触发所述缓存管理模块301执行S4,否则触发所述磁盘管理模块302执行S5;
所述缓存管理模块301,进一步用于S4:将所述缓存中存储的所述历史执行数据删除,并触发所述磁盘管理模块302执行S5;
所述磁盘管理模块,进一步用于被触发时,执行S5:将所述第二执行数据存储到所述磁盘中,并删除所述磁盘中存储的所述历史执行数据;S6:将所述磁盘中存储的所述第二执行数据同步到所述缓存中。
在本发明一实施例中,所述缓存管理模块,用于确定在第一时长内,缓存中是否存储有所述第一执行数据;如果在所述第一时长内所述缓存中存储有所述第一执行数据,则将所述缓存中存储的所述第一执行数据返回给所述用户;如果在所述第一时长内所述缓存中未存储所述第一执行数据,触发所述磁盘管理模块;
所述磁盘管理模块,用于在所述第一时长内所述缓存中未存储所述第一执行数据条件下,被所述缓存管理模块触发时,确定在第二时长内,磁盘中是否存储有所述第一执行数据;如果在所述第二时长内磁盘中存储有所述第一执行数据,则将所述磁盘中存储的所述第一执行数据返回给所述用户;如果在所述第二时长内磁盘中未存储所述第一执行数据,则向所述用户发送告警信息;其中,所述第一时长与所述第二时长之和不大于所述第一读取请求的响应时长。
本发明各个实施例至少具有如下有益效果:
1、在本发明一实施例中,如获取到用户读取高实时性要求的第一执行数据时,不是从磁盘中直接获取第一执行数据,而是先确定缓存中是否存储从磁盘中同步而来的第一执行数据,以使在确定缓存中存储有第一执行数据快速响应给用户,最大程度降低磁盘的访问次数;如果缓存中未存储有第一执行数据,则将磁盘中存储的第一执行数据返回给用户,当确定磁盘中也未存储第一执行数据时,则可以确定第一执行数据在更新到磁盘过程中更新失败,此时需要向用户发送告警信息,以提示用户第一执行数据在磁盘中更新失败。由于缓存中存储的数据是从磁盘中存储的数据同步而来的,因此能够保证用户从缓存中读取到的数据与磁盘中的数据一致。
2、在本发明一实施例中,对于具有高实时性要求的第二执行数据,在将第二执行数据存储到磁盘和缓存中之前,如缓存中已存在与第二执行数据相匹配的历史执行数据,则删除缓存中的历史执行数据,然后将第二执行数据存储到磁盘中,再删除磁盘中的历史执行数据,避免第二执行数据未在磁盘中存储成功,而磁盘中的历史执行数据又被删除,影响用户数据读取服务。最后再讲磁盘中存储的第二执行数据同步到缓存中,以保证用户从缓存中的数据与磁盘中的数据一致。
3、在本发明一实施例中,在所要写入的第二执行数据无高实时性要求时,第二执行数据被读取的频率不高,因此可以先将第二执行数据存储到磁盘,然后删除磁盘中存储的与第二执行数据相匹配的历史执行数据,以使在磁盘中仅保留一份有效数据,然后将磁盘中存储的第二执行数据同步到缓存中,最后删除缓存中存储的历史执行数据,以避免先将缓存中的历史执行数据删除,在将第二执行数据存储到磁盘过程中失败时,还需要磁盘中存储的历史执行数据再次同步到缓存中,以简化数据更新操作。
4、在本发明一实施例中,当用户有读取无高实时性要求的第二执行数据的需求时,例如,读取某些词条的解释、某公司工作流程等无高实时性要求的数据。由于无高实时性要求的数据更新前更新后对用户影响较小,因此可以优先从缓存中读取第二执行数据返回给用户。当缓存中未存储第二执行数据时,则说明还未将磁盘中存储的第二执行数据同步到缓存中,因此可以先将缓存中与第二执行数据相匹配的历史执行数据返回给用户,以尽快响应用户。
5、在本发明一实施例中,通过设置至少两个缓存队列,可以在数据存储端有数据写入请求时,从各个缓存队列中为写入请求指示的第二执行数据匹配对应的目标缓存队列,以实现将待写入的数据分发到不同的缓存队列中,再基于目标缓存队列建立用于写入第二缓存队列的连接,完成第二执行数据的写入服务。这样均衡的分发待写入的数据,可以使多个缓存队列同时工作,以使尽快完成数据写入服务,尽快响应给用户。并且还可以避免同一数据进行多次写入服务时需要建立多个连接占用内存的情况。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。