一种基于Redis的关系型数据库全量内存化的方法技术

技术编号:38197645 阅读:23 留言:0更新日期:2023-07-21 16:35
本发明专利技术涉及一种基于Redis的关系型数据库全量内存化的方法,包括用多种存储转换模式将RDB中的数据、关系和约束转换为适合Redis存储的对象,通过迁移控制组件实现批量快速的数据库迁移;通过SQL解析器组件、操作预检查组件和SQL适配器组件对Redis进行标准SQL访问;分析Redis的离线RDB数据文件,通过解析RDB日志文件,将文件中的数据内容转换为关系型数据库支持的SQL语句,批量执行SQL实现数据从Redis到关系型数据库的备份存储。本发明专利技术构建出三种存储转换模式实现关系模型到键值模型的转换,结合数据分页、多线程和Redis批量命令技术实现数据库快速批量迁移。数据库快速批量迁移。数据库快速批量迁移。

【技术实现步骤摘要】
一种基于Redis的关系型数据库全量内存化的方法


[0001]本专利技术涉及计算机数据处理
,尤其涉及一种基于Redis的关系型数据库全量内存化的方法。

技术介绍

[0002]在经历了人工管理、文件管理之后,数据管理技术在数据库阶段迎来了里程碑式的发展。数据库能够高效有序地存储大量数据信息,并方便用户进行有效检索、访问和管理,是信息技术发展过程中管理数据的主要方式。自2013年以来,排名前三位的数据库均是RDB(关系型数据库)。虽然目前非关系型数据库(Not Only Sql,NoSQL)发展迅速,但RDB仍然是大多数应用程序的数据存储介质,是整个社会的信息基础设施。为满足存储需求,数据库技术的发展中衍生出了以下几种数据库架构。
[0003]最简单的数据库架构是单体数据库,它使用单个数据库存储全部数据,并通过配置数据库连接池管理数据库连接,客户端可从连接池中获取连接管理数据库中的数据。在小型应用系统中,通过数据连接池直连RDB的方案比较常见。
[0004]为避免数据库单点故障和单个数据库压力过大,针对不同规模的读写请求出现了一主多从的数据库方案。但主从架构的读写分离方案存在写延迟的问题,会导致主从数据库实时数据不一致。为了降低数据呈指数级增长场景下的单个数据库的负载,分库分表技术应运而生。但分库分表技术会带来分布式事务和跨数据库JOIN等问题。数据库不同架构产生的本质原因在于RDB将数据存储在磁盘上,在频繁读写的高并发场景下会存在读写I/O瓶颈,带来操作效率低和高异常率等问题。综上所述,RDB在高并发场景下的读写和扩展性等方面具有自身局限性。
[0005]而随着NoSQL的发展,出现了在数据库层面使用缓存技术实现读写分离,利用内存组件减轻RDB的读压力,使得MMDB+RDB组合使用成为趋势。目前缓存方案广泛应用于企业信息管理,且缓存组件多使用NoSQL内存组件(MemCache)或NoSQL内存数据库(Redis)。在缓存式数据库架构中,RDB作为主库存储所有数据,缓存组件存储热点数据(高频率使用的数据),并设置内存数据淘汰策略来保证缓存的命中率。客户端每次从缓存中读取数据,缓存未命中的数据将从RDB中读取再写入缓存。缓存更新有多种策略,目前流行的有先删除缓存再更新RDB、先更新RDB再删除缓存、先更新RDB再更新缓存、缓存代理和写回(只更新缓存,缓存组件异步批量地更新RDB)五种策略。其中,前三种更新策略均无法避免脏数据的产生。第一种更新策略有明显的缺陷,当更新操作删除缓存但还没来得及更新RDB中的数据时,此时的查询操作会因为未命中缓存而读取RDB中旧的数据并写入缓存,导致写入缓存的数据变成脏数据。第二种更新策略是目前使用最广泛的,但也有小几率产生脏数据。第三种更新策略需要提前准备数据,比第二种更新策略具备更高的读性能,但要更新RDB和缓存两部分数据会导致其较低的写性能,也同样会产生脏数据。第四种更新策略不适用于高并发场景。第五种更新策略不保证强一致性,会造成部分数据丢失问题。
[0006]综上所述,在缓存读写分离架构中的读请求情况相对简单,但数据更新逻辑复杂,
容易出现数据一致性问题,导致数据命中率降低。同时,缓存式读写分离方案不能避免高并发场景下更新RDB中的数据引起的I/O读写瓶颈问题。此外,当大量恶意请求故意查询不在缓存中的数据时会引发缓存穿透问题,导致所有的请求会同时转向请求RDB。目前最流行的解决缓存穿透的方案是增加前置布隆过滤器和设置无效缓存方案。但布隆过滤器会带来误识别率和删除困难问题,无效缓存方案在实际应用中情况复杂且会增加内存占用。缓存雪崩是缓存式方案存在的另一个问题,因为缓存具有时效性,缓存失效引发的缓存雪崩也会给RDB带来巨大压力,甚至导致系统崩溃。目前可以使用锁/队列、多级缓存和设置不同的缓存时效三种方案来减轻以上问题,但会降低应用整体性能且实际应用情况复杂。
[0007]近年来随着内存技术的发展,利用内存访问技术减少与磁盘之间的交互频率提升数据库实时响应能力成为一个研究热点。同时,随着动态随机存取存储器(DRAM)容量的增加,计算机内存可配置到TB级,在DRAM中存储和处理企业数据成为可能。一些商用数据库推出了企业级的内存化方案,但大多方案都存在配置复杂、系统过重、商业技术使用限制和硬件要求较高等问题。

技术实现思路

[0008]本专利技术的目的在于克服现有技术的缺点,提供了一种基于Redis的关系型数据库全量内存化的方法,利用开源轻量级Redis将MySQL内存化的全量式内存化方案(含数据、关系和约束),利用内存数据库高效的内存计算和数据处理能力解决高并发环境下MySQL的I/O读写瓶颈问题。
[0009]本专利技术的目的通过以下技术方案来实现:一种基于Redis的关系型数据库全量内存化的方法,所述方法包括:
[0010]构建基于对象的行式存储模式ORB

KVM、基于属性的行式存储模块ARB

KVM和分段列式键值交叉存储模式PCB

KVCM将RDB中的数据、关系和约束转换为适合Redis存储的对象,并通过迁移控制组件实现批量快速的数据库迁移;
[0011]设置SQL操作中间件,通过其中的SQL解析器组件、操作预检查组件和SQL适配器组件对Redis进行标准SQL访问;
[0012]设置数据备份架构,分析Redis的离线RDB数据文件,通过解析RDB日志文件,将文件中的数据内容转换为MySQL支持的SQL语句,批量执行SQL实现数据从Redis到MySQL的备份存储。
[0013]所述数据库迁移包括以下内容:
[0014]A1、从MySQL Schema中获取指定数据库中每个表的表对象,记录每个表的表名、列属性、主键属性和记录行数信息,然后将每个表的表对象组合为全局表对象;
[0015]A2、判断MySQL数据库中的所有关系是否转换完成,如果是,则跳转步骤A4,如果不是,则跳转步骤A3;
[0016]A3、使用存储转换模式中的关系转换算法实现所有关系转换,生成关系转换对象;
[0017]A4、判断MySQL数据库中所有表的约束是否转换完成,如果是,则跳转步骤A6,如果不是,则跳转步骤A5;
[0018]A5、使用存储转换模式中的约束转换算法实现所有约束转换,生成约束转换对象;
[0019]A6、判断MySQL数据库中的所有表的数据是否转换完成,如果是,则跳转步骤A8,如
果不是,则选择任意未完成数据转换的表,跳转步骤A7;
[0020]A7、使用存储转换模式中的数据转换算法构建数据键值对象,生成数据转换对象;
[0021]A8、当需要迁移的转换结果对象个数超过预设的阈值时,通过迁移控制组件批量迁移关系转换对象、约束转换对象和数据转换对象;
[0022]A9、判断所有转换对象是否迁移完成,如果没有完成则跳转步骤A8。
[0023]所述基于对象的行式存储模式ORB
...

【技术保护点】

【技术特征摘要】
1.一种基于Redis的关系型数据库全量内存化的方法,其特征在于:所述方法包括:构建基于对象的行式存储模式ORB

KVM、基于属性的行式存储模块ARB

KVM和分段列式键值交叉存储模式PCB

