CN109871338B - 一种数据存储方法、装置及计算机设备 - Google Patents
一种数据存储方法、装置及计算机设备 Download PDFInfo
- Publication number
- CN109871338B CN109871338B CN201910199823.4A CN201910199823A CN109871338B CN 109871338 B CN109871338 B CN 109871338B CN 201910199823 A CN201910199823 A CN 201910199823A CN 109871338 B CN109871338 B CN 109871338B
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- tables
- sql
- caches
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据存储方法、装置及计算机设备,所述方法包括:在每个cache下对应的多个sqlID,在每个sqlID对应的一个或多个第一表,将不同cache下具有相同表名的多个第一表和具有不同sqlID的内容合并,得到一个或多个合并后的第二表,其中,每个所述第二表包含多个cache所对应的多个sqlID,每个所述第二表对应多个表名相同的第一表,任意两个所述第二表之间没有同名的第一表;解析当前操作的sql指令对应的sqlID、以及该指令对应的cache;判断当前操作的sqlID以及cache所在的合并后的第二表是否一致,若一致根据所述当前操作的sql操作,对第二表中涉及的多个cache的数据进行删除或重新从数据库中调取数据,写入缓存。
Description
技术领域
本发明涉及数据存储技术领域,尤其是涉及一种数据存储方法、装置及计算机设备。
背景技术
mybatis是一种流行的java持久层框架,主要用来简化传统jdbc方式对数据库的操作。以数据为中心建立POJO与SQL之间的映射关系,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。iBATIS是一种“Sql Mapping”的ORM实现。
二级缓存mybatis在使用中要求在整个系统中只有单表操作,并且和该表相关的全部操作必须在一个namespace下。执行写入操作时,将含有客户信息的数据写入cache1的客户数据表;如果有更新操作时,将含有客户信息的数据在cache2的客户数据表中更新数据;由于在cache2的客户数据表中更新了数据,在更新操作之后,会清空cache2的客户数据表的数据内容。在二级缓存内读取客户信息数据时,由于cache1中存储有客户数据表,系统不访问数据库的数据,直接从cache1中客户数据表读取数据,而在cache2中客户数据已经做了修改并清除,此时读取的cache1中客户数据不是最新的数据,从而导致数据读取错误。
发明内容
针对现有技术存在的缺陷,第一方面,本发明提供了一种数据存储方法,用于实现对数据的二级缓存,包括:
在每个cache下对应的多个sqlID,在每个sqlID对应的一个或多个第一表,将不同cache下具有相同表名的多个第一表和具有不同sqlID的内容合并,得到一个或多个合并后的第二表,其中,每个所述第二表包含多个cache所对应的多个sqlID,每个所述第二表对应多个表名相同的第一表,任意两个所述第二表之间没有同名的第一表;
解析当前操作的sql指令对应的sqlID、以及该指令对应的cache;
判断当前操作的sqlID以及cache所在的合并后的第二表是否一致,若一致根据所述当前操作的sql操作,对第二表中涉及的多个cache的数据进行删除或重新从数据库中调取数据,写入缓存。
本发明的有益效果是:
本发明是更加细粒度分析缓存中数据和缓存表之间的相互关系。通过设置合理的数据结构来表达这种关系。针对更新操作时能更加细粒度删除数据,而不是将整个缓存数据都删除,同时一并解决了不同mapper之间缓存无联系这种缺陷导致在使用缓存具有很大局限性。
进一步,所述当前操作的sql操作包括以下至少之一:查询操作、更新操作、提交操作、回滚操作。
进一步,当所述当前操作的sql操作为查询操作时,执行所述查询操作包括:
先从cache中判断是否存在需要查询的数据,如果存在则直接返回;
如果不存在则获取该查询操作涉及到的第一表,将查询结果放入缓存队列。
进一步,当所述当前操作的sql操作为更新操作时,执行所述更新操作包括:
根据所述映射关系,获取所述更新操作对应的第一表的表名;
通过获取到的表名查询得到相对应的缓存键的键值;
清空查询到的所有缓存键的键值。
进一步,当所述当前操作的sql操作为提交操作时,执行所述提交操作包括:
根据所述映射关系,将当前缓存队列中的数据写入缓存。
进一步,当所述当前操作的sql操作为回滚操作时,执行所述回滚操作包括:清空当前缓存队列。
第二方面,本发明提供了一种数据存储装置,设置于数据系统,用于实现对数据的二级缓存,包括:
合并模块,用于在每个cache下对应的多个sqlID,在每个sqlID对应的一个或多个第一表,将不同cache下具有相同表名的多个第一表和具有不同sqlID的内容合并,得到一个或多个合并后的第二表,其中,每个所述第二表包含多个cache所对应的多个sqlID,每个所述第二表对应多个表名相同的第一表,任意两个所述第二表之间没有同名的第一表;
解析模块,用于解析当前操作的sql指令对应的sqlID、以及该指令对应的cache;
判断模块,用于判断当前操作的sqlID以及cache所在的合并后的第二表是否一致,若一致根据所述当前操作的sql操作,对第二表中涉及的多个cache的数据进行删除或重新从数据库中调取数据,写入缓存。
进一步,所述当前操作的sql操作包括以下至少之一:查询操作、更新操作、提交操作、回滚操作。
第三方面,本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
与现有技术相比。本申请提案的技术优点有:
1、更加细粒度控制cache中的数据清除,从全部清除到精确控制某条数据的删除,以提高在缓存中查询到数据的概率。
2、解决了不同mapper对应的缓存实例之前无联系,导致想要使用二级缓存必须使用同一缓存表并且只能在同一个mapper下实现的技术问题。通过改进后,不在有这种限制,灵活性大大增强。
附图说明
图1为本发明的一种数据存储方法的流程示意图;
图2为本发明的实施例1的第一表合并生成第二表的示意图;
图3为本发明的实施例2的第一表合并生成第二表的示意图;
图4为本发明的一种数据存储装置的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定装备结构、接口、技术之类的具体细节,以便透彻理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
如图1所示,本发明提供了一种数据存储方法,用于实现对数据的二级缓存,包括:
S1:在每个cache下对应的多个sqlID,在每个sqlID对应的一个或多个第一表,将不同cache下具有相同表名的多个第一表和具有不同sqlID的内容合并,得到一个或多个合并后的第二表,其中,每个所述第二表包含多个cache所对应的多个sqlID,每个所述第二表对应多个表名相同的第一表,任意两个所述第二表之间没有同名的第一表;
S2:解析当前操作的sql指令对应的sqlID、以及该指令对应的cache;
S3:判断当前操作的sqlID以及cache所在的合并后的第二表是否一致,若一致根据所述当前操作的sql操作,对第二表中涉及的多个cache的数据进行删除或重新从数据库中调取数据,写入缓存。
实施例1:
所述S1中将每个cache下对应的多个sqlID、每个sqlID对应的多个第一表,将每个表中具有相同cache、和相同sqlID的内容合并,得到多个合并后的第二表的过程如图2所示,每一个mapper与一个cache一一对应,同一个mapper下具有多个saqID,一个sqlID下具有一个或多个第一表。
图2中query1、query2、query3分别对应一个sqlID,对应的key1、key2、key3分别是每个sqlID在一个cache下缓存数据的标识。
图2中mappernamespace1下的t1、t2、t3为第一表,其中第一键值key1-vlaue涉及t1和t2两张第一表,第二键值key2-value涉及到t1一张第一表,第三键值key3-value涉及到t3一张第一表,最后生成数据结构,见图2中“查询缓存cachekey和缓存表对应关系1”。namespace1 mapper中包括了query1,query2,query3三个查询方法,query1的查询结果缓存到为第一键值key1-value,query2,query3依次类推。
图2中mappernamespace2下的t1、t5、t6为第一表,其中第一键值key1-vlaue涉及t1和t5两张第一表,第二键值key2-value涉及到t1一张第一表,第三键值key3-value涉及到t6一张第一表,最后生成数据结构,见图2中“查询缓存cachekey和缓存表对应关系2”。
将上述“查询缓存cachekey和缓存表对应关系1”和“查询缓存cachekey和缓存表对应关系2”的内容合并得到第二表:
t1:[(cache1,key1,key2),(cache2,key1,key2)]。
实施例2:
图3中mappernamespace3下的t2、t3、t4为第一表,其中第一键值key1-vlaue涉及t2和t4两张第一表,第二键值key2-value涉及到t4一张第一表,第三键值key3-value涉及到t3一张第一表,最后生成数据结构,见图3中“查询缓存cachekey和缓存表对应关系3”。
图3中mappernamespace4下的t4、t5、t6为第一表,其中第一键值key1-vlaue涉及t4和t5两张第一表,第二键值key2-value涉及到t4一张第一表,第三键值key3-value涉及到t6一张第一表,最后生成数据结构,见图3中“查询缓存cachekey和缓存表对应关系4”。
将上述“查询缓存cachekey和缓存表对应关系3”和“查询缓存cachekey和缓存表对应关系4”的内容合并得到第二表:
t4:[(cache3,key1,key2),(cache4,key1,key2)]。
结合实施例1和实施例2不难发现,每个所述第二表对应多个表名相同的第一表,任意两个所述第二表之间没有同名的第一表。
为了提高查询效率,用户还是希望能用二级缓存,因此,想到了本申请的技术方案,核心点就是,做一个全局配置,把mapper(namespace)、缓存键、缓存表三者之间的关系在初始化的时候存起来。在出现更新update等操作的时候,只删除对应sqlid相关的namespace在二级缓存里面的缓存数据,而不是像以前全部删除整个namespace的缓存数据。这样保障了后续的查询(若没有查询到二级缓存的数据,就去数据库把数据查询到,然后缓存到二级缓存里面)能够查询到最准确的数据。
在一些说明性实施例中,所述当前操作的sql操作包括以下至少之一:查询操作、更新操作、提交操作、回滚操作。
在一些说明性实施例中,当所述当前操作的sql操作为查询操作时,执行所述查询操作包括:
先从cache中判断是否存在需要查询的数据,如果存在则直接返回;
如果不存在则获取该查询操作涉及到的第一表,将查询结果放入缓存队列。
在一些说明性实施例中,当所述当前操作的sql操作为更新操作时,执行所述更新操作包括:
根据所述映射关系,获取所述更新操作对应的第一表的表名;
通过获取到的表名查询得到相对应的缓存键的键值;
清空查询到的所有缓存键的键值。
在一些说明性实施例中,当所述当前操作的sql操作为提交操作时,执行所述提交操作包括:
根据所述映射关系,将当前缓存队列中的数据写入缓存。
在一些说明性实施例中,当所述当前操作的sql操作为回滚操作时,执行所述回滚操作包括:清空当前缓存队列。
如图4所示,本发明还提供了一种数据存储装置,设置于数据系统,用于实现对数据的二级缓存,包括:
合并模块100,用于在每个cache下对应的多个sqlID,在每个sqlID对应的一个或多个第一表,将不同cache下具有相同表名的多个第一表和具有不同sqlID的内容合并,得到一个或多个合并后的第二表,其中,每个所述第二表包含一个cache所对应的多个sqlID,每个所述第二表对应多个表名相同的第一表,任意两个所述第二表之间没有同名的第一表;
解析模块200,用于解析当前操作的sql指令对应的sqlID、以及该指令对应的cache;
判断模块300,用于判断当前操作的sqlID以及cache所在的合并后的第二表是否一致,若一致根据所述当前操作的sql操作,对第二表中涉及的多个cache的数据进行删除或重新从数据库中调取数据,写入缓存。
在一些说明性实施例中,所述当前操作的sql操作包括以下至少之一:查询操作、更新操作、提交操作、回滚操作。
本发明还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对所述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,所述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对所述实施例进行变化、修改、替换和变型。
Claims (9)
1.一种数据存储方法,用于实现对数据的二级缓存,其特征在于,包括:
在每个cache下对应的多个sqlID,在每个sqlID对应的一个或多个第一表,将不同cache下具有相同表名的多个第一表和具有相同sqlID的内容合并,得到一个或多个合并后的第二表,其中,每个所述第二表包含多个cache所对应的多个sqlID,每个所述第二表对应多个表名相同的第一表,任意两个所述第二表之间没有同名的第一表;
解析当前操作的sql指令对应的sqlID、以及该指令对应的cache;
判断当前操作的sqlID以及cache所在的合并后的第二表,根据所述当前操作的sql操作,对第二表中涉及的多个cache的数据进行删除或重新从数据库中调取数据,写入缓存。
2.根据权利要求1所述的数据存储方法,其特征在于,所述当前操作的sql操作包括以下至少之一:查询操作、更新操作、提交操作、回滚操作。
3.根据权利要求2所述的数据存储方法,其特征在于,当所述当前操作的sql操作为查询操作时,执行所述查询操作包括:
先从cache中判断是否存在需要查询的数据,如果存在则直接返回;
如果不存在则获取该查询操作涉及到的第一表,将查询结果放入缓存队列。
4.根据权利要求2所述的数据存储方法,其特征在于,当所述当前操作的sql操作为更新操作时,执行所述更新操作包括:
根据映射关系,获取所述更新操作对应的第一表的表名;
通过获取到的表名查询得到相对应的缓存键的键值;
清空查询到的所有缓存键的键值。
5.根据权利要求2所述的数据存储方法,其特征在于,当所述当前操作的sql操作为提交操作时,执行所述提交操作包括:
根据映射关系,将当前缓存队列中的数据写入缓存。
6.根据权利要求2所述的数据存储方法,其特征在于,当所述当前操作的sql操作为回滚操作时,执行所述回滚操作包括:清空当前缓存队列。
7.一种数据存储装置,设置于数据系统,用于实现对数据的二级缓存,其特征在于,包括:
合并模块,用于在每个cache下对应的多个sqlID,在每个sqlID对应的一个或多个第一表,将不同cache下具有相同表名的多个第一表和相同sqlID的内容合并,得到一个或多个合并后的第二表,其中,每个所述第二表包含多个cache所对应的多个sqlID,每个所述第二表对应多个表名相同的第一表,任意两个所述第二表之间没有同名的第一表;
解析模块,用于解析当前操作的sql指令对应的sqlID、以及该指令对应的cache;
判断模块,用于判断当前操作的sqlID以及cache所在的合并后的第二表,根据所述当前操作的sql操作,对第二表中涉及的多个cache的数据进行删除或重新从数据库中调取数据,写入缓存。
8.根据权利要求7所述的数据存储装置,其特征在于,所述当前操作的sql操作包括以下至少之一:查询操作、更新操作、提交操作、回滚操作。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-6任一项中所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199823.4A CN109871338B (zh) | 2019-03-15 | 2019-03-15 | 一种数据存储方法、装置及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199823.4A CN109871338B (zh) | 2019-03-15 | 2019-03-15 | 一种数据存储方法、装置及计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109871338A CN109871338A (zh) | 2019-06-11 |
CN109871338B true CN109871338B (zh) | 2021-01-29 |
Family
ID=66920561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910199823.4A Active CN109871338B (zh) | 2019-03-15 | 2019-03-15 | 一种数据存储方法、装置及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109871338B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111046106A (zh) * | 2019-12-19 | 2020-04-21 | 杭州中恒电气股份有限公司 | 缓存数据同步方法、装置、设备及介质 |
CN111556507B (zh) * | 2020-04-27 | 2023-05-12 | 北京思特奇信息技术股份有限公司 | 处理个性化5g网络切片需求的方法、系统及电子设备 |
CN112506713B (zh) * | 2020-12-25 | 2023-11-24 | 北京字跳网络技术有限公司 | 多级容灾系统及方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5737592A (en) * | 1995-06-19 | 1998-04-07 | International Business Machines Corporation | Accessing a relational database over the Internet using macro language files |
CN103377148A (zh) * | 2012-04-30 | 2013-10-30 | Sap股份公司 | 部分合并 |
CN104331453A (zh) * | 2014-10-30 | 2015-02-04 | 北京思特奇信息技术股份有限公司 | 一种分布式文件系统及分布式文件系统的构建方法 |
CN105512052A (zh) * | 2014-10-20 | 2016-04-20 | 伊姆西公司 | 用于处理输入输出操作请求的方法和装置 |
CN105677681A (zh) * | 2014-11-21 | 2016-06-15 | 北京神州泰岳软件股份有限公司 | 基于多个数据库的数据查询方法及装置 |
CN105912594A (zh) * | 2016-04-05 | 2016-08-31 | 深圳市深信服电子科技有限公司 | Sql语句处理方法和系统 |
CN106874465A (zh) * | 2017-02-15 | 2017-06-20 | 浪潮软件集团有限公司 | 一种基于数据版本的高效管理缓存的方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8224806B2 (en) * | 2009-07-31 | 2012-07-17 | Hewlett-Packard Development Company, L.P. | Selectivity-based optimized-query-plan caching |
US10482394B2 (en) * | 2017-06-13 | 2019-11-19 | Google Llc | Large-scale in-database machine learning with pure SQL |
CN107704511B (zh) * | 2017-08-31 | 2019-09-06 | 星环信息科技(上海)有限公司 | 一种sql优化方法及设备 |
CN107870970B (zh) * | 2017-09-06 | 2019-10-25 | 北京理工大学 | 一种数据存储查询方法及系统 |
CN107657049B (zh) * | 2017-09-30 | 2021-02-02 | 深圳市华傲数据技术有限公司 | 一种基于数据仓库的数据处理方法 |
-
2019
- 2019-03-15 CN CN201910199823.4A patent/CN109871338B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5737592A (en) * | 1995-06-19 | 1998-04-07 | International Business Machines Corporation | Accessing a relational database over the Internet using macro language files |
CN103377148A (zh) * | 2012-04-30 | 2013-10-30 | Sap股份公司 | 部分合并 |
CN105512052A (zh) * | 2014-10-20 | 2016-04-20 | 伊姆西公司 | 用于处理输入输出操作请求的方法和装置 |
CN104331453A (zh) * | 2014-10-30 | 2015-02-04 | 北京思特奇信息技术股份有限公司 | 一种分布式文件系统及分布式文件系统的构建方法 |
CN105677681A (zh) * | 2014-11-21 | 2016-06-15 | 北京神州泰岳软件股份有限公司 | 基于多个数据库的数据查询方法及装置 |
CN105912594A (zh) * | 2016-04-05 | 2016-08-31 | 深圳市深信服电子科技有限公司 | Sql语句处理方法和系统 |
CN106874465A (zh) * | 2017-02-15 | 2017-06-20 | 浪潮软件集团有限公司 | 一种基于数据版本的高效管理缓存的方法 |
Non-Patent Citations (1)
Title |
---|
基于MyBatis和Spring的JavaEE数据持久层的研究与应用;乔岚;《电脑与信息(理论版)》;20170430;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109871338A (zh) | 2019-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107247808B (zh) | 一种分布式NewSQL数据库系统及图片数据查询方法 | |
US10180946B2 (en) | Consistent execution of partial queries in hybrid DBMS | |
EP3047397B1 (en) | Mirroring, in memory, data from disk to improve query performance | |
US20160267132A1 (en) | Abstraction layer between a database query engine and a distributed file system | |
US9659050B2 (en) | Delta store giving row-level versioning semantics to a non-row-level versioning underlying store | |
KR102407510B1 (ko) | 데이터 저장 및 조회 방법, 장치, 기기 및 매체 | |
US8868512B2 (en) | Logging scheme for column-oriented in-memory databases | |
US10067958B2 (en) | Supporting transient snapshot with coordinated/uncoordinated commit protocol | |
CN109871338B (zh) | 一种数据存储方法、装置及计算机设备 | |
US9171027B2 (en) | Managing a multi-version database | |
JP4340226B2 (ja) | データ項目の使用可能バージョンの提供 | |
US9418094B2 (en) | Method and apparatus for performing multi-stage table updates | |
CN112463886B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
US10437688B2 (en) | Enhancing consistent read performance for in-memory databases | |
CN106716409A (zh) | 基于查询需求从行存储数据库自适应地构建和更新列存储数据库的方法和系统 | |
CN110046170B (zh) | 基于多文件管理的语句执行方法、装置、设备和介质 | |
CN109815240B (zh) | 用于管理索引的方法、装置、设备和存储介质 | |
KR101806394B1 (ko) | 모바일 dbms환경에서 트랜잭션에 특화된 색인 캐시의 구조를 갖는 데이터 처리 방법 | |
CN113918535A (zh) | 一种数据读取方法、装置、设备及存储介质 | |
CN114416798A (zh) | 基于数据依赖关系和一致性保证的缓存管理方法及装置 | |
CN108038121B (zh) | 一种缓存方法及终端 | |
US12066996B2 (en) | Garbage collection based on metadata indicating unmodified objects | |
US20100145996A1 (en) | Accessing Data in a Multi-Generation Database | |
CN118394794B (zh) | 一种跨多个数据源的联邦查询装置 | |
US20230350864A1 (en) | Semi-materialized views |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |