CN115729929A - 数据更新方法、装置、计算机设备及存储介质 - Google Patents

数据更新方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN115729929A
CN115729929A CN202111012537.6A CN202111012537A CN115729929A CN 115729929 A CN115729929 A CN 115729929A CN 202111012537 A CN202111012537 A CN 202111012537A CN 115729929 A CN115729929 A CN 115729929A
Authority
CN
China
Prior art keywords
access
queue
data
request
index
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.)
Pending
Application number
CN202111012537.6A
Other languages
English (en)
Inventor
周志伟
陈云云
曾楚伟
李斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202111012537.6A priority Critical patent/CN115729929A/zh
Publication of CN115729929A publication Critical patent/CN115729929A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种数据更新方法、装置、计算机设备及存储介质,涉及云技术、大数据、云存储等技术领域。通过在至少两个访问请求触发数据更新时,先基于访问索引确定访问队列,实现将多个访问请求准确集中于队列中统一、便捷化的管理;由访问队列中头请求来更新索引数据,头请求对应的头线程唤醒除头请求外的其余访问请求对应的等待线程,使得其余访问请求无需重复执行更新便可直接访问更新后的索引数据;从而避免了大量访问请求的重复更新,尤其对于高并发场景,可以避免高并发的海量请求穿透后台设备,避免海量请求同时重复更新导致的更新错误、产生脏数据、操作系统崩溃等问题,保证了数据更新过程的准确性,提高了更新过程的可靠性。

Description

数据更新方法、装置、计算机设备及存储介质
技术领域
本申请涉及云技术、大数据、云存储等技术领域,本申请涉及一种数 据更新方法、装置、计算机设备及存储介质。
背景技术
随着应用中各项业务的规模扩大,业务数据爆炸式增长,缓存因具备 较高访问速度而被广泛应用到各项业务中,合理使用缓存可以有效减轻对 数据库所在服务器的访问压力。然而,随着业务更新,缓存中数据时常也 需要更新。
相关技术中,数据更新的方法可以包括:当需要更新缓存中某项数据 时,先删除该项数据以使缓存失效,从数据库中获取最新数据,并将最新 数据更新至缓存中,更新后再恢复对缓存中数据的访问。
上述数据更新方法中需要先中断、再恢复缓存,此时若有大量并发访 问请求只能直接访问服务器的数据库来更新缓存中数据,使得服务器被大 量请求穿透而造成服务器系统雪崩,易更新失败,从而上述数据更新方法 的可靠性较差。
发明内容
本申请提供了一种数据更新的方法、装置、计算机设备及存储介质, 可以解决相关技术中数据更新方法的可靠性较差的问题。所述技术方案如 下:
一方面,提供了一种数据更新方法,所述方法包括:
响应于触发数据更新的至少两个访问请求,基于所述至少两个访问请 求对应的访问索引,确定访问队列,所述访问队列包括至少两个访问请求, 任一访问请求用于访问与其对应访问索引的索引数据;
基于所述访问队列中的头请求,对与所述访问队列中各个访问请求相 匹配的索引数据进行更新,所述头请求是指位于所述访问队列的头节点的 访问请求;
基于所述头请求对应的头线程,唤醒所述访问队列中除所述头请求之 外的至少一个访问请求对应的等待线程,所述等待线程用于等待执行对应 访问请求的访问操作;
基于所述访问队列中至少两个访问请求对应的线程,访问更新后的索 引数据。
在一个可能实现方式中,所述访问队列包括至少两个指定请求时,所 述通过所述头线程,执行对所述索引数据的指定访问操作,包括:
通过所述头线程,对所述至少两个指定请求进行冲突检测;
响应于所述至少两个指定请求之间不存在冲突时,通过所述头线程, 执行所述至少两个指定请求的至少两个指定访问操作;
响应于所述至少两个指定请求之间存在冲突时,通过所述头线程,执 行所述至少两个指定请求中符合冲突策略的请求的目标指定操作。
在一个可能实现方式中,所述触发数据更新的至少两个访问请求是 指:访问缓存数据库未命中的访问请求或者访问缓存数据库中过期数据的 访问请求。
在一个可能实现方式中,所述基于所述头请求对应的头线程,唤醒所 述访问队列中除所述头请求之外的至少一个访问请求对应的等待线程,包 括:
响应于与各个访问请求相匹配的索引数据更新成功时,通过所述头线 程,将所述访问队列中至少两个访问请求从所述访问队列中逐个移出,并 唤醒从所述访问队列移出的访问请求对应的等待线程。
另一方面,提供了一种数据更新的装置,该装置包括:
队列确定模块,用于响应于触发数据更新的至少两个访问请求,基于 所述至少两个访问请求对应的访问索引,确定包括访问队列,所述访问队 列包括至少两个访问请求,任一访问请求用于访问与其对应访问索引的索 引数据;
更新模块,用于基于所述访问队列中的头请求,对与所述访问队列中 各个访问请求相匹配的索引数据进行更新,所述头请求是指位于所述访问 队列的头节点的访问请求;
唤醒模块,用于基于所述头请求对应的头线程,唤醒所述访问队列中 除所述头请求之外的至少一个访问请求对应的等待线程,所述等待线程用 于等待执行对应访问请求的访问操作;
访问模块,用于基于所述访问队列中至少两个访问请求对应的线程, 访问更新后的索引数据。
另一方面,提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储器;
一个或多个计算机程序,其中所述一个或多个应用程序被存储在所述 存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序 配置用于:执行上述的数据更新方法。
另一方面,提供了一种计算机可读存储介质,所述计算机存储介质用 于存储计算机指令,当所述计算机指令在计算机上运行时,使得计算机可 以执行上述的数据更新方法。
另一方面,提供了一种计算机程序产品,其特征在于,包括计算机程 序或指令,所述计算机程序或指令被处理器执行时实现上述的数据更新方 法。
本申请提供的技术方案带来的有益效果是:
通过在至少两个访问请求触发数据更新时,先基于访问索引确定访问 队列,实现将多个访问请求准确集中于队列中统一、便捷化的管理;由访 问队列中头请求来更新访问队列中各个访问请求相匹配的索引数据,头请 求对应的头线程唤醒除头请求外的其余访问请求对应的等待线程,使得其 余访问请求无需重复执行更新便可直接访问由头请求更新后的索引数据; 从而避免了大量访问请求的重复更新,尤其对于高并发场景,可以避免高 并发的海量请求穿透后台设备,避免海量请求同时重复更新导致的更新错 误、产生脏数据、操作系统崩溃等问题,保证了数据更新过程的准确性, 提高了更新过程的可靠性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施 例描述中所需要使用的附图作简单地介绍。
图1为本申请提供的一种数据更新方法的实施环境示意图;
图2为本申请实施例提供的一种数据更新方法的流程示意图;
图3为本申请实施例提供的一种确定第三访问队列的流程示意图;
图4为本申请实施例提供的一种数据更新流程的示意图;
图5为本申请实施例提供的一种数据更新装置的结构示意图;
图6为本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其 中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似 功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本 申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式 “一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理 解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、 步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他 特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我 们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到 其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦 接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个 或更多个相关联的列出项的全部或任一单元和全部组合。
云存储(Cloud Storage)是在云计算概念上延伸和发展出来的一个新 的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网 格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储 设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协 同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为 每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者 某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将 数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个 对象,对象不仅包含数据而且还包含数据标识(ID,ID entity)等额外 的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件 系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文 件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
数据库(Database),简而言之可视为电子化的文件柜——存储电子文 件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。 所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可 能小的冗余度、与应用程序彼此独立的数据集合。
数据库管理系统(英语:Database Management System,简称DBMS) 是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、 备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分 类,例如关系式、XML(Extensible MarkupLanguage,即可扩展标记语言); 或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依 据所用查询语言来作分类,例如SQL(结构化查询语言(Structured QueryLanguage)、XQuery;或依据性能冲量重点来作分类,例如最大规模、最 高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS 能够跨类别,例如,同时支持多种查询语言。
云计算(Cloud Computing)指IT基础设施的交付和使用模式,指通过 网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使 用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以 是IT和软件、互联网相关,也可是其他服务。云计算是网格计算(Grid Computing)、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network StorageTechnologies)、虚拟化(Virtualization)、负载均衡(Load Balance) 等传统计算机和网络技术发展融合的产物。
随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、 社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不 同于以往的并行分布式计算,云计算的产生从理念上将推动整个互联网模 式、企业管理模式发生革命性的变革。
云社交(Cloud Social)是一种物联网、云计算和移动互联网交互应 用的虚拟社交应用模式,以建立著名的“资源分享关系图谱”为目的,进 而开展网络社交,云社交的主要特征,就是把大量的社会资源统一整合和 评测,构成一个资源有效池向用户按需提供服务。参与分享的用户越多, 能够创造的利用价值就越大。
云会议是基于云计算技术的一种高效、便捷、低成本的会议形式。使 用者只需要通过互联网界面,进行简单易用的操作,便可快速高效地与全 球各地团队及客户同步分享语音、数据文件及视频,而会议中数据的传输、 处理等复杂技术由云会议服务商帮助使用者进行操作。
云会议系统支持多服务器动态集群部署,并提供多台高性能服务器, 大大提升了会议稳定性、安全性、可用性。近年来,视频会议因能大幅提 高沟通效率,持续降低沟通成本,带来内部管理水平升级,而获得众多用 户欢迎,已广泛应用在政府、军队、交通、运输、金融、运营商、教育、 企业、车联网等各个领域。毫无疑问,视频会议运用云计算以后,在方便 性、快捷性、易用性上具有更强的吸引力,必将激发视频会议应用新高潮 的到来。
本申请提供的数据更新方法,可以采用上述的云存储、数据库以及云 计算等技术实现。示例性的,可以采用本申请的数据更新方法对缓存数据 进行更新,例如,可以利用云存储技术存储并更新缓存数据;例如,基于 云存储技术的文件系统为大量缓存数据分配物理存储空间,利用文件系统 所记录的各个缓存数据的存储位置信息访问并更新缓存数据。示例性的, 本申请还可采用数据库技术,对缓存数据库中数据进行新增、查询、更新、 删除等操作,以实现对缓存数据的实时管理、快速更新等操作。本申请可 以利用云计算技术,实现对访问队列的迅速创建过程;例如,结合云计算 技术对高并发的访问请求所对应的线程进行入队操作,生成访问队列,以 便基于访问队列中头线程来更新该缓存数据。
本申请提供的数据更新方法可以应用于有缓存使用需求的任一场景。 示例性的,可以应用于云社交、云会议、医疗云、云游戏等各个技术领域。 例如,在云社交领域中,可以利用本申请的数据更新方法,对社交平台的 海量用户数据进行实时维护、更新。在云会议领域中,可以利用本申请的 数据更新方法,对会议同步分享的文字、语音、数据文件及视频进行实时 更新。
图1为本申请提供的一种数据更新方法的实施环境示意图。如图1所 示,该实施环境包括:第一设备101、第二设备102以及第三设备103。 该第一设备101存储有缓存数据,该第二设备102可以访问该第一设备 101中的缓存数据。该第三设备103用于为第一设备101提供缓存数据的 原数据。该第三设备103包括用于提供原数据的资源。第一设备101可以基于第三设备103所包括资源来更新第一设备101所存储的缓存数据。示 例性的,该第三设备103所包括资源可以为该缓存数据的原数据,也可以 为用于提供该原数据的程序,例如,用于提供原数据的服务、接口或者实 例等。该第二设备102可以基于与第一设备101之间的信息交互,实现从 第一设备101中访问数据的过程。该第一设备101可以基于与第三设备103之间的信息交互,从该第三设备103所包括资源中拉取数据,基于所 拉取数据实现对第一设备101所存储缓存数据的更新过程。
示例性的,该第二设备102可以向第一设备101发送访问请求,该第 一设备101接收访问请求,并运行线程来执行对该访问请求的访问操作。 通过访问请求访问缓存数据时,如果该访问请求触发数据更新,可以通过 所运行的线程,从第三设备103中拉取数据来更新缓存数据,以便后续访 问请求可以直接访问更新后的缓存数据。示例性的,该第一设备101上运 行有用于提供数据访问服务的程序,该程序可以通过多个线程,为多个访 问请求提供数据访问服务,每个访问请求对应一个线程。
在一可能场景中,该第一设备101上可以集成有缓存更新程序,该第 一设备101可以通过执行该缓存更新程序以实现本申请的数据更新过程; 例如,该第一设备101上可以安装有用于管理缓存数据的数据管理组件, 该数据管理组件中包括该缓存更新程序,在第二设备102访问第一设备 101的缓存数据时,如需更新缓存数据,则第一设备101可以基于该数据 管理组件进行更新。在另一可能场景中,该缓存更新程序可以集成在第二 设备102上,当第二设备102访问第一设备101所存储的缓存数据时,第 一设备101可以基于第二设备102的访问请求,向第二设备102返回待访 问的数据,并在第二设备102确定需要更新缓存数据时,由第二设备102 执行缓存更新程序,也即是,由第二设备102从第三设备102中拉取数据, 并将所拉取数据发送至第一设备101,第一设备101基于接收到的拉取数 据更新的缓存数据。
该第一设备101可以为存储有缓存数据并执行数据更新过程的任一 计算机设备,例如,服务器、服务集群或者终端等;例如,该第一设备 101可以为应用程序的后台服务器,或者用于为该后台服务器提供缓存数 据访问功能的服务器等。该第一设备101、第二设备102以及第三设备103 中每个设备,可以为物理设备或者基于物理设备虚拟的服务节点;物理设 备可以包括服务器、服务集群或终端设备等。例如,该第一设备101、第 二设备102以及第三设备103可以位于同一服务集群或多个服务集群中。
示例性的,服务器可以是独立的物理服务器,也可以是多个物理服务器 构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计 算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服 务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工 智能平台等基础云计算服务的云服务器或服务器集群。上述网络可以包括但 不限于:有线网络,无线网络,其中,该有线网络包括:局域网、城域网和广域网,该无线网络包括:蓝牙、Wi-Fi及其他实现无线通信的网络。终端 可以是某一机构的管理终端、智能手机(如Android手机、iOS手机等)、平 板电脑、笔记本电脑等。具体也可基于实际应用场景需求确定,在此不作限 定。
下面对本申请涉及的名词进行介绍:
访问请求:表示访问索引数据的请求;示例性的,访问请求可以对应 有访问索引,访问请求用于访问与其对应访问索引的索引数据;例如,访 问请求可以携带索引键key1,例如可以表示访问key1对应的value1;可 以由访问请求对应的线程执行该访问请求的访问操作。
缓存数据:缓存数据可以包括索引信息和索引数据;缓存数据可以为 key-value(键-值)形式存储的数据,key为索引键,value为索引数据; 缓存数据可以是高频访问的热点数据,例如几千次/秒,或几万次/秒;或 者也可以包括不经常改变,且读取频次远大于写入频次的数据,例如,几 天甚至几个周、几个月才变更一次。
缓存数据的访问、更新逻辑:由访问请求触发,访问请求访问缓存数 据库未命中或者访问缓存数据库中过期数据时,则会触发数据更新;本申 请中,可以基于访问队列中头请求进行更新;例如,基于访问请求M访问 数据a时,数据a过期,则触发数据a的更新过程;数据a更新后再被访 问队列中各个访问请求所访问。
头请求:是指位于访问队列的头节点的访问请求,也即是,头请求位 于访问队列首位的位置,头请求对应的线程为头线程。
线程:用于执行对应访问请求的访问操作,例如,可以一个访问请求 对应一个线程。
头线程:用于执行更新过程的线程;对应于位于头节点的头请求,可 以称为leader线程。
等待线程:用于等待头线程执行更新后再访问数据;访问队列中除头 请求之外的访问请求对应的线程,等待线程对应的访问请求入队后保持挂 起状态,直至被头线程唤醒,执行与其对应访问请求的访问操作。
访问索引:访问请求携带的索引,用于检寻索引数据的索引;访问索 引可以包括索引键或虚拟键;例如,访问请求可以携带key。
索引信息:缓存数据包括的索引信息,索引信息用于检寻索引数据的 索引;索引信息可以包括索引键,也可以包括索引键以及索引键所属的数 据桶;每个数据桶可以用于指示一个或多个索引键对应的索引数据;示例 性的,可以基于访问请求携带的访问索引,利用缓存数据库中关联存储的 索引信息和索引数据,在缓存数据库中查询访问索引所对应的索引数据。
索引数据:缓存数据包括的索引数据,也是实际需访问的数据; key-value数据中value为索引数据;一个key可以对应一个value,也 可以对应两个或多个value;索引数据的数据结构类型可以包括但不限于: 字符串、哈希、列表、集合、有序集合等。
目标锁:可以锁定访问队列的队列操作的锁结构,用于锁定执行队列 操作的线程的唯一性;队列操作可以包括入队操作和出队操作中至少一 项;例如,目标锁可以为互斥锁;当然也可以为自旋锁或其他锁。
比较并交换操作:属于原子操作,顾名思义,比较两个参数值,若相 同则交换两个参数值;比较并交换操作涉及三个变量:待比较变量、预期 值和目标值;若待比较变量与预期值相同,则交换待比较变量和目标值, 也即是,将目标值赋给待比较变量;对应结合后续步骤2012的入队过程 以及步骤203的出队过程,再进行详述。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本 申请实施方式作进一步地详细描述。
图2为本申请实施例提供的一种数据更新方法的流程示意图。该方法 的执行主体可以为计算机设备。如图2所示,该方法包括以下步骤。
步骤201、计算机设备响应于触发数据更新的至少两个访问请求,基 于该至少两个访问请求对应的访问索引,确定访问队列。
访问队列包括至少两个访问请求,任一访问请求用于访问与其对应访 问索引的索引数据,触发数据更新是指触发该访问请求待访问的索引数据 的更新过程。在一个可能实现方式中,触发数据更新的至少两个访问请求 是指:访问缓存数据库未命中的访问请求或者访问缓存数据库中过期数据 的访问请求。过期数据是指当前时间到达该索引数据的过期时间。在一个 可能示例中,对于任一索引数据,当任一访问请求访问该索引数据时未命 中或当前时间达到该索引数据的过期时间时,该计算机设备确定该索引数 据需更新。其中,未命中是指未能成功访问到该索引数据;例如,该索引 数据不存在或者该索引数据错误等。该索引数据的配置信息中可以配置有 过期时间,该过期时间是指索引数据失效的时间;例如,当前时间达到过 期时间x年x月x日x时,索引数据失效。本申请实施例还可以基于其它 情况触发对索引数据的更新,本申请实施例对如何触发数据更新过程不作 具体限定。例如,用户也可以基于需要触发更新指令来触发数据更新,则 接收到更新指令时访问待更新的访问请求触发数据更新。需要说明的是, 由待访问该索引数据的访问请求对应的线程触发该索引数据的更新,本申 请中,可以由访问队列中的头线程执行更新过程。
在一种可能实现方式中,该缓存数据库中的缓存数据可以为索引信息 与索引数据关联存储的形式,也即是,该缓存数据可以包括索引信息和索 引数据,索引信息是指检寻索引数据的信息。计算机设备后续可以基于访 问请求对应的访问索引,利用该缓存数据库中的索引信息和索引数据之间 的关联关系,从缓存数据库中查询该访问索引对应的索引数据。
在本步骤中,计算机设备可以基于访问请求对应的访问索引,确定该 访问索引对应的访问队列,该访问队列包括用于访问该访问索引对应的索 引数据的至少两个访问请求。
示例性的,访问请求携带的访问索引也可以包括索引键,基于访问请 求携带的索引键,从缓存数据库中检寻索引键对应的索引数据。该缓存数 据中的索引信息包括索引键和索引键所属的数据桶中的至少一项。在一个 可能示例中,该索引信息可以包括索引键;可以一个索引键对应一个访问 队列。在另一个可能示例中,该索引信息可以包括索引键和索引键所属的 数据桶;可以一个数据桶对应一个访问队列;示例性的,该缓存数据可以 分桶进行存储,每个数据桶用于指示多个索引键对应的索引数据;例如, 数据桶A包括key1、key2和key3。在另一可能示例中,访问索引也可以 包括虚拟键,虚拟键是指待访问的缓存数据库中不存在的索引键;也即是, 访问缓存数据库时未命中索引键,则该计算机设备可以为待访问数据配置 虚拟键,该虚拟键对应关联有访问队列。
基于索引信息和访问索引的上述几种可能情况,相应的,该计算机设 备确定访问队列的方式至少可以包括以下三种。
方式一、该计算机设备基于该索引键,确定该索引键对应的访问队列。
该计算机设备基于访问请求携带的索引键,确定与该索引键对应的访 问队列。索引键对应的访问队列包括:待访问该索引键对应的索引数据的 至少两个访问请求;示例性的,待访问该索引键对应的索引数据中的待更 新索引数据,该待更新索引数据为:该索引键对应的索引数据中被触发更 新的索引数据。
方式二、该计算机设备基于该索引键所属的数据桶,确定该数据桶对 应的访问队列。
该数据桶对应的访问队列包括待访问该数据桶中任一索引键对应的 索引数据的至少两个访问请求。示例性的,该至少两个访问请求可以为用 于访问数据桶中任一索引键对应的索引数据中待更新索引数据。
方式三、该计算机设备基于该虚拟键,确定该虚拟键对应的访问队列。
该虚拟键对应的访问队列包括待访问该虚拟键对应的索引数据的至 少两个访问请求。该虚拟键是指待访问的缓存数据库中不存在的索引键, 故该虚拟键对应的索引数据为待更新索引数据。该计算机设备可根据该虚 拟键,确定包括至少一个线程的访问队列,该至少一个线程用于访问该虚 拟键对应的索引数据。在一个可能示例中,线程访问缓存数据库时未命中 索引键,也即是,未查找到索引键,计算机设备可以配置一个虚拟键对应 关联访问队列。例如,缓存数据库中可能包括原数据的一部分数据,对于 缓存数据库中未包括的另一部分原数据的访问操作,可以先建立其对应的 虚拟键对应关联访问队列,以便后续基于原数据更新至缓存数据库中。
通过基于访问索引,确定访问队列,可以将多个访问请求集中于队列 中进行统一、便捷化管理,提高了管理效率;并且,可以将各个访问请求 按照访问索引精确划分至多个访问队列,使得后续可以基于访问索引对访 问请求进行管理;即可以为索引键对应访问队列,也可以是数据桶对应一 个访问队列,还可以增配虚拟键对应一个访问队列;灵活的满足了多种场 景需求,提高了数据更新方法的适用性,提高了后续基于访问队列进行更新数据的准确性。
需要说明的是,对于确定该访问索引对应的访问队列的方式,本申请 仅以上述方式一至方式三举例示出;当然,除了上述方式一至方式三的三 种方式以外,还可以针对索引数据对应关联有访问队列。本申请实施例对 该访问队列的划分粒度不做具体限定,可以一个索引键或一个数据桶对应 一个访问队列。在另一个可能示例中,计算机设备可以基于索引键对应的 每个索引数据的访问频次,从索引键对应的多个索引数据中确定访问频次超过目标频次的高频数据,确定包括待访问该高频数据的至少一个线程的 访问队列;尤其对应高并发访问场景,通过针对高频数据确定高频数据对 应的访问队列,以实现对高频数据的快速更新,进一步迅速响应对高频数 据有访问需求的热点业务。
本步骤中,该计算机设备可以先创建初始队列,再基于该初始队列和 待访问的线程得到访问队列。在一可能实现方式中,步骤201可以包括以 下步骤2011-2012。
步骤2011、计算机设备响应于触发数据更新的至少两个访问请求, 基于该访问索引,创建该访问索引所对应的初始队列。
该计算机设备可以获取空队列,基于对空队列的配置信息,对该空队 列进行初始化处理,得到该访问索引所对应的初始队列。该配置信息可以 包括但不限于:头节点、尾节点、队列长度和队列使用内存中至少一项。 例如,该计算机设备可以配置空队列的队列长度,基于配置的队列长度配 置队列当前使用内存等。
示例性的,该计算机设备基于该访问索引,创建该访问索引对应的初 始队列。基于访问索引的上述几种可能情况,该计算机设备可以基于该访 问索引,创建该索引键对应的初始队列;或者,创建该数据桶对应的初始 队列,或者,创建虚拟键对应的初始队列。
在一可能实现方式中,该计算机设备可以创建配置有目标锁的队列, 也可以创建头尾相接的环型队列,还可以配置双向链表形式的队列。在一 个可能示例中,该计算机设备可以基于队列属性变量和队列操作的目标 锁,创建该访问索引对应的第一初始队列,该目标锁用于锁定对该第一初 始队列执行队列操作的线程的唯一性,该队列操作包括入队操作和出队操 作中至少一项,该队列属性变量包括队列长度变量和内存使用变量中的至少一项。示例性的,该计算机设备可以创建空队列,并基于队列属性变量 和目标锁对该空队列进行初始化处理,得到该第一初始队列。例如,该计 算机设备可以为该空队列配置该队列属性变量的初始值,以及配置针对队 列操作的目标锁,得到该第一初始队列。例如,可以将队列长度变量的初 始值配置为0或1等。其中,该入队操作是指将线程添加至队列的操作, 该出队操作是指将线程移出队列的操作。该队列长度变量用于指示第一初 始队列的当前长度;加入第一初始队列的线程的数量越多,该队列长度变 量的取值越大。该目标锁可以为互斥锁,当然,也可以为自旋锁或者能够 锁定执行队列操作的线程的唯一性的任意结构的锁。
在另一个可能示例中,该计算机设备可以基于预定队列长度、头节点、 尾节点,创建该访问索引对应的第二初始队列,该第二初始队列的头节点 和尾节点相连接。示例性的,该计算机设备可以创建空队列,并基于队列 属性、头节点、尾节点,对空队列进行初始化处理,得到头节点和尾节点 相连接的环型队列作为该第二初始队列。例如,计算机设备将该空队列的 队列长度配置为指定队列长度,并分配该空队列的内存空间;该计算机设备还可以基于节点的队列位置,配置头节点和尾节点相连接。
在另一个可能示例中,该计算机设备可以基于队列属性变量、尾节点 的左指针,创建该访问索引对应的第三初始队列。示例性的,该计算机设 备可以创建空队列,并基于队列属性变量和尾节点的左指针,对该空队列 进行初始化处理,得到该第三初始队列。例如,该计算机设备可以为该空 队列配置该队列属性变量的初始值,以及配置该尾节点的左指针指向空节 点,右指针指向前一个节点,例如,未添加任一线程的空队列中,尾节点 右指针可以指向头节点或者指向空节点。
需要说明的是,基于步骤2011中初始队列的几种可能示例,该计算 机设备可以采用多种形式的数据结构创建对应初始队列。例如,该计算机 设备可以采用链表的数据结构创建第一初始队列;又如,该计算机设备还 可以采用数组的数据结构创建第二初始队列;又如,该计算机设备还可以 采用双向链表的数据结构创建第三初始队列。
步骤2012、计算机设备将该至少两个访问请求逐个添加至该初始队 列的各个队列位置,得到该访问队列。
计算机设备可以基于初始队列的配置信息,在初始队列中逐个添加每 个访问请求,得到该访问队列。其中,该访问索引对应的索引数据可以为 访问索引对应的待更新索引数据。
基于步骤2011中初始队列的几种可能示例,相应的,步骤2012可以 通过以下三种方式实现。
第一种方式、当该初始队列为第一初始队列时,该计算机设备基于该 两个访问请求对应的线程对该目标锁的至少两次调用结果,逐次将调用成 功的线程对应的访问请求添加至该第一初始队列,得到该第一访问队列。
该目标锁可以锁定对该第一初始队列执行入队操作的线程的唯一性。 该计算机设备可以基于至少一个线程对目标锁的至少两次调用结果,通过 每次调用成功的一个线程执行入队操作,从而将多个线程逐个添加至第一 初始队列。
示例性的,基于步骤201中访问索引的几种可能情况,一个索引键对 应一个队列时,该至少两个访问请求可以为访问该索引键所对应的索引数 据的访问请求;或者,一个数据桶对应一个队列时,至少两个访问请求也 可以为访问数据桶中任一索引键对应的索引数据的访问请求;或者,一个 虚拟键对应一个队列是,该至少两个访问请求还可以为访问虚拟键对应的 索引数据的访问请求。对应于以下情况一、情况二和情况三。
情况一、对应于步骤201的方式一,该至少两个访问请求为待访问该 索引键对应的索引数据的访问请求。
该索引键为访问请求携带的索引键。
需要说明的是,该索引键可以对应一个或多个索引数据;例如,对于key-value形式的缓存数据,key1对应的索引数据可以包括value1、 value2和value3;其中,发生更新事件的是value1和value3;当访问 value1未命中时,该计算机设备创建key1对应的队列,该队列包括至少 一个线程,该至少一个线程可以包括待访问key1对应的value1和value3 的线程。
情况二、对应于步骤201的方式二,该至少两个访问请求为访问该数 据桶中任意索引键对应的索引数据的访问请求。
该数据桶为访问请求携带的索引键所属的数据桶。
例如,数据桶A包括key1和key2;key1对应的索引数据可以包括 value1、value2和value3;key2对应的索引数据可以包括value4;其中, 待更新的是value4、value1和value3;当访问value1未命中时,该计 算机设备创建数据桶A对应的队列,该队列包括包括待访问key1对应的 value1和value3的访问请求以及待访问key2对应的value4的访问请求。
情况三、对应于步骤201的方式三,该至少两个访问请求为访问该虚 拟键对应的索引数据的访问请求。
该虚拟键为访问请求携带的虚拟键。当配置虚拟键时,该虚拟键也可 以对应一个或多个索引数据;情况三为情况一同理,此处不再一一赘述。
需要说明的是,除以上述示出的情况一至情况三之外,在另一可能示 例中,该至少两个访问请求还可以为待访问索引键对应的多个索引数据中 的待更新的高频数据的访问请求,后续建立针对高频索引数据对应的访问 队列。
在一个可能实现方式中,访问请求对应的线程可以同步竞争该目标 锁,以在高并发访问缓存时实现逐个访问请求入队的过程。本步骤可以包 括:该计算机设备通过未加入该第一初始队列的至少一个访问请求对应的 线程,执行对该目标锁的调用操作;响应于任一线程调用成功时,该计算 机设备基于该目标锁锁定的入队操作,将调用成功的任一线程对应的访问 请求添加至该第一初始队列,该计算机设备重复执行对目标锁的调用操作 和该入队操作,直至该至少两个访问请求中每个访问请求被添加至该第一 初始队列,得到该第一访问队列。示例性的,该入队操作是指线程添加至 第一初始队列的操作。该计算机设备可以通过多次重复执行过程,逐次将 每个访问请求添加至第一初始队列。示例性的,该计算机设备可以重复执 行以下步骤a-c,以将多个访问请求逐一入队,该步骤a-c包括:
步骤a:在每次重复执行时,运行当前未加入该第一初始队列的每个 访问请求对应的线程,以执行对第一初始队列的目标锁的调用操作。
计算机设备可以通过操作系统提供的目标锁调用接口,执行对目标锁 的调用操作;例如,以该目标锁可以为互斥锁(mutex)为例进行说明, 通过互斥锁来锁定入队操作,可以保证各个访问请求的入队过程是原子操 作,也即是,保证上一个调用成功的访问请求入队之后,下一个访问请求 才能入队,保证初始队列的每个队列位置仅容一个访问请求入队。
例如,互斥锁对应配置有状态信息,状态信息可以指示互斥锁当前是 否被调用,当状态信息指示该互斥锁为未获取状态时,也即是,当前未被 调用,此时该多个线程可以尝试上锁,也即是,尝试调用该互斥锁。
步骤b:当任一线程调用成功时,停止除该线程以外的其他线程对目 标锁的调用;并锁定当前运行该线程唯一执行入队操作,以将该线程对应 的访问请求添加至第一初始队列。
当任一线程调用成功时,互斥锁的状态信息可以切换为获取状态,此 时,除了该线程以外的其他线程停止调用该互斥锁;也即是,调用成功的 线程获得该互斥锁的所有权,并由该线程执行入队操作,以将该线程对应 的访问请求添加至队列,直至该线程释放该互斥锁;互斥锁的状态信息切 换为未获取状态时,除了该线程以外的其他线程才可继续尝试调用互斥 锁。
示例性的,执行入队操作的过程可以包括:向内存申请初始队列的新 节点对应的存储空间,将该线程对应的访问请求的访问信息存储至该新节 点,并基于该新节点更新队列长度变量以及内存使用变量;其中,访问信 息可以包括:访问请求携带的访问索引、访问请求对应的线程的线程标识; 其中,访问索引可以为索引键或虚拟键,该线程标识可以为线程号。该互 斥锁可以保证执行入队操作的线程的唯一性,也即是,当前仅有一个访问 请求执行入队操作,直至该访问请求入队并释放互斥锁,再锁定该时间片 运行下一个成功调用互斥锁的线程。
步骤c:当该线程执行入队操作结束时,释放目标锁。
当该线程执行入队操作结束时,该线程对应的访问请求入队成功;计 算机设备将目标锁的状态信息切换为未获取状态。
通过创建第一初始队列,基于目标锁锁定队列操作,使得多个访问请 求逐个入队,每个队列位置仅对应入队一个访问请求,上一个访问请求入 队并其对应线程释放目标锁后,下一个访问请求才能入队,保证了入队过 程的有序性,进一步保证所确定的第一访问队列的准确性;并且,该第一 初始队列的大小无限制,可以基于内存空间大小实时申请新节点以入队新 线程,在保证逐个访问请求入队的准确率的前提下,对于海量的高并发请求,也可容纳于第一访问队列,保证了确定第一访问队列的高可用性,进 一步提高数据更新的适用性。
第二种方式、当该初始队列为第二初始队列时,该计算机设备基于该 至少两个访问请求对应的线程对该第二初始队列的当前尾节点的位置的 操作结果,逐个将每个线程对应的访问请求添加至该第二初始队列,得到 第二访问队列。
与第一种方式同理,该至少两个访问请求可以对应有上述第一种方式 中情况一至情况三的三种情况。
该计算机设备可以通过至少两个访问请求对应的线程,对该当前尾节 点执行比较与交换操作,并逐个将操作成功的每个线程对应的访问请求添 加至第二初始队列,得到第二访问队列。在一个可能示例中,该过程可以 包括:该计算机设备通过未加入该第二初始队列的至少一个访问请求对应 的线程,对该当前尾节点的内存地址和预期地址之间的进行比较;该计算 机设备响应于任一线程的比较结果符合第一目标条件时,交换该内存地址 和目标地址;该计算机设备基于该比较并交换操作所确定的队列位置,将 比较结果符合第一目标条件的任一线程对应的访问请求添加至该第二初 始队列,该计算机设备重复执行对当前尾节点的比较并交换操作和操作成 功时加入第二初始队列的操作,直至该至少两个访问请求中每个访问请求 被添加至该第二初始队列或者直至该第二初始队列的当前队列长度达到 预定队列长度,得到该第二访问队列。示例性的,该当前尾节点为队列尾部位置,可存储该第二初始队列截止到当前时刻最后一个入队的访问请 求;例如,该当前尾节点的内存地址用于存储排在尾部的访问请求的访问 信息。
该第一目标条件可以为该内存地址与该预期地址相同。示例性的,该 内存地址即为当前尾节点的实际地址;该预期地址为该当前执行比较并交 换操作时预期的标准值,该标准值可以为执行比较并交换操作结束之前该 内存地址的旧值。该目标值为当前待加入队列的线程对应的队列存储地 址。
例如,对于当前待加入队列的请求H,当该内存地址与预期地址不相 同时,说明实际地址与请求H对应的线程h执行比较并交换操作结束之前 的旧值不同,也即是,当前已有其它请求对应的线程成功执行比较并交换 操作而入队,故该内存地址的实际值已不是线程h执行比较并交换操作结 束之前的旧值。当该内存地址与预期地址相同时,说明该实际地址与线程 h执行比较并交换操作结束之前的旧值相同,也即是当前没有其它请求成 功执行比较并交换操作,故该内存地址的实际地址仍为线程h执行比较并 交换操作结束之前的旧值,因此,可以将内存地址与目标值进行交换,将 待加入队列的请求H添加至更新内存地址后的当前尾节点的位置;例如, 将当前尾节点的内存地址的取值更新为目标值,并将请求H的访问信息对 应存储至更新后的内存地址。其中,该目标值的取值可以为当前尾节点的 内存地址的下一个地址,例如,当前尾节点排在第二初始队列的第13个 节点位置,也即是当前已有13个请求加入队列,则目标值可以为第14个 节点的内存地址。
该计算机设备运行未加入第二初始队列的每个访问请求对应的线程, 以执行对当前尾节点的内存地址、预期地址和目标值之间比较并交换操 作,并将操作成功的线程对应的访问请求添加至第二初始队列。其中,对 于每个访问请求对应的线程,该线程执行比较并交换操作的过程可以包 括:计算机设备运行该线程以将当前尾节点的内存地址和预期地址进行比 较;当该线程的比较结果为内存地址和预期地址相同时,该计算机设备将内存地址与目标值进行交换,该目标值用于指示该线程对应的访问请求在 队列中对应队列存储地址,也即是,新的当前尾节点的内存地址为目标值; 该计算机设备基于该队列存储地址,将该线程对应的访问请求添加至新的 当前尾节点的位置,也即是,将访问信息存储至目标值的内存地址。当该 线程的比较结果为内存地址和预期地址不相同时,说明当前已有线程的比 较结果相同并交换成功,该计算机设备通过该线程重新尝试执行比较并交换操作。当上一个线程基于比较并交换操作成功将对应访问请求入队时, 该计算机设备继续运行剩余未加入第二初始队列的多个访问请求对应的 线程执行比较并交换操作,再次将本次操作成功的线程对应的访问请求入 队;直至每个访问请求被添加至该第二初始队列,或者直至该第二初始队 列的当前队列长度达到预定队列长度,得到第二访问队列。
需要说明的是,该计算机设备可以同时运行多个线程尝试执行比较并 交换操作,当该多个线程中任一线程的比较结果符合第一目标条件时,将 该任一线程对应的访问请求加入第二初始队列;然后该计算机设备通过未 加入第二初始线程的其它多个线程尝试执行比较并交换操作,再次将比较 结果符合第一目标条件的一个线程对应的访问请求入队;直至第二初始队 列被填满或者各个访问请求已入队。当然,当该第二初始队列被填满但仍 有访问请求未入队时,可以暂时先将未入队的访问请求配置为队外等待请 求,当计算机设备执行步骤203以将第二访问队列中各个线程出队后,再 将队外等待请求入队,或者,也可以在计算机设备基于后续步骤202进行 数据更新后,直接执行该队外等待请求对应的访问操作。
通过创建预定队列长度的第二初始队列,基于原子性的比较并交换操 作,也可使得多个访问请求逐个入队,保证入队过程的有序性,以及第二 访问队列的准确性;并且,该第二初始队列的首尾相连接,当有访问请求 入队时仅需基于尾节点的内存地址进行操作即可,操作方便且简单,使得 系统保持在高性能状态下迅速执行第二访问队列的确定过程,提高系统的 资源利用率,进一步提高数据更新的准确性和实用性。
第三种方式、当该初始队列为第三初始队列时,基于该至少两个访问 请求对应的线程对该第三初始队列的当前尾节点的指针的操作结果,逐个 将每个线程对应的访问请求添加至该第三初始队列,得到第三访问队列。
与第一种方式同理,该至少两个访问请求可以对应有上述第一种方式 中情况一至情况三的三种情况。
该计算机设备可以通过该至少两个访问请求对应的线程,对该当前尾 节点的指针地址进行执行比较与交换操作,并逐个将操作成功的每个线程 对应的访问请求添加至第二初始队列,得到第二访问队列。该过程可以包 括:该计算机设备通过未加入该第三初始队列的至少一个访问请求对应的 线程,对该当前尾节点的左指针的指向地址和预期指向地址进行比较;该 计算机设备响应于任一线程的比较结果符合第二目标条件时,交换该指向 地址和目标指向地址;该计算机设备基于该比较并交换操作所确定的目标 指向地址,将比较结果符合第二目标条件的任一线程对应的访问请求添加 至该第三初始队列,该计算机设备重复执行对当前尾节点的比较并交换操 作和操作成功时加入第三初始队列的操作,直至该至少两个访问请求中每 个访问请求被添加至该第三初始队列,得到该第三访问队列。示例性的, 该当前尾节点为队列尾部位置,可存储该第二初始队列截止到当前时刻最 后一个入队的访问请求;该当前尾节点的左指针的指向地址为空地址。该 第三访问队列中,每个节点配置有左指针和右指针;对于头节点和尾节点 以外的中间节点,每个节点的左指针指向排在该节点之后的下一节点,右 指针指向排在该节点之前的上一节点。对于头节点,右指针指向空地址, 左指针指向排在该节点之后的下一节点。对于尾节点,左指针指向空地址, 右指针指向排在该节点之前的上一节点。
该第二目标条件可以为该指向地址与该预期指向地址相同。示例性 的,该左指针的指向地址即为内存中所存储的实际指向地址;该预期指向 地址为该当前执行比较并交换操作时预期的标准值,该标准值可以为执行 比较并交换操作结束之前该指向地址的旧值,即为空地址。该目标指向地 址为当前待加入队列的访问请求对应的队列存储地址,也即是,第三初始 队列的新节点的地址。
例如,对于当前待加入队列的请求K,当该指向地址与预期指向地址 不相同时,说明实际指向地址与请求K对应的线程k执行比较并交换操作 结束之前的旧值不同,当前尾节点的实际指向地址不为空,也即是,当前 已有其它线程成功执行比较并交换操作而入队,故该实际指向地址已不为 空;当指向地址与预期指向地址不相同时,可以重新调整新节点的右指针 指向当前尾节点的地址,并重新定位尾节点,基于重新定位的尾节点,再 次执行比较并交换操作;例如,可以沿重新定位尾节点之前的当前尾节点 的左指针,查找位于该当前尾节点之后的节点作为重新定位的尾节点。当 该指向地址与预期指向地址相同时,也即是当前没有其他线程成功执行比 较并交换操作,故实际指向地址仍为空,因此,可以将指向地址与目标指 向地址进行交换,将请求K添加至目标指向地址,使得将当前尾节点指向 目标指向请求K所在节点,而请求K所在节点为新的尾节点。其中,该目 标指向地址可以为新节点的地址;例如,当前尾节点排在第三初始队列的 第5个节点位置,则目标指向地址可以为新增加的第6个节点的地址。
该计算机设备在该第三初始队列中新建节点,例如,可以向内存空间 申请该新建节点的空间,并将该地址作为目标指向地址;该计算机设备运 行未加入第二初始队列的至少两个访问请求对应的线程,以执行对当前尾 节点的指向地址、预期指向地址和目标指向地址之间比较并交换操作,并 将操作成功的线程添加至第三初始队列。对于每个访问请求对应的线程, 该线程执行比较并交换操作的过程可以包括:计算机设备运行该线程以将当前尾节点的指向地址和预期指向地址进行比较;当该线程的比较结果为 指向地址和预期指向地址相同时,将指向地址与目标指向地址进行交换, 并基于该目标指向地址,将该线程对应的访问请求添加至该新建节点的位 置,该目标指向地址为该线程在队列中对应队列存储地址;此时,新建节 点为新的当前尾节点,旧的当前尾节点的左指针指向该新建节点。当该线 程的比较结果为指向地址和预期指向地址不相同时,说明当前已有线程的比较结果相同并交换成功,该计算机设备通过该线程重新尝试执行该比较 并交换操作。当上一个线程基于比较并交换操作成功将对应访问请求入队 时,该计算机设备继续运行剩余未加入第三初始队列的多个访问请求对应 的线程执行比较并交换操作,再次将本次操作成功的线程对应的访问请求 入队,直至每个访问请求被添加至该第二初始队列,得到第三访问队列。
需要说明的是,与上述第二种方式同理,该计算机设备可以同时运行 多个线程尝试执行比较并交换操作,当任一线程的比较结果符合第二目标 条件时,将该任一线程对应的访问请求加入第二初始队列;然后该计算机 设备再次执行运行未加入第三初始线程的其它多个线程尝试执行比较并 交换操作,并将比较结果符合第二目标条件的一个线程对应的访问请求入 队;直至每个访问请求入队。需要说明的是,该第三访问队列和第一访问队列的队列长度可以实时改变;例如,当有访问请求需要入队时,可以增 加队列长度,以及对应分配新增节点的内存地址。
示例性的,第二种方式和第三种方式中的比较并交换操作,可以为执 行计算机设备的CPU的CAS(compare and swap,比较并交换)指令的操 作,该CAS指令所执行的操作为原子操作,也即是,保证有且仅有一个访 问请求能够入队成功,入队失败的其它访问请求需继续尝试执行该CAS操 作,保证确定访问队列的准确性。
图3为本申请提供的一种确定第三访问队列的流程图,如图3所示, 第三访问队列为双向链表结构,每个节点均有左指针和右指针。队头的头 节点右指针指向空节点;队尾的尾节点的左指针也指向空节点,当需要将 某个访问请求入队时,可以先在当前尾节点之后构建新节点,通过CAS操 作,将当前尾节点的左指针指向新构建的新节点,并更新该新节点的左指 针指向空,也即是,新节点为新的尾节点,当前尾节点为旧尾节点,新的 尾节点的右指针指向旧尾节点。
在一个可能实现方式中,该计算机设备还可以确定出访问队列中头请 求,该过程可以包括:该计算机设备可以将访问队列中位于首位的线程确 定为头请求。示例性的,该计算机设备可以在将访问请求逐个入队时判断 其是否为头请求。该过程可以包括:对于每个访问请求,该计算机设备在 将该访问请求添加至该初始队列时,通过当前添加的访问请求对应的线 程,检测该初始队列除该当前添加的访问请求之外所包括访问请求;该计 算机设备响应于该初始队列除该当前添加的访问请求之外不包括任一访 问请求时,确定该当前添加的访问请求为该头请求;该计算机设备响应于 该初始队列除该当前添加的访问请求之外还包括任一访问请求时,将该当 前添加的访问请求所对应的线程的状态切换为挂起状态。
在一个可能示例中,对于上述第二种方式,该计算机设备可以在将访 问请求添加至初始队列时,基于初始队列的头节点和尾节点所在位置,计 算该初始队列所包括的访问请求;例如,可以将头节点和尾节点之间的队 列位置之差,作为初始队列所包括的请求数目。当该请求数目为目标数目 时,说明该初始队列当前仅包括除当前添加的访问请求,该计算机设备确 定当前添加的线程为头请求;当该请求数目不为目标数目时,说明该初始队列当前已有其它请求,该计算机设备确定当前添加的访问请求对应的线 程为等待线程,将等待线程的状态切换为挂起状态。例如,该目标数目可 以为1,也即是,当头节点和尾节点之差为1,即队列中仅有当前添加的 请求,则当前添加的请求为第一个入队请求,将该请求对应的线程作为 leader(头部)线程。当头节点和尾节点之间的队列位置之差不为1,例如,为2时,该线程为等待线程。对于第一种方式和第三种方式,该计算 机设备可以在将访问请求添加至初始队列时,确定该访问请求所在节点是 否为头节点,当所在节点是头节点时,确定该访问请求为头请求,否则将 该访问请求对应的等待线程的状态切换为挂起状态。例如,对于第一种方 式,当访问请求所在节点的队列位置为首位时,该节点为头节点,否则不 是头节点。例如,对于第三种方式,当线程所在节点的右指针指向空时, 确定该访问请求为头请求,否则将该访问请求对应的等待线程的状态切换 为挂起状态。
通过创建第三初始队列,基于原子性的比较并交换操作,使得多个访 问请求逐个入队,保证入队过程的有序性以及第二访问队列的准确性;并 且,通过基于尾节点的操作,使得最新尾节点的左指针保持指向空节点; 当有访问请求入队时,仅需对尾节点的左指针的CAS操作即可完成一个新 访问请求的入队过程;还可以实时基于入队需求随时创建新节点,操作灵 活度较高且简便,进而保证第三访问队列的确定过程的高灵活度和准确 性。
步骤202、计算机设备基于该访问队列中头请求,对与该访问队列中 各个访问请求相匹配的索引数据进行更新。
该头请求是位于访问队列的头节点的访问请求。访问请求相匹配的索 引数据是指与其对应访问索引的索引数据;例如,各个访问请求待基于访 问索引进行访问的索引数据。该计算机设备可以通过该头请求,基于与访 问队列中各个访问请求相匹配的访问索引,更新缓存数据库中该访问索引 对应的索引数据。示例性的,计算机设备运行该头请求对应的头线程,从 目标资源中拉取该访问索引所对应数据,并执行对索引数据的更新过程。 该目标资源包括该索引数据的目标数据库、目标服务、目标接口和目标实 例中的至少一项。例如,计算机设备从目标数据库中拉取访问索引所对应 数据;或者,计算机设备运行头线程,调用目标服务、目标接口和目标实 例中的至少一项,得到访问索引所对应数据。例如,调用天气服务,获取 当前最新的天气数据,以更新至缓存数据库中。
对应于上述步骤201的方式一至方式三中访问索引与访问队列之间 三种对应关系,相应的,本步骤中对访问索引对应索引数据进行更新的方 式,包括以下两种。
第一种方式、计算机设备通过该头请求对应的头线程,基于该访问队 列中各个访问请求对应的索引键,从目标资源中拉取该索引键对应数据, 将拉取的该索引键对应数据更新为缓存数据库中该索引键对应的索引数 据。
对应于步骤201中方式一,一个索引键对应一个队列时,访问队列中 各个访问请求对应一个索引键;该计算机设备可以运行头线程,执行索引 键对应索引数据的更新过程。示例性的,对于key1对应访问队列,访问 队列中头线程可以从目标数据库中拉取key1所对应value11、value12和 value13,并将缓存数据库中key1所对应的索引数据更新为value11、 value12和value13。
在一个可能示例中,该计算机设备可以基于索引键对应的待更新索引 数据,从目标资源中拉取索引键对应待更新部分数据,并将缓存数据库中 该索引键对应的待更新索引数据更新为拉取的待更新部分数据。示例性 的,对于key1对应访问队列,key1对应索引数据包括value1、value2 和value3,其中value1和value3为待更新索引数据,则头线程可以从 目标数据库中拉取key1所对应value11和value13,并将缓存数据库中 key1所对应的value1和value3更新为value11和value13。
对应于步骤201中方式二,一个数据桶对应一个队列时,访问队列中 各个访问请求可以对应多个索引键;该计算机设备可以运行头线程,执行 数据桶中任一索引键对应索引数据的更新过程。示例性的,该计算机设备 可以运行头线程,遍历访问队列中各个访问请求携带的访问索引,也即是, 索引键。示例性的,对于每个数据桶对应的访问队列,由该访问队列中头 线程执行以下步骤:计算机设备获取访问队列中各个访问请求携带的各个索引键,并基于所获取的各个索引键,从目标资源中拉取各个索引键对应 数据;并在缓存数据库中更新该各个索引键对应的索引数据。
例如,数据桶A包括key1和key2;key1对应value1、value2和value3; key2对应value4;计算机设备检测出数据桶A对应的索引键key1、key2 的线程;从目标资源中拉取key1和key2分别所对应数据。
第二种方式、计算机设备通过该头线程,基于该访问队列中各个访问 请求对应的虚拟键,从目标资源中拉取该虚拟键对应数据,并在缓存数据 库中新增该虚拟键,将拉取的该虚拟键对应数据更新为缓存数据库中该虚 拟键对应的索引数据。
对应于步骤201中方式三,该计算机设备可以运行头线程,执行虚拟 键对应的索引数据的更新过程。当目标资源中不包括虚拟键对应数据时, 也即是计算机设备拉取数据失败时,计算机设备可以从缓存数据库中删除 该虚拟键,并删除该虚拟键对应的访问队列。示例性的,计算机设备可以 返回用于提示访问失败或者无此数据等提示消息。
示例性的,对应于虚拟key3,从目标数据库中拉取虚拟key3对应虚 拟的索引数据value01;并在缓存数据库中保存key3对应value01。
在一个可能实施方式中,访问请求指示对待访问数据的访问操作,该 访问操作可以包括读取操作、写入操作,还可以包括增加、修改、删除操 作等指的操作。因此,在更新缓存数据之前,还可以先执行该指定访问操 作。则基于该头线程执行更新过程之前,该先执行指定访问操作的过程包 括:该计算机设备通过该头请求对应的头线程,执行对该访问队列所包括 线程的查找操作,该查找操作用于查找该访问队列中对索引数据进行指定 访问操作的指定请求;该计算机设备响应于该访问队列包括该指定请求 时,通过该头线程,执行对该索引数据的指定访问操作;其中,该指定请 求包括:用于写入操作的写入请求、用于增加操作的增加请求、用于修改 操作的修改请求和用于删除操作的删除请求中的任一项。在一个可能示例 中,该访问队列包括至少两个指定请求时,该计算机设备可以基于一定的冲突策略,选择性执行或合并执行,则该通过该头线程执行指定访问操作 的步骤可以包括:该计算机设备通过该头线程,对该至少两个指定请求进 行冲突检测;该计算机设备响应于该至少两个指定请求之间不存在冲突 时,通过该头线程,执行该至少两个指定请求的至少两个指定访问操作; 该计算机设备响应于该至少两个指定请求之间存在冲突时,通过该头线 程,执行该至少两个指定请求中符合冲突策略的请求的目标指定操作。一 示例中,当至少两个指定请求之间不存在冲突时,该计算机设备可以合并 该至少两个指定请求的指定访问操作,执行合并后的访问操作。例如,对 于内容均为将当前value值加1的三个写入请求,该计算机设备可以将该 三个写入请求合并,也即是,将三个当前value值加1合并为将当前value 值加3,执行将当前value值加3的操作。另一示例中,该冲突策略可以 包括但不限于:队列位置最靠前的、访问请求的时间戳最早、入队顺序最 晚、配置优先级最高等。当至少两个指定请求之间存在冲突时,可以筛选 符合冲突策略的一个或多个目标指定访问请求来执行。例如,写入请求A 为将value值由当前的0变为1,另一个写入请求B为将value值由当前 的0变为5,两个请求对应的请求之间存在冲突,基于不同策略,可选时 间最早的、入队顺序最晚的、优先级最高等指定访问操作来执行。需要说 明的是,步骤202中基于头线程更新缓存数据过程中,仍可可能有新的访 问请求基于步骤2012入队。每当有新的访问请求入队时,新的访问请求 对应线程切换为挂起状态,以便后续基于步骤203被头线程的唤醒。
通过仅由头请求对应的头线程执行更新过程,使得大量访问请求无需 穿透至后台服务器,保证了系统运行的稳定性和安全性;并且,头请求还 可以基于访问索引的不同,更新访问队列对应的索引键所对应索引数据; 或者头请求也可以基于数据桶,更新访问队列对应的数据桶所包括的各个 索引键对应索引数据;或者头请求还可以基于虚拟键,将后台数据实时新 增或同步至缓存数据库,基于更新需求和场景的多样性,尽可能满足多种场景下的数据更新需求;同时避免了高并发请求时系统崩溃的问题,解决 了高并发时大量请求同时重复更新造成的易更新错误、易产生脏数据等问 题,保证了数据更新过程的可靠性、准确性以及运行过程的稳定性。
步骤203、计算机设备基于该头请求对应的头线程,唤醒该访问队列 中除该头请求之外的至少一个访问请求对应的等待线程。
该计算机设备响应于与各个访问请求相匹配的索引数据更新成功时, 通过该头线程,将该访问队列中至少两个访问请求从该访问队列中逐个移 出,并唤醒从该访问队列移出的访问请求对应的等待线程。例如,该计算 机设备可将各个访问请求从该访问队列逐个移出,并逐个唤醒移出的访问 请求对应的等待线程。示例性的,该计算机设备运行头线程,对访问队列 中多个线程逐个执行出队操作,并将出队的线程逐个唤醒,该出队操作是指将访问队列中线程移出队列的操作。
对应于步骤2012中第一种方式至第三种方式示出的三种创建访问队 列的方式,相应的,步骤203中出队操作对应包括以下三种。
第一种方式、对于第一访问队列,计算机设备通过头线程,调用第一 访问队列的目标锁,将第一访问队列包括的各个访问请求逐个移出队列。
该计算机设备可以基于对目标锁的调用过程,移出访问请求。示例性 的,该计算机设备可以通过头线程执行对目标锁的调用操作,在调用成功 时,基于该目标锁锁定的出队操作,将第一访问队列所包的多个访问请求 移出队列;当该第一访问队列中每个访问请求被移出队列时,第一访问队 列为空队列,该计算机设备可以释放该目标锁。示例性的,该目标锁可以 为互斥锁。该计算机设备可以按照第一访问队列中各个访问请求的排列顺序,调用目标锁并按照该排列顺序逐个对访问请求执行出队操作,以将各 个访问请求按照排列顺序出队。需要说明的是,本步骤中,出队时该计算 机设备可以调用一次目标锁,调用成功时,将访问队列中各个访问请求移 出队列,直至第一访问队列为空队列时,释放目标锁。其中,该计算机设 备通过头线程调用目标锁并执行将各个访问请求出队操作的过程,与步骤 2012的第一种方式中,通过多个线程调用目标锁逐个将对应访问请求入 队的过程同理,此处不再一一赘述。
在一个可能实现方式中,每个请求的访问信息还可以包括访问请求的 状态码,也即是,访问信息包括:访问索引、对应线程的线程标识以及状 态码;该状态码用于指示头线程是否成功更新索引数据;当状态码为已更 新时,表示头线程已成功更新索引数据;当状态码为未更新时,表示头线 程未成功更新索引数据。
在一个可能示例中,对于第一访问队列的每个访问请求,当该计算机 设备通过头线程将该访问请求移出队列时,该计算机设备通过头线程将该 访问请求的访问请求的状态码修改为已更新,并唤醒该访问请求对应的线 程。其中,该计算机设备通过头线程,在访问请求出队时,确定该访问请 求待访问数据是否已更新。例如,可以根据访问请求携带的访问索引,在 该头线程成功更新该访问索引对应索引数据时,将该访问信息中的状态码修改为已更新。
第二种方式、对于第二访问队列,计算机设备通过头线程,基于对该 第二访问队列的当前头节点的位置的操作结果,逐个将每个访问请求移出 队列。
通过头线程,该计算机设备可以对该当前头节点的内存地址和预期地 址之间的进行比较;响应于比较结果符合第三目标条件时,交换该头节点 的内存地址和头节点目标地址;基于该比较并交换操作所确定的头节点队 列位置,将当前头节点的访问请求移出队列,重复执行对当前头节点的比 较并交换操作和操作成功时移出队列的操作,直至该第二访问队列中每个 访问请求移出队列。示例性的,对于CAS操作,该头节点的内存地址为头节点实际存储地址,头节点预期地址可以为执行本次比较并交换操作之前 的标准值,可以为执行本次比较并交换操作之前的旧值。头节点目标地址 为第二访问队列中排在当前头节点之后的第二节点的地址。当实际存储地 址与旧值相同时,该计算机设备确定执行出队操作的线程的唯一性,交换 头节点的内存地址与头节点目标地址,将头节点实际地址更新为第二节点 的地址,按照第二访问队列中各个访问请求排列顺序,将当前位于头节点 的访问请求移出队列;此时第二节点成为新的头节点,依次重复。
在一个可能示例中,与步骤203的第一种方式同理的过程,对于第二 访问队列的每个访问请求,当该计算机设备通过头线程将该访问请求移出 队列时,该计算机设备将该访问请求的状态码修改为已更新,并唤醒该访 问请求对应的等待线程。
需要说明的是,该计算机设备通过头线程执行比较并交换操作并逐个 移出访问请求的过程,与步骤2012的第二种方式中,通过多个线程执行 比较并交换操作并逐个将访问请求入队的过程同理,此处不再一一赘述。
第三种方式、对于第三访问队列,计算机设备通过头线程,基于对该 第三访问队列的队列头指针的操作结果,逐个将每个访问请求移出队列。
该队列头指针为该第三访问队列的属性变量,该队列头指针的取值为 第三访问队列的头节点的内存地址。通过头线程,该计算机设备可以对该 队列头指针的取值和头节点预期地址进行比较;响应于比较结果符合第四 目标条件时,交换该队列头指针的取值和头指针目标值;基于该比较并交 换操作所确定的头指针目标值,将当前头节点的访问请求移出队列,重复 执行对队列头指针的比较并交换操作和操作成功时移出队列的操作,直至该第三访问队列中每个访问请求移出队列。示例性的,该队列头指针的取 值为头节点的地址,也即是头节点的实际内存地址;头节点预期地址可以 为头节点的地址的标准值,也即是头线程执行比较并交换操作之前,该头 节点的内存地址。头指针目标值为排在头节点之后的下一个节点的地址。 当队列头指针的取值与头节点预期地址相同时,说明头节点的实际内存地 址,与头线程执行比较并交换操作之前该头节点的内存地址相同,该计算 机设备交换队列头指针的取值和头指针目标值,按照第三访问队列中各个 访问请求排列顺序,将位于当前头节点的访问请求移出队列,第三访问队 列中排在当前头节点之后的下一个节点成为新的头节点,队列头指针的取 值为该下一个节点的地址。
在一个可能示例中,与步骤203的第一种方式同理的过程,对于第三 访问队列的每个访问请求,当该计算机设备通过头线程将该访问请求移出 队列时,该计算机设备将该访问请求的状态码修改为已更新,并唤醒该访 问请求对应的等待线程。
需要说明的是,该计算机设备通过头线程执行比较并交换操作并逐个 移出访问请求的过程,与步骤2012的第三种方式中,通过多个线程执行 比较并交换操作并逐个将访问请求入队的过程同理,此处不再一一赘述。
在一个可能示例中,该计算机设备还可以配置有最大唤醒数量,该计 算机设备可以运行头线程,逐个唤醒等待线程,当所唤醒的等待线程的数 量达到最大唤醒数量时,计算机设备可以重新选择用于唤醒剩余等待线程 的第一线程,例如,该第一线程可以为头线程唤醒的最后一个等待线程, 该计算机设备可以运行该第一线程唤醒剩余等待线程。例如,线程A唤醒 包括100个线程的队列中的前50个线程,由第50个被唤醒的线程B,唤 醒剩余50个线程。
通过头线程逐个唤醒等待线程,使得等待线程由挂起状态切换为执行 访问操作的状态,在不需要有访问请求穿透后台服务器的前提下,同时也 满足了大量请求的访问需求;并且,针对不同访问队列,基于头请求对应 的头线程执行各个访问请求的对应出队过程,提供了满足于多种场景需求 的多种访问队列的入队和出队过程,在高并发请求时可以基于需要选择适 当方式创建访问队列,并基于访问队列更新数据和访问数据,保证整个更新和访问过程稳定、可靠的运行,提高了数据更新过程的实用性和可靠性。
步骤204、计算机设备基于该访问队列中至少两个访问请求对应的线 程,访问更新后的索引数据。
计算机设备通过被唤醒的等待线程,执行对该更新后的索引数据的访 问操作。该计算机设备可以运行被唤醒的至少一个等待线程,各个等待线 程基于对应访问请求携带的访问索引,对更新后的索引数据执行访问操 作。在一个可能示例中,当等待线程被唤醒时,该计算机设备运行该等待 线程检测对应访问请求的状态码是否为已更新,当为已更新时,继续运行 该等待线程执行对应的访问操作。
在一个可能示例中,该头请求可以通过执行更新过程实现数据访问, 也即是,头请求基于头线程执行数据更新过程,完成该头请求的访问操作, 步骤204中计算机设备可以不再执行头请求的访问操作。当然,计算机设 备也可以在基于头请求实现更新过程后,在步骤204中执行头请求对应的 访问操作。本申请实施例对头请求更新索引数据后是否还执行访问操作不 做具体限定。
图4为本申请提供的一种数据更新的流程图,如图4所示,当业务方 有数据访问需求时,对缓存存储执行查询缓存操作,当待访问的缓存数据 需要更新时,基于访问索引,进入索引键对应的更新队列;如图4所示, 当前有N个队列,分别对应于N个索引键;计算机设备基于当前访问请求 对应的线程,将访问请求添加至对应的队列1,此时队列1已有访问请求, 则将当前添加的访问请求对应的线程切换为挂起状态的等待线程;计算机 设备并利用位于队列1的队头的头节点的头请求,从后端服务或数据库中 拉取数据,基于拉取的数据更新索引数据,实现对缓存数据的更新,并唤 醒队列1包括的等待线程;由唤醒的等待线程直接访问缓存中数据。
本申请实施例提供的数据更新方法,通过在至少两个访问请求触发数 据更新时,先基于访问索引确定访问队列,实现将多个访问请求准确集中 于队列中统一、便捷化的管理;由访问队列中头请求来更新访问队列中各 个访问请求相匹配的索引数据,头请求对应的头线程唤醒除头请求外的其 余访问请求对应的等待线程,使得其余访问请求无需重复执行更新便可直 接访问由头请求更新后的索引数据;从而避免了大量访问请求的重复更新,尤其对于高并发场景,可以避免高并发的海量请求穿透后台设备,避 免海量请求同时重复更新导致的更新错误、产生脏数据、操作系统崩溃等 问题,保证了数据更新过程的准确性,提高了更新过程的可靠性。
并且,还可以基于访问索引确定访问队列,将多个访问请求按照访问 索引精确划分至各个访问队列,且可以包括:一个索引键对应一个访问队 列、也可以是一个数据桶对应一个方位队列、还可以是虚拟键对应一个方 位队列等各种方式,从而可以基于需要灵活选择,提高了后续基于访问队 列进行的数据更新和数据访问的灵活性和准确性,提高了本申请的数据更 新过程的适用性。
并且,提供了三种访问队列,既有基于目标锁锁定队列操作的第一访 问队列,基于目标锁保证了执行队列操作的线程的唯一性,保证第一访问 队列的确定过程的准确性;而且,还提供有预定长度的第二访问队列以及 双向链表结构的第三访问队列,均可通过CAS操作,保证各个访问请求准 确入队,操作灵活且简便,进一步提高了数据更新过程的灵活性和处理效 率。
并且,提供了头请求更新索引数据的多种方式,既可以更新索引键所 对应索引数据,也可更新虚拟键对应的索引数据,满足多样化场景需求, 避免了高并发请求时系统崩溃的问题,解决了高并发时大量线程同时重复 更新造成的易更新错误、易产生脏数据等问题,保证了数据更新过程的可 靠性、准确性以及运行过程的稳定性。
图5为本申请实施例提供的一种数据更新装置的结构示意图。如图5 所示,该装置包括:
队列确定模块501,用于响应于触发数据更新的至少两个访问请求, 基于该至少两个访问请求对应的访问索引,确定包括访问队列,该访问队 列包括至少两个访问请求,任一访问请求用于访问与其对应访问索引的索 引数据;
更新模块502,用于基于该访问队列中的头请求,对与该访问队列中 各个访问请求相匹配的索引数据进行更新,该头请求是指位于该访问队列 的头节点的访问请求;
唤醒模块503,用于基于该头请求对应的头线程,唤醒该访问队列中 除该头请求之外的至少一个访问请求对应的等待线程,该等待线程用于等 待执行对应访问请求的访问操作;
访问模块504,用于基于该访问队列中至少两个访问请求对应的线程, 访问更新后的索引数据。
在一个可能实现方式中,访问索引包括索引键或虚拟键;该队列确定 模块501,还用于以下任一项:
基于该索引键,确定该索引键对应的访问队列,该索引键对应的访问 队列包括待访问该索引键对应的索引数据的至少两个访问请求;
基于该索引键所属的数据桶,确定该数据桶对应的访问队列,该数据 桶对应的访问队列包括待访问该数据桶中任一索引键对应的索引数据的 至少两个访问请求;
基于该虚拟键,确定该虚拟键对应的访问队列,该虚拟键对应的访问 队列包括待访问该虚拟键对应的索引数据的至少两个访问请求,该虚拟键 是指待访问的缓存数据库中不存在的索引键。
在一个可能实现方式中,该队列确定模块501,包括:
创建单元,用于响应于触发数据更新的至少两个访问请求,基于该访 问索引,创建该访问索引所对应的初始队列;
添加单元,用于将该至少两个访问请求逐个添加至该初始队列的各个 队列位置,得到该访问队列。
在一个可能实现方式中,该创建单元,还用于以下任一项:
基于队列属性变量和队列操作的目标锁,创建该访问索引对应的第一 初始队列,该目标锁用于锁定对该第一初始队列执行队列操作的线程的唯 一性,该队列操作包括入队操作和出队操作中至少一项,该队列属性变量 包括队列长度变量和内存使用变量中的至少一项;
基于预定队列长度、头节点、尾节点,创建该访问索引对应的第二初 始队列,该第二初始队列的头节点和尾节点相连接;
基于队列属性变量、尾节点的左指针,创建该访问索引对应的第三初 始队列。
在一个可能实现方式中,该添加单元,还用于以下任一项:
当该初始队列为第一初始队列时,基于该至少两个访问请求对应的线 程对该目标锁的至少两次调用结果,逐次将调用成功的线程对应的访问请 求添加至该第一初始队列,得到该第一访问队列;
当该初始队列为第二初始队列时,基于该至少两个访问请求对应的线 程对该第二初始队列的当前尾节点的位置的操作结果,逐个将每个线程对 应的访问请求添加至该第二初始队列,得到第二访问队列;
当该初始队列为第三初始队列时,基于该至少两个访问请求对应的线 程对该第三初始队列的当前尾节点的指针的操作结果,逐个将每个线程对 应的访问请求添加至该第三初始队列,得到第三访问队列。
在一个可能实现方式中,该添加单元,还用于通过未加入该第一初始 队列的至少一个访问请求对应的线程,执行对该目标锁的调用操作;响应 于任一线程调用成功时,基于该目标锁锁定的入队操作,将调用成功的任 一线程对应的访问请求添加至该第一初始队列,重复执行对目标锁的调用 操作和该入队操作,直至该至少两个访问请求中每个访问请求被添加至该 第一初始队列,得到该第一访问队列。
在一个可能实现方式中,该添加单元,还用于通过未加入该第二初始 队列的至少一个访问请求对应的线程,对该当前尾节点的内存地址和预期 地址之间的进行比较;响应于任一线程的比较结果符合第一目标条件时, 交换该内存地址和目标地址;基于该比较并交换操作所确定的队列位置, 将比较结果符合第一目标条件的任一线程对应的访问请求添加至该第二 初始队列,重复执行对当前尾节点的比较并交换操作和操作成功时加入第二初始队列的操作,直至该至少两个访问请求中每个访问请求被添加至该 第二初始队列或者直至该第二初始队列的当前队列长度达到预定队列长 度,得到该第二访问队列。
在一个可能实现方式中,该添加单元,还用于通过未加入该第三初始 队列的至少一个访问请求对应的线程,对该当前尾节点的左指针的指向地 址和预期指向地址进行比较;响应于任一线程的比较结果符合第二目标条 件时,交换该指向地址和目标指向地址;基于该比较并交换操作所确定的 目标指向地址,将比较结果符合第二目标条件的任一线程对应的访问请求 添加至该第三初始队列,重复执行对当前尾节点的比较并交换操作和操作 成功时加入第三初始队列的操作,直至该至少两个访问请求中每个访问请 求被添加至该第三初始队列,得到该第三访问队列。
在一个可能实现方式中,该装置还包括:
检测模块,用于对于每个访问请求,在将该访问请求添加至该初始队 列时,通过当前添加的访问请求对应的线程,检测该初始队列除该当前添 加的访问请求之外所包括访问请求
头线程确定模块,用于响应于该初始队列除该当前添加的访问请求之 外不包括任一访问请求时,确定该当前添加的访问请求为该头请求;
切换模块,用于响应于该初始队列除该当前添加的访问请求之外还包 括任一访问请求时,将该当前添加的访问请求所对应的线程的状态切换为 挂起状态。
在一个可能实现方式中,更新模块502,还用于以下至少一项:
通过该头请求对应的头线程,基于该访问队列中各个访问请求对应的 索引键,从目标资源中拉取该索引键对应数据,将拉取的该索引键对应数 据更新为缓存数据库中该索引键对应的索引数据;
通过该头线程,基于该访问队列中各个访问请求对应的虚拟键,从目 标资源中拉取该虚拟键对应数据,并在缓存数据库中新增该虚拟键,将拉 取的该虚拟键对应数据更新为缓存数据库中该虚拟键对应的索引数据;
其中,该目标资源包括该索引数据的目标数据库、目标服务、目标接 口和目标实例中的至少一项。
在一个可能实现方式中,该装置还包括:
查找模块,用于通过该头请求对应的头线程,执行对该访问队列所包 括线程的查找操作,该查找操作用于查找该访问队列中对索引数据进行指 定访问操作的指定请求;
指定操作执行模块,用于响应于该访问队列包括该指定请求时,通过 该头线程,执行对该索引数据的指定访问操作;
其中,该指定请求包括:用于写入操作的写入请求、用于增加操作的 增加请求、用于修改操作的修改请求和用于删除操作的删除请求中的任一 项。
在一个可能实现方式中,该指定操作执行模块,还用于通过该头线程, 对该至少两个指定请求进行冲突检测;响应于该至少两个指定请求之间不 存在冲突时,通过该头线程,执行该至少两个指定请求的至少两个指定访 问操作;响应于该至少两个指定请求之间存在冲突时,通过该头线程,执 行该至少两个指定请求中符合冲突策略的请求的目标指定操作。
在一个可能实现方式中,该唤醒模块503,还用于响应于与各个访问 请求相匹配的索引数据更新成功时,通过该头线程,将该访问队列中至少 两个访问请求从该访问队列中逐个移出,并唤醒从该访问队列移出的访问 请求对应的等待线程。
在一个可能实现方式中,该触发数据更新的至少两个访问请求是指: 访问缓存数据库未命中的访问请求或者访问缓存数据库中过期数据的访 问请求。
本申请实施例提供的数据更新装置,通过在至少两个访问请求触发数 据更新时,先基于访问索引确定访问队列,实现将多个访问请求准确集中 于队列中统一、便捷化的管理;由访问队列中头请求来更新访问队列中各 个访问请求相匹配的索引数据,头请求对应的头线程唤醒除头请求外的其 余访问请求对应的等待线程,使得其余访问请求无需重复执行更新便可直 接访问由头请求更新后的索引数据;从而避免了大量访问请求的重复更新,尤其对于高并发场景,可以避免高并发的海量请求穿透后台设备,避 免海量请求同时重复更新导致的更新错误、产生脏数据、操作系统崩溃等 问题,保证了数据更新过程的准确性,提高了更新过程的可靠性。
并且,还可以基于访问索引确定访问队列,将各个访问请求按照访问 索引精确划分至多个访问队列,且可以包括:一个索引键对应一个访问队 列,也可以是一个数据桶对应一个方位队列,还可以是虚拟键对应一个方 位队列等各种方式,从而可以基于需要灵活选择,提高了后续基于访问队 列进行的数据更新和数据访问的灵活性和准确性,提高了本申请的数据更 新过程的适用性。
并且,提供了三种访问队列,既有基于目标锁锁定队列操作的第一访 问队列,基于目标锁保证了执行队列操作的线程的唯一性,保证第一访问 队列的确定过程的准确性;而且,还提供有预定长度的第二访问队列以及 双向链表结构的第三访问队列,均可通过CAS操作,保证各个访问请求准 确入队;操作灵活且简便,进一步提高了数据更新过程的灵活性和处理效 率。
并且,提供了头请求更新索引数据的多种方式,既可以更新索引键所 对应索引数据,也可更新虚拟键对应的索引数据,满足多样化场景需求, 避免了高并发请求时系统崩溃的问题,解决了高并发时大量线程同时重复 更新造成的易更新错误、易产生脏数据等问题,保证了数据更新过程的可 靠性、准确性以及运行过程的稳定性。
本实施例的数据更新装置可执行本申请上述实施例所示的数据更新 方法,其实现原理相类似,此处不再赘述。
图6是本申请实施例中提供了一种计算机设备的结构示意图。如图6 所示,该计算机设备包括:存储器和处理器;至少一个程序,存储于存储 器中,用于被处理器执行时,与现有技术相比可实现:通过在至少两个访 问请求触发数据更新时,先基于访问索引确定访问队列,实现将多个访问 请求准确集中于队列中统一、便捷化的管理;由访问队列中头请求来更新 访问队列中各个访问请求相匹配的索引数据,头请求对应的头线程唤醒除 头请求外的其余访问请求对应的等待线程,使得其余访问请求无需重复执 行更新便可直接访问由头请求更新后的索引数据;从而避免了大量访问请 求的重复更新,尤其对于高并发场景,可以避免高并发的海量请求穿透后 台设备,避免海量请求同时重复更新导致的更新错误、产生脏数据、操作 系统崩溃等问题,保证了数据更新过程的准确性,提高了更新过程的可靠 性。
在一个可选实施例中提供了一种计算机设备,如图6所示,图6所示 的计算机设备600包括:处理器601和存储器603。其中,处理器601和 存储器603相连,如通过总线602相连。可选地,计算机设备600还可以 包括收发器604,收发器604可以用于该计算机设备与其他计算机设备之 间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器604不限于一个,该计算机设备600的结构并不构成对本申 请实施例的限定。
处理器601可以是CPU(Central Processing Unit,中央处理器), 通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC (Application SpecificIntegrated Circuit,专用集成电路),FPGA (Field Programmable Gate Array,现场可编程门阵列)或者其他可编 程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或 执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。 处理器601也可以是实现计算功能的组合,例如包含一个或多个微处理器 组合,DSP和微处理器的组合等。
总线602可包括一通路,在上述组件之间传送信息。总线602可以是 PCI(Peripheral Component Interconnect,外设部件互连标准)总线或 EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构) 总线等。总线602可以分为地址总线、数据总线、控制总线等。为便于表 示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总 线。
存储器603可以是ROM(Read Only Memory,只读存储器)或可存储 静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory, 随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也 可以是EEPROM(Electrically ErasableProgrammable Read Only Memory, 电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory, 只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者 能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够 由计算机存取的任何其他介质,但不限于此。
存储器603用于存储执行本申请方案的应用程序代码(计算机程序), 并由处理器601来控制执行。处理器601用于执行存储器603中存储的应 用程序代码,以实现前述方法实施例所示的内容。
其中,计算机设备包括但不限于:服务器、服务集群或者终端等。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介 质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前 述方法实施例中数据更新方法的相应内容。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程 序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存 储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指 令,处理器执行该计算机指令,使得该计算机设备执行上述的数据更新方 法。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次 显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文 中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他 的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步 骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成, 而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替 地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的 普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进 和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (15)

1.一种数据更新方法,其特征在于,所述方法包括:
响应于触发数据更新的至少两个访问请求,基于所述至少两个访问请求对应的访问索引,确定访问队列,所述访问队列包括至少两个访问请求,任一访问请求用于访问与其对应访问索引的索引数据;
基于所述访问队列中的头请求,对与所述访问队列中各个访问请求相匹配的索引数据进行更新,所述头请求是指位于所述访问队列的头节点的访问请求;
基于所述头请求对应的头线程,唤醒所述访问队列中除所述头请求之外的至少一个访问请求对应的等待线程,所述等待线程用于等待执行对应访问请求的访问操作;
基于所述访问队列中至少两个访问请求对应的线程,访问更新后的索引数据。
2.根据权利要求1所述的数据更新方法,其特征在于,所述访问索引包括索引键或虚拟键;所述基于所述至少两个访问请求对应的访问索引,确定访问队列,包括以下任一项:
基于所述索引键,确定所述索引键对应的访问队列,所述索引键对应的访问队列包括待访问所述索引键对应的索引数据的至少两个访问请求;
基于所述索引键所属的数据桶,确定所述数据桶对应的访问队列,所述数据桶对应的访问队列包括待访问所述数据桶中任一索引键对应的索引数据的至少两个访问请求;
基于所述虚拟键,确定所述虚拟键对应的访问队列,所述虚拟键对应的访问队列包括待访问所述虚拟键对应的索引数据的至少两个访问请求,所述虚拟键是指待访问的缓存数据库中不存在的索引键。
3.根据权利要求1所述的数据更新方法,其特征在于,所述响应于触发数据更新的至少两个访问请求,基于所述至少两个访问请求对应的访问索引,确定访问队列,包括:
响应于触发数据更新的至少两个访问请求,基于所述访问索引,创建所述访问索引所对应的初始队列;
将所述至少两个访问请求逐个添加至所述初始队列的各个队列位置,得到所述访问队列。
4.根据权利要求3所述的数据更新方法,其特征在于,所述响应于触发数据更新的至少两个访问请求,基于所述访问索引,创建所述访问索引所对应的初始队列,包括以下任一项:
基于队列属性变量和队列操作的目标锁,创建所述访问索引对应的第一初始队列,所述目标锁用于锁定对所述第一初始队列执行队列操作的线程的唯一性,所述队列操作包括入队操作和出队操作中至少一项,所述队列属性变量包括队列长度变量和内存使用变量中的至少一项;
基于预定队列长度、头节点、尾节点,创建所述访问索引对应的第二初始队列,所述第二初始队列的头节点和尾节点相连接;
基于队列属性变量、尾节点的左指针,创建所述访问索引对应的第三初始队列。
5.根据权利要求4所述的数据更新方法,其特征在于,所述将所述至少两个访问请求逐个添加至所述初始队列的各个队列位置,得到所述访问队列,包括:
当所述初始队列为第一初始队列时,基于所述至少两个访问请求对应的线程对所述目标锁的至少两次调用结果,逐次将调用成功的线程对应的访问请求添加至所述第一初始队列,得到所述第一访问队列;
当所述初始队列为第二初始队列时,基于所述至少两个访问请求对应的线程对所述第二初始队列的当前尾节点的位置的操作结果,逐个将每个线程对应的访问请求添加至所述第二初始队列,得到第二访问队列;
当所述初始队列为第三初始队列时,基于所述至少两个访问请求对应的线程对所述第三初始队列的当前尾节点的指针的操作结果,逐个将每个线程对应的访问请求添加至所述第三初始队列,得到第三访问队列。
6.根据权利要求5所述的数据更新方法,其特征在于,所述基于所述至少两个访问请求对应的线程对所述目标锁的至少两次调用结果,逐次将调用成功的线程对应的访问请求添加至所述第一初始队列,得到所述第一访问队列,包括:
通过未加入所述第一初始队列的至少一个访问请求对应的线程,执行对所述目标锁的调用操作;
响应于任一线程调用成功时,基于所述目标锁锁定的入队操作,将调用成功的任一线程对应的访问请求添加至所述第一初始队列,重复执行对目标锁的调用操作和所述入队操作,直至所述至少两个访问请求中每个访问请求被添加至所述第一初始队列,得到所述第一访问队列。
7.根据权利要求5所述的数据更新方法,其特征在于,所述基于所述至少两个访问请求对应的线程对所述第二初始队列的当前尾节点的位置的操作结果,逐个将每个线程对应的访问请求添加至所述第二初始队列,得到第二访问队列,包括:
通过未加入所述第二初始队列的至少一个访问请求对应的线程,对所述当前尾节点的内存地址和预期地址之间的进行比较;
响应于任一线程的比较结果符合第一目标条件时,交换所述内存地址和目标地址;
基于所述比较并交换操作所确定的队列位置,将比较结果符合第一目标条件的任一线程对应的访问请求添加至所述第二初始队列,重复执行对当前尾节点的比较并交换操作和操作成功时加入第二初始队列的操作,直至所述至少两个访问请求中每个访问请求被添加至所述第二初始队列或者直至所述第二初始队列的当前队列长度达到预定队列长度,得到所述第二访问队列。
8.根据权利要求5所述的数据更新方法,其特征在于,所述基于所述至少两个访问请求对应的线程对所述第三初始队列的当前尾节点的指针的操作结果,逐个将每个线程对应的访问请求添加至所述第三初始队列,得到第三访问队列,包括:
通过未加入所述第三初始队列的至少一个访问请求对应的线程,对所述当前尾节点的左指针的指向地址和预期指向地址进行比较;
响应于任一线程的比较结果符合第二目标条件时,交换所述指向地址和目标指向地址;
基于所述比较并交换操作所确定的目标指向地址,将比较结果符合第二目标条件的任一线程对应的访问请求添加至所述第三初始队列,重复执行对当前尾节点的比较并交换操作和操作成功时加入第三初始队列的操作,直至所述至少两个访问请求中每个访问请求被添加至所述第三初始队列,得到所述第三访问队列。
9.根据权利要求3所述的数据更新方法,其特征在于,所述方法还包括:
对于每个访问请求,在将所述访问请求添加至所述初始队列时,通过当前添加的访问请求对应的线程,检测所述初始队列除所述当前添加的访问请求之外所包括访问请求;
响应于所述初始队列除所述当前添加的访问请求之外不包括任一访问请求时,确定所述当前添加的访问请求为所述头请求;
响应于所述初始队列除所述当前添加的访问请求之外还包括任一访问请求时,将所述当前添加的访问请求所对应的线程的状态切换为挂起状态。
10.根据权利要求1所述的数据更新方法,其特征在于,所述基于所述访问队列中的头请求,对与所述访问队列中各个访问请求相匹配的索引数据进行更新,包括以下至少一项:
通过所述头请求对应的头线程,基于所述访问队列中各个访问请求对应的索引键,从目标资源中拉取所述索引键对应数据,将拉取的所述索引键对应数据更新为缓存数据库中所述索引键对应的索引数据;
通过所述头线程,基于所述访问队列中各个访问请求对应的虚拟键,从目标资源中拉取所述虚拟键对应数据,并在缓存数据库中新增所述虚拟键,将拉取的所述虚拟键对应数据更新为缓存数据库中所述虚拟键对应的索引数据;
其中,所述目标资源包括所述索引数据的目标数据库、目标服务、目标接口和目标实例中的至少一项。
11.根据权利要求1所述的数据更新方法,其特征在于,所述基于所述访问队列中的头请求,对与所述访问队列中各个访问请求相匹配的索引数据进行更新之前,所述方法还包括:
通过所述头请求对应的头线程,执行对所述访问队列所包括线程的查找操作,所述查找操作用于查找所述访问队列中对索引数据进行指定访问操作的指定请求;
响应于所述访问队列包括所述指定请求时,通过所述头线程,执行对所述索引数据的指定访问操作;
其中,所述指定请求包括:用于写入操作的写入请求、用于增加操作的增加请求、用于修改操作的修改请求和用于删除操作的删除请求中的任一项。
12.一种数据更新装置,其特征在于,所述装置包括:
队列确定模块,用于响应于触发数据更新的至少两个访问请求,基于所述至少两个访问请求对应的访问索引,确定访问队列,所述访问队列包括至少两个访问请求,任一访问请求用于访问与其对应访问索引的索引数据;
更新模块,用于基于所述访问队列中的头请求,对与所述访问队列中各个访问请求相匹配的索引数据进行更新,所述头请求是指位于所述访问队列的头节点的访问请求;
唤醒模块,用于基于所述头请求对应的头线程,唤醒所述访问队列中除所述头请求之外的至少一个访问请求对应的等待线程,所述等待线程用于等待执行对应访问请求的访问操作;
访问模块,用于基于所述访问队列中至少两个访问请求对应的线程,访问更新后的索引数据。
13.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储器;
一个或多个计算机程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据权利要求1至11中任一项所述的数据更新方法。
14.一种计算机可读存储介质,其特征在于,所述计算机存储介质用于存储计算机指令,当所述计算机指令在计算机上运行时,使得计算机可以执行上述权利要求1至11中任一项所述的数据更新方法。
15.一种计算机程序产品,其特征在于,包括计算机程序或指令,所述计算机程序或指令被处理器执行时实现权利要求1至11中任一项所述的数据更新方法。
CN202111012537.6A 2021-08-31 2021-08-31 数据更新方法、装置、计算机设备及存储介质 Pending CN115729929A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111012537.6A CN115729929A (zh) 2021-08-31 2021-08-31 数据更新方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111012537.6A CN115729929A (zh) 2021-08-31 2021-08-31 数据更新方法、装置、计算机设备及存储介质

Publications (1)

Publication Number Publication Date
CN115729929A true CN115729929A (zh) 2023-03-03

Family

ID=85291470

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111012537.6A Pending CN115729929A (zh) 2021-08-31 2021-08-31 数据更新方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN115729929A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116795322A (zh) * 2023-06-21 2023-09-22 广州市玄武无线科技股份有限公司 一种多标签队列实现方法、装置、电子设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116795322A (zh) * 2023-06-21 2023-09-22 广州市玄武无线科技股份有限公司 一种多标签队列实现方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
US10176057B2 (en) Multi-lock caches
US10789217B2 (en) Hierarchical namespace with strong consistency and horizontal scalability
US9164702B1 (en) Single-sided distributed cache system
US9740582B2 (en) System and method of failover recovery
US8161244B2 (en) Multiple cache directories
US9361229B2 (en) Distributed shared caching for clustered file systems
US20170220271A1 (en) Thread groups for pluggable database connection consolidation in numa environment
CN112084258A (zh) 一种数据同步方法和装置
CN110069431B (zh) 基于RDMA和HTM的弹性Key-Value键值对数据存储方法
US11297031B2 (en) Hierarchical namespace service with distributed name resolution caching and synchronization
US9229869B1 (en) Multi-lock caches
US9710510B2 (en) System and method for minimizing lock contention
KR20140038991A (ko) 가장 최근에 사용된 문서 목록들의 자동 동기화
US9442913B2 (en) Using parallel insert sub-ranges to insert into a column store
US10082978B2 (en) Distributed shared log storage system having an adapter for heterogenous big data workloads
CN115729929A (zh) 数据更新方法、装置、计算机设备及存储介质
Matri et al. Týr: blob storage meets built-in transactions
Liu et al. LibreKV: A persistent in-memory key-value store
EP3507699B1 (en) Method and systems for master establishment using service-based statistics
Wu et al. RHKV: An RDMA and HTM friendly key–value store for data-intensive computing
US20210397581A1 (en) Sparse file system implemented with multiple cloud services
US11516290B2 (en) Sharing tuples across independent coordination namespace systems
Shao et al. Trinity Graph Engine and its Applications.
Cai et al. Research on backup and concurrency control technology of embedded database
CN116821058B (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40083455

Country of ref document: HK