CN114676165A - 数据的查询方法、装置、电子设备及计算机可读介质 - Google Patents
数据的查询方法、装置、电子设备及计算机可读介质 Download PDFInfo
- Publication number
- CN114676165A CN114676165A CN202210356531.9A CN202210356531A CN114676165A CN 114676165 A CN114676165 A CN 114676165A CN 202210356531 A CN202210356531 A CN 202210356531A CN 114676165 A CN114676165 A CN 114676165A
- Authority
- CN
- China
- Prior art keywords
- data
- version
- target
- cache
- storage engine
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及一种数据的查询方法、装置、电子设备及计算机可读介质,属于数据存储技术领域。该方法包括:响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取所述目标数据对应的缓存数据版本;从存储引擎中获取所述目标数据对应的辅助索引数据,并根据所述辅助索引数据确定所述缓存数据版本是否为目标版本;若所述缓存数据版本为所述目标版本,则返回所述缓存数据库中的目标数据查询记录;若所述缓存数据版本不是所述目标版本,则返回所述存储引擎中的目标数据查询记录。本公开通过对比缓存数据库与存储引擎中的数据版本,可以保证缓存数据库与存储引擎之间的强一致性,使用户能够高效地查询到最新版本的数据。
Description
技术领域
本公开涉及数据存储技术领域,具体而言,涉及一种数据的查询方法、数据的查询装置、电子设备及计算机可读介质。
背景技术
在网站的一些大型活动中,服务器端在进行开发设计时,很多情况下都需要应对高额的QPS(Queries Per Second,每秒查询率),读请求的频率相对较高。
为了对系统数据库的读请求进行优化,常用的策略是加缓存,然而在引入缓存之后,有可能会面临缓存数据库与系统存储引擎中的数据不一致的问题,从而影响到用户的体验。
鉴于此,本领域亟需一种能够保证缓存数据库与存储引擎之间的强一致性的方法。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种数据的查询方法、数据的查询装置、电子设备及计算机可读介质,进而至少在一定程度上保证缓存数据库与存储引擎之间的强一致性。
根据本公开的第一个方面,提供一种数据的查询方法,包括:
响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取所述目标数据对应的缓存数据版本;
从存储引擎中获取所述目标数据对应的辅助索引数据,并根据所述辅助索引数据确定所述缓存数据版本是否为目标版本;
若所述缓存数据版本为所述目标版本,则返回所述缓存数据库中的目标数据查询记录;
若所述缓存数据版本不是所述目标版本,则返回所述存储引擎中的目标数据查询记录。
在本公开的一种示例性实施例中,所述根据所述辅助索引数据确定所述缓存数据版本是否为目标版本,包括:
根据所述辅助索引数据得到所述目标数据在所述存储引擎中对应的存储数据版本;
在所述缓存数据版本大于或等于所述存储数据版本时,将所述缓存数据版本确定为目标版本。
在本公开的一种示例性实施例中,所述返回所述存储引擎中的目标数据查询记录,包括:
根据所述辅助索引数据得到所述目标数据对应的主键标识,并根据所述主键标识从所述存储引擎中获取所述目标数据的目标数据查询记录;
根据所述存储引擎中获取到的所述目标数据查询记录更新所述缓存数据库,并将所述目标数据查询记录返回至所述客户端。
在本公开的一种示例性实施例中,所述方法还包括:
若所述目标数据在所述存储引擎中对应的存储数据版本为空值,则删除所述缓存数据库中的所述目标数据,并向所述客户端返回空值。
在本公开的一种示例性实施例中,所述根据所述辅助索引数据确定所述缓存数据版本是否为目标版本,包括:
根据所述辅助索引数据查询所述存储引擎中是否存在存储数据版本大于所述缓存数据版本的目标数据;
若所述存储引擎中存在所述存储数据版本大于所述缓存数据版本的目标数据,则从所述存储引擎中获取所述目标数据的目标数据查询记录;
若所述存储引擎中不存在所述存储数据版本大于所述缓存数据版本的目标数据,则将所述缓存数据版本确定为目标版本。
在本公开的一种示例性实施例中,所述根据所述辅助索引数据查询所述存储引擎中是否存在存储数据版本大于所述缓存数据版本的目标数据,包括:
根据所述辅助索引数据查询所述存储引擎中是否存在所述目标数据对应的主键标识;
若查询到所述目标数据对应的主键标识,则所述存储引擎存在所述存储数据版本大于所述缓存数据版本的目标数据;
若未查询到所述目标数据对应的主键标识,则所述存储引擎不存在所述存储数据版本大于所述缓存数据版本的目标数据。
在本公开的一种示例性实施例中,所述返回所述存储引擎中的目标数据查询记录,包括:
根据所述存储引擎中获取到的所述目标数据查询记录更新所述缓存数据库,并将所述目标数据查询记录返回至所述客户端。
根据本公开的第二方面,提供一种数据的查询装置,包括:
缓存版本获取模块,用于响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取所述目标数据对应的缓存数据版本;
目标版本确定模块,用于从存储引擎中获取所述目标数据对应的辅助索引数据,并根据所述辅助索引数据确定所述缓存数据版本是否为目标版本;
缓存数据返回模块,用于若所述缓存数据版本为所述目标版本,则返回所述缓存数据库中的目标数据查询记录;
存储数据返回模块,用于若所述缓存数据版本不是所述目标版本,则返回所述存储引擎中的目标数据查询记录。
在本公开的一种示例性实施例中,所述目标版本确定模块包括:
存储版本确定单元,被配置为执行根据所述辅助索引数据得到所述目标数据在所述存储引擎中对应的存储数据版本;
数据版本对比单元,被配置为执行在所述缓存数据版本大于或等于所述存储数据版本时,将所述缓存数据版本确定为目标版本。
在本公开的一种示例性实施例中,所述存储数据返回模块包括:
主键标识获取单元,被配置为执行根据所述辅助索引数据得到所述目标数据对应的主键标识,并根据所述主键标识从所述存储引擎中获取所述目标数据的目标数据查询记录;
缓存数据库更新单元,被配置为执行根据所述存储引擎中获取到的所述目标数据查询记录更新所述缓存数据库,并将所述目标数据查询记录返回至所述客户端。
在本公开的一种示例性实施例中,所述数据的查询装置还包括:
空值返回模块,被配置为执行若所述目标数据在所述存储引擎中对应的存储数据版本为空值,则删除所述缓存数据库中的所述目标数据,并向所述客户端返回空值。
在本公开的一种示例性实施例中,所述目标版本确定模块包括:
数据版本过滤单元,被配置为执行根据所述辅助索引数据查询所述存储引擎中是否存在存储数据版本大于所述缓存数据版本的目标数据;
目标记录获取单元,被配置为执行若所述存储引擎中存在所述存储数据版本大于所述缓存数据版本的目标数据,则从所述存储引擎中获取所述目标数据的目标数据查询记录;
目标版本确定单元,被配置为执行若所述存储引擎中不存在所述存储数据版本大于所述缓存数据版本的目标数据,则将所述缓存数据版本确定为目标版本。
在本公开的一种示例性实施例中,所述数据版本过滤单元包括:
主键标识查询单元,被配置为执行根据所述辅助索引数据查询所述存储引擎中是否存在所述目标数据对应的主键标识;
数据存在判定单元,被配置为执行若查询到所述目标数据对应的主键标识,则所述存储引擎存在所述存储数据版本大于所述缓存数据版本的目标数据;
数据不存在判定单元,被配置为执行若未查询到所述目标数据对应的主键标识,则所述存储引擎不存在所述存储数据版本大于所述缓存数据版本的目标数据。
在本公开的一种示例性实施例中,所述存储数据返回模块包括:
缓存数据库更新单元,被配置为执行根据所述存储引擎中获取到的所述目标数据查询记录更新所述缓存数据库,并将所述目标数据查询记录返回至所述客户端。
根据本公开的第三方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现上述任意一项所述的数据的查询方法。
根据本公开的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任意一项所述的数据的查询方法。
根据本公开的第五方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的数据的查询方法。
本公开示例性实施例可以具有以下有益效果:
本公开示例实施方式的数据的查询方法中,在客户端发起数据查询请求时,通过获取缓存数据库中的缓存数据版本,并通过辅助索引数据获取存储引擎中的版本信息,判断缓存数据库中的缓存数据版本是否为最新的目标版本,如果缓存数据版本为目标版本,则直接返回缓存数据库中的目标数据查询记录,否则返回存储引擎中的目标数据查询记录。本公开示例实施方式中的数据的查询方法,一方面,通过使用辅助索引数据以及读写性能较高的缓存数据库,能够提高数据查询效率;另一方面,在客户端发起数据查询请求时,通过对比缓存数据库与存储引擎中的数据版本,可以保证用户能够高效地查询到最新版本的数据,并保证缓存数据库与存储引擎之间具有较强的一致性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本公开示例实施方式的数据的查询方法的流程示意图;
图2示出了本公开的一种示例实施方式的确定缓存数据版本是否为目标版本的流程示意图;
图3示出了本公开的一种示例实施方式的返回存储引擎中的目标数据查询记录的流程示意图;
图4示出了根据本公开的一个具体实施方式中数据的查询方法的流程示意图;
图5示出了另一种示例实施方式的确定缓存数据版本是否为目标版本的流程示意图;
图6示出了根据本公开的另一个具体实施方式中数据的查询方法的流程示意图;
图7示出了本公开示例实施方式的数据的查询装置的框图;
图8示出了适于用来实现本公开实施方式的电子设备的计算机系统的结构示意图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
以下示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
在网站的一些大型活动中,服务器端在进行开发设计时,经常需要涉及到数据库的读写操作,一般情况下都需要应对高额的QPS(Queries Per Second,每秒查询率)。在请求量高的情况下,读请求的频率相对较高,而写请求一般在可控范围内,因此需要数据库能承受较高的读QPS,并且需要很强的一致性。
假设在一个业务中,系统数据库面临如下需求:
1、读特点:读较多,如根据userId(用户标识)查询记录,需要5000QPS;
2、写特点:写较少,如100TPS(Transactions Per Second,每秒事务数);
3、实时性:要求读最新数据;
4、数据特点:单条记录数据较大,如50K,总存储量达到500G。
在上述需求下,为了保障用户的体验效果,需要对系统数据库的读请求进行优化。
在一些相关的实施例中,可以通过加缓存的策略来实现需求,然而在引入缓存之后,有可能会面临缓存数据库与系统数据库中的数据不一致的问题,例如,在给用户下发道具卡后,可能会因数据一致性问题而导致用户不能查看到道具卡数量的变化,从而影响到用户的体验。
举例而言,系统数据库为持久化型数据库,如MySQL(Innodb存储引擎),缓存数据库为Redis,Redis的读写性能远高于MySQL。假定MySQL和Redis的QPS能力如下表所示:
可以看出,MySQL的写能力和存储能力达到业务要求,读能力不能满足。Redis的读QPS能很好的满足需求,但存储能力不足。因此可以结合两者的优缺点,使用MySQL持久化数据,使用Redis进行读优化,即同时写入MySQL和Redis(1000TPS),然后从Redis中读数据(10W QPS),并保证持久化(MySQL可存储1T数据)。
然而,将MySQL和Redis结合后虽然能够提高读写性能,但是由于写的时候涉及同时写入MySQL和Redis,可能有小概率会产生一致性问题,具体问题如以下几种情况:
1、如果先更新Redis,后写入MySQL,则潜在问题为,更新Redis成功,写入MySQL失败,Redis与MySQL数据不一致。
2、如果先删除Redis,后写入MySQL,则潜在问题为,写请求A和读请求B并发时,Redis可能存在旧数据。具体的,请求A删除Redis,请求B读Redis不存在,读MySQL,并写入Redis,最后请求A写MySQL。
3、如果先写入MySQL,后更新Redis,则潜在问题为,写入MySQL成功,更新Redis失败,Redis中是旧数据。
4、如果先写入MySQL,后删除Redis,则潜在问题为,写入MySQL成功,删除Redis失败,Redis中是旧数据。
基于上述问题,本示例实施方式首先提供了一种数据的查询方法。参考图1所示,上述数据的查询方法可以包括以下步骤:
步骤S110.响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取目标数据对应的缓存数据版本。
步骤S120.从存储引擎中获取目标数据对应的辅助索引数据,并根据辅助索引数据确定缓存数据版本是否为目标版本。
步骤S130.若缓存数据版本为目标版本,则返回缓存数据库中的目标数据查询记录。
步骤S140.若缓存数据版本不是目标版本,则返回存储引擎中的目标数据查询记录。
本公开示例实施方式的数据的查询方法中,在客户端发起数据查询请求时,通过获取缓存数据库中的缓存数据版本,并通过辅助索引数据获取存储引擎中的版本信息,判断缓存数据库中的缓存数据版本是否为最新的目标版本,如果缓存数据版本为目标版本,则直接返回缓存数据库中的目标数据查询记录,否则返回存储引擎中的目标数据查询记录。本公开示例实施方式中的数据的查询方法,一方面,通过使用辅助索引数据以及读写性能较高的缓存数据库,能够提高数据查询效率;另一方面,在客户端发起数据查询请求时,通过对比缓存数据库与存储引擎中的数据版本,可以保证用户能够高效地查询到最新版本的数据,并保证缓存数据库与存储引擎之间具有较强的一致性。
本示例实施方式中,以MySQL Innodb存储引擎以及Redis缓存数据库为例进行说明,该存储引擎具有以下特点:
1、IO(输入输出)操作:每次从磁盘中按页查询,一页会包含多个索引,索引数量取决于索引涉及字段的大小,因此索引的字段类型越小,单页中可以存储索引越多,产生缺页中断的比例也会降低。
2、索引:先从辅助索引查询,使用辅助索引查询数据的时候,如果能查到所需的所有字段,则直接返回查询结果,否则需要再从主键索引查询出所需数据。
本示例实施方式中涉及到的SQL(Structured Query Language,数据库语言)包括:
1、读记录的SQL:根据用户标识查询用户的记录。
2、读记录的SQL(有版本过滤):查询某个版本之后的记录。
3、读辅助索引数据的SQL(查版本SQL):查询某个用户的最新数据版本。
下面,结合图1、图2和图3对本公开的一种示例实施方式进行详细的说明。
在步骤S110中,响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取目标数据对应的缓存数据版本。
本示例实施方式中,客户端通过向数据库发起数据查询请求,可以获取所需要的目标数据的查询结果。其中,数据库包含缓存数据库和系统存储引擎,存储的数据在一般情况下是保持一致的。缓存数据库可例如Redis,存储引擎可例如MySQL Innodb存储引擎,Redis的读写性能高于MySQL。
本示例实施方式中,数据服务系统在接收到客户端针对目标数据发起的数据查询请求时,首先在缓存数据库Redis中查询缓存数据,获取目标数据对应的缓存数据版本cacheVersion。
在步骤S120中,从存储引擎中获取目标数据对应的辅助索引数据,并根据辅助索引数据确定缓存数据版本是否为目标版本。
MySQL Innodb存储引擎在查询数据时,先从辅助索引查询。因此,本示例实施方式中,可以创建一个索引uniq_idx_user_update_time->uniq_idx_user_version(user_id,version),其中user_id为用户标识,是一种常见的业务索引字段,version为数据版本,user_id和version表示一组联合索引,在联合索引中加入version能够提高查询存储引擎中的数据版本的效率。该索引占用空间极小,因此在按页查询时,一页能包含较多的索引,另外,只需要根据该索引便可直接获得存储引擎中的目标数据的版本信息version,因此查询性能很高,可以承担需求中的QPS。
本示例实施方式中,如图2所示,根据辅助索引数据确定缓存数据版本是否为目标版本,具体可以包括以下几个步骤:
步骤S210.根据辅助索引数据得到目标数据在存储引擎中对应的存储数据版本。
通过读辅助索引数据的SQL查询目标数据在存储引擎中最新的存储数据版本dbVersion。
步骤S220.在缓存数据版本大于或等于存储数据版本时,将缓存数据版本确定为目标版本。
本示例实施方式中,通过比较缓存中的缓存数据版本cacheVersion和MySQL存储引擎中的存储数据版本dbVersion,如果cacheVersion>=dbVersion,则表示缓存数据版本为目标版本,即最新版本。
通过数据版本对比的方式,可以保证用户能够高效地查询到最新版本的数据,并保证缓存数据库与存储引擎之间的强一致性。
本示例实施方式中,如果查询到MySQL存储引擎中的存储数据版本dbVersion为空值,则表示存储引擎中的目标数据不存在或者已被删除,此时无需进行后续步骤,直接删除缓存数据库中的目标数据,并向客户端返回空值。
在步骤S130中,若缓存数据版本为目标版本,则返回缓存数据库中的目标数据查询记录。
本示例实施方式中,若缓存数据库中的缓存数据版本cacheVersion为最新的目标版本,则直接从缓存数据库中返回目标数据对应的目标数据查询结果。
由于需求中的写操作并不多,Redis中的数据并不会有太多的更新,一般来说只有极小概率会出现数据不一致的情况,所以大概率会直接从缓存数据库中返回查询结果,读写性能相对来说较高。因此更多的需求是验证Redis中的数据是否落后于MySQL,并将数据同步至Redis。
在步骤S140中,若缓存数据版本不是目标版本,则返回存储引擎中的目标数据查询记录。
如果缓存数据库中的缓存数据版本cacheVersion不是最新的目标版本,则表示缓存数据库与存储引擎中存在数据不一致的情况,此时需要从存储引擎中返回查询结果。
本示例实施方式中,如图3所示,返回存储引擎中的目标数据查询记录,具体可以包括以下几个步骤:
步骤S310.根据辅助索引数据得到目标数据对应的主键标识,并根据主键标识从存储引擎中获取目标数据的目标数据查询记录。
首先根据辅助索引数据确定目标数据对应的主键ID,然后通过读记录SQL从MySQL存储引擎中查询一次完整的数据记录,得到目标数据的目标数据查询记录。
步骤S320.根据存储引擎中获取到的目标数据查询记录更新缓存数据库,并将目标数据查询记录返回至客户端。
根据存储引擎中查询到的目标数据查询记录同步至缓存数据库Redis中,然后将目标数据查询记录返回至客户端,从而完成数据的查询。如果从存储引擎中返回数据,可以将目标数据查询记录放在扩展参数extra中,该参数占用空间较大,用于从存储引擎中返回读记录的SQL的结果。
通过从存储引擎中获取目标数据的目标数据查询记录,并同步至缓存数据库Redis中,可以在缓存数据库与存储引擎中存在数据不一致的情况下,对缓存数据库中的数据进行及时的更新,同时向用户返回最新版本的数据。
如图4所示是本公开的一个具体实施方式中数据的查询方法的完整流程图,是对本公开的上述示例实施方式的举例说明,该流程图的具体步骤如下:
步骤S401.客户端请求数据。
步骤S402.查询缓存数据,包含缓存数据版本。
从缓存数据库中获取缓存数据版本cacheVersion。
步骤S403.执行查版本SQL。
执行查版本SQL从存储引擎中获取存储数据版本dbVersion。若dbVersion为空,则进入步骤S404,否则进入步骤S406。
步骤S404.清空缓存。
步骤S405.返回空值。
步骤S406.比较版本。
若cacheVersion>=dbVersion,则进入步骤S407,否则进入步骤S408。
步骤S407.返回缓存数据。
步骤S408.执行读记录SQL。
步骤S409.根据MySQL中的数据更新Redis。
步骤S410.返回MySQL中查询到的数据记录。
基于该具体实施方式中的数据的查询方法,每次查询会对Redis执行一次读操作,对MySQL必执行一次性能较高的查版本SQL,对MySQL极小概率执行一次性能较低的读记录SQL,对Redis极小概率执行1次数据回写。因此最差情况下会执行2次DB(MySQL Database,MySQL查询)。
接下来,结合图1和图5对本公开的另一种示例实施方式进行详细的说明。
在步骤S110中,响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取目标数据对应的缓存数据版本。
本示例实施方式中,数据服务系统在接收到客户端针对目标数据发起的数据查询请求时,首先在缓存数据库Redis中查询缓存数据,获取目标数据对应的缓存数据版本cacheVersion。
在步骤S120中,从存储引擎中获取目标数据对应的辅助索引数据,并根据辅助索引数据确定缓存数据版本是否为目标版本。
本示例实施方式中,可以通过版本过滤的方法,在存储引擎中查询cacheVersion之后版本的数据,如图5所示,根据辅助索引数据确定缓存数据版本是否为目标版本,具体可以包括以下几个步骤:
步骤S510.根据辅助索引数据查询存储引擎中是否存在存储数据版本大于缓存数据版本的目标数据。
首先可以根据辅助索引数据查询存储引擎中是否存在目标数据对应的主键标识,若查询到目标数据对应的主键标识,则存储引擎存在存储数据版本大于缓存数据版本的目标数据,若未查询到目标数据对应的主键标识,则存储引擎不存在存储数据版本大于缓存数据版本的目标数据。
根据辅助索引查询是否存在满足条件的主键ID时,只有存在缓存不一致时才会有值,因此,如果查询到目标数据对应的主键ID,则表示缓存数据库与存储引擎中存在数据不一致的情况,存储引擎中的数据版本更新,但是这种情况的出现概率较低。
步骤S520.若存储引擎中存在存储数据版本大于缓存数据版本的目标数据,则从存储引擎中获取目标数据的目标数据查询记录。
如果在存储引擎中查到存储数据版本大于缓存数据版本的目标数据,则说明缓存数据库Redis中的数据已经过期,需要从存储引擎中获取目标数据的目标数据查询记录。
步骤S530.若存储引擎中不存在存储数据版本大于缓存数据版本的目标数据,则将缓存数据版本确定为目标版本。
如果在存储引擎中没有查到存储数据版本大于缓存数据版本的目标数据,则说明当前缓存数据库Redis中就是最新的版本,可以将缓存数据版本确定为目标版本。这种情况的出现概率较高。
通过版本过滤的方式,可以将两次MySQL查询合并为一次,根据MySQL和Redis的一致性,在MySQL和Redis数据一致时性能保持一致,在数据不一致时,减少一次查询版本的SQL,进一步性能查询提升。
在步骤S130中,若缓存数据版本为目标版本,则返回缓存数据库中的目标数据查询记录。
本示例实施方式中,若缓存数据库中的缓存数据版本cacheVersion为最新的目标版本,则直接从缓存数据库中返回目标数据对应的目标数据查询结果。
在步骤S140中,若缓存数据版本不是目标版本,则返回存储引擎中的目标数据查询记录。
如果缓存数据库中的缓存数据版本cacheVersion不是最新的目标版本,则表示缓存数据库与存储引擎中存在数据不一致的情况,此时需要根据存储引擎中获取到的目标数据查询记录更新缓存数据库,并将目标数据查询记录返回至客户端,可以在缓存数据库与存储引擎中存在数据不一致的情况下,对缓存数据库中的数据进行及时的更新,同时向用户返回最新版本的数据。
如图6所示是本公开的另一个具体实施方式中的数据的查询方法的完整流程图,是对本公开的上述示例实施方式的举例说明,该流程图的具体步骤如下:
步骤S601.客户端请求数据。
步骤S602.查询缓存数据,包含缓存数据版本。
从缓存数据库中获取缓存数据版本cacheVersion。
步骤S603.执行读记录的SQL(有版本过滤)。
若MySQL中经过版本过滤的数据为空,则表示Redis为最新版本数据,进入步骤S604,否则进入步骤S605。
步骤S604.返回缓存数据。
步骤S605.根据MySQL中的数据更新Redis。
步骤S606.返回MySQL中查询到的数据记录。
基于该具体实施方式中的数据的查询方法,每次查询会对Redis执行1次读操作,对MySQL执行1次读记录的SQL(有版本过滤),对Redis极小概率执行1次数据回写。相比于图4中的具体实施方式来说,将两次MySQL查询合并为一次,根据MySQL和Redis的一致性,在MySQL和Redis数据一致时性能保持一致,在数据不一致时,减少一次查询版本的SQL,性能进一步提升。
但是图5中的数据的查询方法只适用于MySQL中不存在删除操作的场景,因为在MySQL中查不到数据时,如果同时存在删除操作,则不能区分缓存数据是最新数据,还是MySQL中的数据被删除。
最后,对本公开涉及到的所有类型的数据存储方式的读写过程、优缺点和使用场景进行总结如下,在实际的应用场景中可以根据具体的需求进行选择。
1、MySQL
对于直接使用MySQL存储引擎的数据存储方式,在执行读操作时可直接查询完整数据,执行写操作时可直接插入或更新数据。其优点在于操作简单,数据的一致性高,缺点在于MySQL读数据的能力较差,在读QPS高时有性能瓶颈,不能承受较高的读QPS。因此该方式适用于读写QPS较低的使用场景。
2、MySQL+Redis(无一致性检查)
使用MySQL与Redis相结合且无一致性检查的数据存储方式,在执行读操作时,如果Redis中存在数据,则从Redis中读数据,如果Redis中不存在数据,则从MySQL中读数据,并将数据写入Redis中。在执行写操作时,则同时写入MySQL与Redis。
这种数据存储方式的优点在于,由于Redis的读性能远高于MySQL,因此该方式突破了MySQL的读QPS瓶颈,且方案简单;缺点在于缺乏一致性纠正的过程,可能会出现数据的一致性问题。因此该方式适用于读QPS很高,写QPS较低,且不需要较强的数据一致性的情形。
3、MySQL+Redis(有一致性检查的具体实施方式1)
对于具体实施方式1中使用MySQL与Redis相结合且有一致性检查的数据存储方式,在执行读操作时,首先查询Redis中的数据版本,并在辅助索引中查询MySQL中的数据版本,如果MySQL与Redis中的数据版本一致,则直接从Redis读数据,如果数据版本不一致,则从MySQL中读取完整数据,并进行Redis数据回写。在执行写操作时,则同时写入MySQL与Redis。
这种数据存储方式的优点在于,由于Redis的读性能远高于MySQL,并且在读数据时通过数据版本对MySQL与Redis进行了数据的一致性检查,因此该方式不仅突破了MySQL的读QPS瓶颈,而且能够保证数据的一致性。缺点在于每次查询都需要对MySQL执行读版本操作,且数据不一致时需要进行两次的MySQL操作。因此该方式适用于读QPS很高,写QPS较低,且需要较强的数据一致性的情形,且相较于具体实施方式2,适用于数据库中有删除操作的场景。
4、MySQL+Redis(有一致性检查的具体实施方式2)
对于具体实施方式2中使用MySQL与Redis相结合且有一致性检查的数据存储方式,在执行读操作时,首先查询Redis中的数据版本,然后查询MySQL中是否存在高于Redis版本的完整数据,如果存在,则从MySQL中读取完整数据,并进行Redis数据回写。在执行写操作时,则同时写入MySQL与Redis。
这种数据存储方式的优点在于,也能够突破MySQL的读QPS瓶颈,而且能够保证数据的一致性,在数据不一致时只需要进行一次MySQL读操作即可。缺点在于每次查询都需要对MySQL执行读版本操作,且不适用于数据库中有删除操作的的场景。因此该方式适用于读QPS很高,写QPS较低,需要较强的数据一致性的情形,且MySQL中不存在删除操作。
应当注意,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
进一步的,本公开还提供了一种数据的查询装置。参考图7所示,该数据的查询装置可以包括缓存版本获取模块710、目标版本确定模块720、缓存数据返回模块730以及存储数据返回模块740。其中:
缓存版本获取模块710被配置为响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取目标数据对应的缓存数据版本;
目标版本确定模块720被配置为从存储引擎中获取目标数据对应的辅助索引数据,并根据辅助索引数据确定缓存数据版本是否为目标版本;
缓存数据返回模块730被配置为若缓存数据版本为目标版本,则返回缓存数据库中的目标数据查询记录;
存储数据返回模块740被配置为若缓存数据版本不是目标版本,则返回存储引擎中的目标数据查询记录。
在本公开的一些示例性实施例中,目标版本确定模块720可以包括存储版本确定单元以及数据版本对比单元。其中:
存储版本确定单元被配置为根据辅助索引数据得到目标数据在存储引擎中对应的存储数据版本;
数据版本对比单元被配置为在缓存数据版本大于或等于存储数据版本时,将缓存数据版本确定为目标版本。
在本公开的一些示例性实施例中,存储数据返回模块740可以包括主键标识获取单元以及缓存数据库更新单元。其中:
主键标识获取单元被配置为根据辅助索引数据得到目标数据对应的主键标识,并根据主键标识从存储引擎中获取目标数据的目标数据查询记录;
缓存数据库更新单元被配置为根据存储引擎中获取到的目标数据查询记录更新缓存数据库,并将目标数据查询记录返回至客户端。
在本公开的一些示例性实施例中,本公开提供的一种数据的查询装置还可以包括空值返回模块,被配置为若目标数据在存储引擎中对应的存储数据版本为空值,则删除缓存数据库中的目标数据,并向客户端返回空值。
在本公开的一些示例性实施例中,目标版本确定模块720可以包括数据版本过滤单元、目标记录获取单元以及目标版本确定单元。其中:
数据版本过滤单元被配置为根据辅助索引数据查询存储引擎中是否存在存储数据版本大于缓存数据版本的目标数据;
目标记录获取单元被配置为若存储引擎中存在存储数据版本大于缓存数据版本的目标数据,则从存储引擎中获取目标数据的目标数据查询记录;
目标版本确定单元被配置为若存储引擎中不存在存储数据版本大于缓存数据版本的目标数据,则将缓存数据版本确定为目标版本。
在本公开的一些示例性实施例中,数据版本过滤单元可以包括主键标识查询单元、数据存在判定单元以及数据不存在判定单元。其中:
主键标识查询单元被配置为根据辅助索引数据查询存储引擎中是否存在目标数据对应的主键标识;
数据存在判定单元被配置为若查询到目标数据对应的主键标识,则存储引擎存在存储数据版本大于缓存数据版本的目标数据;
数据不存在判定单元被配置为若未查询到目标数据对应的主键标识,则存储引擎不存在存储数据版本大于缓存数据版本的目标数据。
在本公开的一些示例性实施例中,存储数据返回模块740可以包括缓存数据库更新单元,被配置为根据存储引擎中获取到的目标数据查询记录更新缓存数据库,并将目标数据查询记录返回至客户端。
上述数据的查询装置中各模块/单元的具体细节在相应的方法实施例部分已有详细的说明,此处不再赘述。
图8示出了适于用来实现本发明实施例的电子设备的计算机系统的结构示意图。
需要说明的是,图8示出的电子设备的计算机系统800仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统操作所需的各种程序和数据。CPU801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明的实施例,下文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现如上述实施例中所述的方法。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种数据的查询方法,其特征在于,包括:
响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取所述目标数据对应的缓存数据版本;
从存储引擎中获取所述目标数据对应的辅助索引数据,并根据所述辅助索引数据确定所述缓存数据版本是否为目标版本;
若所述缓存数据版本为所述目标版本,则返回所述缓存数据库中的目标数据查询记录;
若所述缓存数据版本不是所述目标版本,则返回所述存储引擎中的目标数据查询记录。
2.根据权利要求1所述的数据的查询方法,其特征在于,所述根据所述辅助索引数据确定所述缓存数据版本是否为目标版本,包括:
根据所述辅助索引数据得到所述目标数据在所述存储引擎中对应的存储数据版本;
在所述缓存数据版本大于或等于所述存储数据版本时,将所述缓存数据版本确定为目标版本。
3.根据权利要求2所述的数据的查询方法,其特征在于,所述返回所述存储引擎中的目标数据查询记录,包括:
根据所述辅助索引数据得到所述目标数据对应的主键标识,并根据所述主键标识从所述存储引擎中获取所述目标数据的目标数据查询记录;
根据所述存储引擎中获取到的所述目标数据查询记录更新所述缓存数据库,并将所述目标数据查询记录返回至所述客户端。
4.根据权利要求1所述的数据的查询方法,其特征在于,所述根据所述辅助索引数据确定所述缓存数据版本是否为目标版本,包括:
根据所述辅助索引数据查询所述存储引擎中是否存在存储数据版本大于所述缓存数据版本的目标数据;
若所述存储引擎中存在所述存储数据版本大于所述缓存数据版本的目标数据,则从所述存储引擎中获取所述目标数据的目标数据查询记录;
若所述存储引擎中不存在所述存储数据版本大于所述缓存数据版本的目标数据,则将所述缓存数据版本确定为目标版本。
5.根据权利要求4所述的数据的查询方法,其特征在于,所述根据所述辅助索引数据查询所述存储引擎中是否存在存储数据版本大于所述缓存数据版本的目标数据,包括:
根据所述辅助索引数据查询所述存储引擎中是否存在所述目标数据对应的主键标识;
若查询到所述目标数据对应的主键标识,则所述存储引擎存在所述存储数据版本大于所述缓存数据版本的目标数据;
若未查询到所述目标数据对应的主键标识,则所述存储引擎不存在所述存储数据版本大于所述缓存数据版本的目标数据。
6.根据权利要求4所述的数据的查询方法,其特征在于,所述返回所述存储引擎中的目标数据查询记录,包括:
根据所述存储引擎中获取到的所述目标数据查询记录更新所述缓存数据库,并将所述目标数据查询记录返回至所述客户端。
7.一种数据的查询装置,其特征在于,包括:
缓存版本获取模块,用于响应于客户端针对目标数据发起的数据查询请求,从缓存数据库获取所述目标数据对应的缓存数据版本;
目标版本确定模块,用于从存储引擎中获取所述目标数据对应的辅助索引数据,并根据所述辅助索引数据确定所述缓存数据版本是否为目标版本;
缓存数据返回模块,用于若所述缓存数据版本为所述目标版本,则返回所述缓存数据库中的目标数据查询记录;
存储数据返回模块,用于若所述缓存数据版本不是所述目标版本,则返回所述存储引擎中的目标数据查询记录。
8.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至7中任一项所述的数据的查询方法。
9.一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至7中任一项所述的数据的查询方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的数据的查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210356531.9A CN114676165A (zh) | 2022-03-30 | 2022-03-30 | 数据的查询方法、装置、电子设备及计算机可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210356531.9A CN114676165A (zh) | 2022-03-30 | 2022-03-30 | 数据的查询方法、装置、电子设备及计算机可读介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114676165A true CN114676165A (zh) | 2022-06-28 |
Family
ID=82077410
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210356531.9A Pending CN114676165A (zh) | 2022-03-30 | 2022-03-30 | 数据的查询方法、装置、电子设备及计算机可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114676165A (zh) |
-
2022
- 2022-03-30 CN CN202210356531.9A patent/CN114676165A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107577678B (zh) | 处理数据库事务的方法、客户端和服务器 | |
US8195702B2 (en) | Online index builds and rebuilds without blocking locks | |
US8122008B2 (en) | Joining tables in multiple heterogeneous distributed databases | |
US20160019228A1 (en) | Snapshot-consistent, in-memory graph instances in a multi-user database | |
JP4340226B2 (ja) | データ項目の使用可能バージョンの提供 | |
US20120191679A1 (en) | Database server apparatus, method for updating database, and recording medium for database update program | |
CN108108486B (zh) | 一种数据表查询方法、装置、终端设备及存储介质 | |
CN111522631A (zh) | 分布式事务处理方法、装置、服务器及介质 | |
CN111090663A (zh) | 事务并发控制方法、装置、终端设备及介质 | |
CN111475519B (zh) | 数据缓存方法及装置 | |
US9811560B2 (en) | Version control based on a dual-range validity model | |
CN104423982A (zh) | 请求的处理方法和处理设备 | |
CN112579695A (zh) | 一种数据同步方法和装置 | |
CN115729912A (zh) | 数据库访问系统、方法、计算机设备和存储介质 | |
CN112948409A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
US8285742B2 (en) | Management of attribute information related to system resources | |
CN109871338B (zh) | 一种数据存储方法、装置及计算机设备 | |
CN114741335A (zh) | 缓存管理方法、装置、介质及设备 | |
CN114416798A (zh) | 基于数据依赖关系和一致性保证的缓存管理方法及装置 | |
WO2020192663A1 (zh) | 一种数据管理方法及相关设备 | |
WO2021147773A1 (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
US20110093688A1 (en) | Configuration management apparatus, configuration management program, and configuration management method | |
CN111176705A (zh) | 特征库的升级方法及装置 | |
CN114676165A (zh) | 数据的查询方法、装置、电子设备及计算机可读介质 | |
CN109710629A (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 |