KVCM将RDB中的数据、关系和约束转换为适合Redis存储的对象,并通过迁移控制组件实现批量快速的数据库迁移;设置SQL操作中间件,通过其中的SQL解析器组件、操作预检查组件和SQL适配器组件对Redis进行标准SQL访问;设置数据备份架构,分析Redis的离线RDB数据文件,通过解析RDB日志文件,将文件中的数据内容转换为MySQL支持的SQL语句,批量执行SQL实现数据从Redis到关系型数据库的备份存储。2.根据权利要求1所述的一种基于Redis的关系型数据库全量内存化的方法,其特征在于:所述数据库迁移包括以下内容:A1、从MySQL Schema中获取指定数据库中每个表的表对象,记录每个表的表名、列属性、主键属性和记录行数信息,然后将每个表的表对象组合为全局表对象;A2、判断MySQL数据库中的所有关系是否转换完成,如果是,则跳转步骤A4,如果不是,则跳转步骤A3;A3、使用存储转换模式中的关系转换算法实现所有关系转换,生成关系转换对象;A4、判断MySQL数据库中所有表的约束是否转换完成,如果是,则跳转步骤A6,如果不是,则跳转步骤A5;A5、使用存储转换模式中的约束转换算法实现所有约束转换,生成约束转换对象;A6、判断MySQL数据库中的所有表的数据是否转换完成,如果是,则跳转步骤A8,如果不是,则选择任意未完成数据转换的表,跳转步骤A7;A7、使用存储转换模式中的数据转换算法构建数据键值对象,生成数据转换对象;A8、当需要迁移的转换结果对象个数超过预设的阈值时,通过迁移控制组件批量迁移关系转换对象、约束转换对象和数据转换对象;A9、判断所有转换对象是否迁移完成,如果没有完成则跳转步骤A8。3.根据权利要求2所述的一种基于Redis的关系型数据库全量内存化的方法,其特征在于:所述基于对象的行式存储模式ORB

KVM中的数据转换算法包括:输入数据库对象DB,初始化全局Map类型表对象TabObjMap,以表名称为键,以表对象为值;输入全局表对象TabObjMap,输出DB中的所有表的自增主键Tpk,设置T
i
(i<tcount)中的主键为PK
i
,若主键存在,则通过公式获取到表中的主键PK
i
,否则为主键值为默认值dpk;针对每一个数据库表,输入数据库名称DB、表名T
i
和主键PK
i
,根据公式K
i
=M(DB,T
i
,PK
i
)拼接为Redis中的Key对象K
i
;针对数据集djsonarr,jsonarr的长度为trlen,设置行对象为row
i
,行记录中主键值为PKVal
i
,行json对象为jrow
i
,根据公式jrow

i
=R(jrow
i
,PK
i
)移除json对象中主键及其对应的值,根据公式构建散列中的域字段field和域字段值value的集合NVal
i
,再结合K
i
通过公式DM=build(K
i
,NVal
i
)构建数
据转换对象DM。4.根据权利要求2所述的一种基于Redis的关系型数据库全量内存化的方法,其特征在于:所述基于属性的行式存储模块ARB

KVM中的关系转换算法包括:输入数据库对象DB,初始化全局Map类型表对象TabObjMap,以表名称为键,以表对象为值;输入全局表对象TabObjMap,输出DB中的所有表的自增主键Tpk,设置T
i
(i<tcount)中的主键为PK
i
,若主键存在,则通过公式获取到表中的主键PK
i
,否则为主键值为默认值dpk;针对每一个数据库表,输入数据库名称DB,表名T
i
和主键PK
i
以及主键值PKVal
i
,根据公式K
i
=M(DB,T
i
,PK
i
,PKVal
i
)拼接为字符串对象K
i
;针对数据集djsonarr,设置行对象row
i
,行对象中的属性列长度为tcolcount,col
k
(k<tcolcount)和colVal
k
(k<tcolcount)分别为row
i
中的每个列字段和列值,根据公式构建散列中的的域字段field和域字段值value的集合NVal
i
,再结合K
i
通过公式DM=build(K
i
,NVal
i
)构建数据转换对象DM。5.根据权利要求2所述的一种基于Redis的关系型数据库全量内存化的方法,其特征在于:所述分段列式键值交叉存储模式PCB

KVCM中的关系转换算法包括:输入数据库...

【专利技术属性】
技术研发人员:朱洲森张俊罗纯琦赵倩林露
申请(专利权)人:四川师范大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1