CN104679884A - 数据库的数据分析方法、装置以及系统 - Google Patents
数据库的数据分析方法、装置以及系统 Download PDFInfo
- Publication number
- CN104679884A CN104679884A CN201510114342.0A CN201510114342A CN104679884A CN 104679884 A CN104679884 A CN 104679884A CN 201510114342 A CN201510114342 A CN 201510114342A CN 104679884 A CN104679884 A CN 104679884A
- Authority
- CN
- China
- Prior art keywords
- data
- database
- key
- data analysis
- target database
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据库的数据分析方法、装置以及系统。其中数据库的数据分析方法包括:建立数组列表;扫描得到目标数据库中所有键的键名并存入数组列表;根据数组列表中的键名向目标数据库发送数据分析指令,以得出目标数据库中每个键对应的数据量;以及按照数据量对目标数据库中的键进行排序。利用本发明的技术方案,避免了对大数据量的磁盘文件进行处理,分析速度快,明显提高了数据分析效率。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种数据库的数据分析方法、装置以及系统。
背景技术
数据库(Database)是按照数据结构来组织、存储和管理数据的数据处理系统,随着互联网的发展,数据库的应用更加广泛,其性能要求也越来越高。目前数据库系统必须具备较高的事务处理速度和应用可靠性。
在实际使用中,由于应用程序错误或者使用不恰当,会造成数据库占用过多的内存资源,而且由于存储有当前可用数据,不能清理所有数据。此时释放内存资源需要对数据库中存储的数据进行分析,确定出哪些数据出现异常,占用较多的内存,以根据占用内存的情况有针对性的将占用资源大又不常用的数据进行清理,以释放内存资源。
现有技术中对数据库中数据占用资源的分析,一般采用磁盘数据文件扫描的方式进行,数据分析效率低。特别对于Redis这类基于内存的数据库,一般采用如Redis-rdb-tools等开源工具将所有的Redis数据镜像刷新到磁盘,然后对磁盘上保存的镜像数据进行分析,统计出每条key占用的资源,以生成数据报告。生成磁盘镜像文件需要花费一定的资源和时间,而且基于磁盘文件的数据分析效率较低,特别对于较大的文件,分析速度慢,无法满足数量较大的key的Redis数据库分析的要求。
在另一个方面,现有技术中分析数据库的占用资源,必须在布置数据库的同一台机器上布置分析工具或者将数据库的镜像文件复制到分析工具所在服务器上才能进行,无法实现远程连接分析。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据库的数据分析装置和系统以及相应的数据库的数据分析方法。
本发明进一步的目的至少包括:提高数据库的数据分析效率;以及实现远程对数据库的分析。
依据本发明的一个方面,提供了一种数据库的数据分析方法。该数据库的数据分析方法包括:建立数组列表;扫描得到目标数据库中所有键的键名并存入数组列表;根据数组列表中的键名向目标数据库发送数据分析指令,以得出目标数据库中每个键对应的数据量;以及按照数据量对目标数据库中的键进行排序
可选地,在按照数据量对目标数据库中的键进行排序的步骤之后,以上方法还包括:根据排序结果输出数据分析报告。
可选地,建立数组列表的步骤进一步包括:按照目标数据库中数据的数据类型分别建立多个数组列表。
可选地,扫描得到目标数据库中所有键的键名并存入数组列表的步骤进一步包括:使用扫描指令分批迭代目标数据库,以得到所有键的键名以及与键名对应的键值的数据类型,以及按照数据类型将键名存入对应的数组列表。
可选地,数组列表包括以下任意一项或多项:字符串类型的键名列表、链表类型的键名列表、集合类型的键名列表、有序集合类型的键名列表、散列值类型的键名列表。
可选地,根据数组列表中的键名向目标数据库发送数据分析指令的步骤进一步包括:启动多个数据分析线程,其中每个数据分析线程用于使用管道模式将一个或多个数组列表中的键名发送至目标数据库以供分析,以得到每个键对应的数据量。
可选地,数据分析线程的数量与数组列表的数量一致,每个数据分析线程用于对一个类型的数组列表进行分析。
可选地,按照数据量对目标数据库中的键进行排序的步骤进一步包括:在目标数据库中新建至少一个有序集合数据结构;按照数据类型将数据量以及对应的键名分类存储至有序集合数据结构中;以及在有序集合数据结构中按照数据量进行排序。
可选地,在有序集合数据结构中按照数据量进行排序的步骤进一步包括:在有序集合数据结构中按照每类数据结构中各键值的数据量大小进行排序;或者在有序集合数据结构中估算每类数据结构中各键值的数据量占用的内存,并按照占用的内存大小对目标数据库中的所有键进行排序。
可选地,输出排序结果的步骤进一步包括:按照排序结果生成数据分析报告,将数据分析报告中将数据量超出预设阈值的键进行突出显示;以及输出数据分析报告。
可选地,数据量包括:字符串类型的键的键值长度;链表类型的键中包含的成员个数;集合类型的键中包含的成员个数;有序集合类型的键中包含的成员个数;以及散列值类型的键中包含的成员个数。
可选地,以上方法进一步包括:监控待分析的数据库的内存使用情况,并在内存使用超过设定的内存使用量后,触发建立数组列表的步骤,以启动对目标数据库的数据分析。
可选地,目标数据库为待分析的数据库的多个从库中的一个。
可选地,目标数据库为Redis数据库。
根据本发明的另一个方面还提供了一种数据库的数据分析装置。该数据库的数据分析装置包括:数组建立模块,配置为在建立数组列表;键名扫描模块,配置为扫描得到目标数据库中所有键的键名并存入数组列表;数据量分析模块,配置为根据数组列表中的键名向目标数据库发送数据分析指令,以得出目标数据库中每个键对应的数据量以及排序模块,配置为按照数据量对目标数据库中的键进行排序。
可选地,以上数据库的数据分析装置还包括:输出模块,配置为根据排序结果输出数据分析报告。
可选地,数组建立模块进一步配置为:按照目标数据库中数据的数据类型分别建立多个数组列表。
可选地,键名扫描模块进一步配置为:使用扫描指令分批迭代目标数据库,以得到所有键的键名以及与键名对应的键值的数据类型,以及按照数据类型将键名存入对应的数组列表。
可选地,数组列表包括以下任意一项或多项:字符串类型的键名列表、链表类型的键名列表、集合类型的键名列表、有序集合类型的键名列表、散列值类型的键名列表。
可选地,数据量分析模块进一步配置为:启动多个数据分析线程,其中每个数据分析线程用于使用管道模式将一个或多个数组列表中的键名发送至目标数据库以供分析,以得到每个键对应的数据量。
可选地,数据分析线程的数量与数组列表的数量一致,每个数据分析线程用于对一个类型的数组列表进行分析。
可选地,排序模块进一步配置为:在目标数据库中新建至少一个有序集合数据结构;按照数据类型将数据量以及对应的键名分类存储至有序集合数据结构中;以及在有序集合数据结构中按照数据量进行排序。
可选地,排序模块进一步配置为:在有序集合数据结构中按照每类数据结构中各键值的数据量大小进行排序;或者在有序集合数据结构中估算每类数据结构中各键值的数据量占用的内存,并按照占用的内存大小对目标数据库中的所有键进行排序。
可选地,输出模块进一步配置为:按照排序结果生成数据分析报告,将数据分析报告中数据量超出预设阈值的键进行突出显示;以及输出数据分析报告。
可选地,数据量包括:字符串类型的键的键值长度;链表类型的键中包含的成员个数;集合类型的键中包含的成员个数;有序集合类型的键中包含的成员个数;以及散列值类型的键中包含的成员个数。
可选地,以上数据的数据分析装置还包括:内存监控模块,配置为监控待分析的数据库的内存使用情况并在内存使用超过设定的内存使用量后,数组建立模块,以启动对目标数据库的数据分析。
可选地,目标数据库为待分析的数据库的多个从库中的一个。
可选地,目标数据库为Redis数据库。
根据本发明的另一个方面,还提供了一种数据库的数据分析系统。该数据库的数据分析系统包括:数据库服务器,布置有需要分析的数据库;以及数据分析客户端,用于对数据库进行分析,数据分析客户端配置有以上介绍的任一种数据库的数据分析装置。
本发明的数据库的数据分析方法和装置,预先建立数组列表以存储所有键名,通过所有键名获取对应的键对应的数据量,在数据库内完成对应的数据量的排序,避免了对大数量的磁盘文件进行处理,其处理速度快,效率明显提高,并且分析结果为按照数据量大小的排序结果,直接反映了数据库的内存使用情况,便于内存清理。
进一步地,本发明的数据库的数据分析方法和装置,按照数据库的数据类型启动多个数据分析线程,采用管道模式实现数据库不同数据类型的数据量的快速分析,减少了客户端与数据库之间的交互次数,进一步提高了分析效率,并且使用字符串类型的键的键值长度;链表类型的键中包含的成员个数;集合类型的键中包含的成员个数;有序数据类型的键中包含的成员个数;以及散列值类型的键中包含的成员个数作为各数据类型对应的数据量,反映出其使用的内存量大小,分析效率高,结果精确。
本发明的数据库的数据分析系统,可以采用通过客户端远程登录的方式实现分析,无需在数据库所在的服务器上布置数据分析工具,提高了数据库分析的便利性。
本发明的数据库的数据分析方法、装置以及系统,尤其适合应用于Redis数据库的数据分析过程中,无需将Redis数据库中的数据导出为磁盘文件,极大提高了数据分析效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是根据本发明一个实施例的数据库的数据分析系统的架构示意图;
图2是根据本发明一个实施例的数据库的数据分析装置的方块示意图;以及
图3是根据本发明一个实施例的数据库的数据分析方法的流程示意图。
具体实施方式
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
图1是根据本发明一个实施例的数据库的数据分析系统的架构示意图。该数据库的数据分析系统一般性地可以包括:数据分析客户端10和数据库服务器20,其中数据库服务器20中布置有需要分析的数据库,数据分析客户端10,配置为向数据库服务器发送数据分析指令,以及接收数据库服务器返回的排序结果。
本实施例的数据分析系统,尤其适合于对Redis数据库进行分析,相比于现有的Redis数据库分析手段,可以利用数据分析客户端10向布置有Redis数据库的数据库服务器20发送分析指令,实现数据分析。
Redis数据库是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、键-值(Key-Value)数据库。Redis支持存储的value数据类型包括字符串(string)、链表(list)、集合(set)、有序集合(sortedset)、散列值(hash)。Redis使用内存存储,读写频率快、性能极高、数据类型丰富,应用范围广泛。
数据分析客户端10可以使用Python语言开发,通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与需要待分析的数据库进行数据连接,也就是只需要获取目标数据库的IP地址、端口和连接密码,即可在远程的数据分析,而不必与数据库必须布置在同一台硬件设备上。
数据库一般以主从库的架构进行布置,即包括一个主库与若干个从库,以实现负载均衡和读写分离,从而提高可用性和故障转移能力。因此在进行数据分析时,只需要数据分析客户端10连接至数据库的一个从库上,而不会影响主库以及其他从库向外提供数据服务。进行分析时,目标数据库优先选择待分析的数据库的多个从库中的一个。选择的策略包括多种,例如按照从库访问量的大小进行选择、或者按照从库与主库的同步时间进行选择、随机选择等。具体的选择策略需要尽量避免对提供数据服务的影响。
在进行数据分析时,数据分析客户端10向数据库服务器20发送数据分析指令,以便目标数据库执行相应指令并返回执行结果。并得到数据分析结果后以数据分析报告或其他方式输出分析结果。以上目标数据库可以为Redis数据库,也可以为其他与Redis具有相似架构的数据库。
数据分析客户端10上可以配置有数据库的数据分析装置100,实现以上数据分析功能。图2是根据本发明一个实施例的数据库的数据分析装置100的示意框图,该数据库的数据分析装置100一般性地可以包括:数组建立模块110、键名扫描模块120、数据量分析模块130、排序模块140、输出模块150、内存监控模块160。这些模块可以根据使用环境以及分析需求灵活进行配置,在一些可选实施例中,不必配置以上所有模块。
数组建立模块110,配置为预先建立数组列表。在一种可选实施例中,数组建立模块110可以按照目标数据库中数据的数据类型建立多个数组列表,例如对于Redis数据库,按照其支持的数据类型可以分别建立字符串类型的键名列表、链表类型的键名列表、集合类型的键名列表、有序集合类型的键名列表、散列值类型的键名列表。
键名扫描模块120配置为扫描得到目标数据库中所有键(Key)的键名并存入数组列表;在数组列表按照数据类型配置为多个的情况下,键名扫描模块120使用扫描指令(scan)分批迭代目标数据库,以得到所有键的键名以及与键名对应的键值的数据类型,以及按照数据类型将键名存入对应的数组列表。
数据量分析模块130配置为根据数组列表中的键名向目标数据发送数据分析指令,以得出目标数据库中每个键对应的数据量。数据量分析模块130可以启动多个数据分析线程分别对某一种类型的数组列表中的键名对应的数据量进行分析。每个数据分析线程用于使用管道模式(Pipeline)将一个或多个数组列表中的键名发送至目标数据库以供分析,得到目标数据库中每个键对应的数据量。
对于不同种类的数据类型对应的数据量,可以使用不同的指标来衡量,例如可以将字符串类型的键的键值长度;链表类型的键中包含的成员个数;集合类型的键中包含的成员个数;有序集合类型的键中包含的成员个数;以及散列值类型中包含的成员个数分别作为字符串数据类型、链表数据类型、集合数据类型、有序集合数据类型、散列值数据类型各自的数据量指标。
在一种可选实施例中,数据分析线程的数量与数组列表的数量一致,每个数据分析线程用于对一个类型的数组列表进行分析,例如一个包括五种数据类型的数据的Redis数据库,可以分别利用字符串数据分析线程、链表数据分析线程、集合数据分析线程、有序集合数据分析线程、散列值数据分析线程分别对字符串数据类型、链表数据类型、集合数据类型、有序集合数据类型、散列值数据类型的数组列表进行分析。
排序模块140配置为按照数据量对目标数据库中的键进行排序,在一种可选实施例中可以使用数据库中有序集合数据结构中有序set命令进行数据的大小排序。也即排序模块140通过向目标数据库发送指令,在目标数据库内部完成排序,例如排序模块140可以配置为在目标数据库中新建至少一个有序集合数据结构;按照数据类型将数据量以及对应的键名分类存储至有序集合数据结构中;并在有序集合数据结构中按照数据量进行排序。
排序模块140可以配置为可以直接按照各类键的键值数据量进行排序,例如在有序集合数据结构中按照每类数据结构中各键值的数据量大小进行排序,排序模块140也可以对键值占用内存量进行估算后,按照估算的内存量对所有键进行统一排序,例如在有序集合数据结构中估算各键值的数据量占用的内存,并按照占用的内存大小对目标数据库中的所有键进行排序。
输出模块150配置为根据排序结果输出数据分析报告。输出模块150可以根据目标数据库返回的排序结果生成数据分析报告并以多种方式进行输出。例如,数据分析报告中可以将数据量超出预设阈值的键进行突出显示,以供提醒用户。
数据分析报告的输出的方式可以为多种,例如发送邮件、表格等。数据分析报告中将数据量超出预设阈值的键进行突出显示。该数据分析报告中还可以不必包含所有类型的数据的排序结果,而仅输出排序最前的预定数量的结果,以便确定是否存在消耗大量内存的异常数据。另外数据分析结果还可以使用邮件、表格等各种方式发送给对应的数据库管理人员。
内存监控模块160可以监控待分析的数据库的内存使用情况并在内存使用超过设定的内存使用量后,触发数组建立模块110,以启动本实施例的数据库的数据分析装置100,对目标数据库进行数据分析。从而在数据库运行出现异常时,及时处理,提高了数据库的运行可靠性。
本实施例的数据库的数据分析装置,尤其适合于对Redis数据库进行分析,利用Redis所支持的管道模式以及有序集合的set命令,进一步提高数据分析效率。另外,本实施例的数据库的数据分析装置并不限于对Redis数据库进行分析,也可以用于其他类型的数据库。
以下结合本发明实施例的数据库的数据分析方法,对以上数据库的数据分析系统和数据库的数据分析装置100进行数据分析流程进行介绍,该实施例的数据库的数据分析方法可以由以上介绍的任一实施例的数据库的数据分析装置100执行,实现数据库的快速分析。图3是根据本发明一个实施例的数据库的数据分析方法的示意图,该数据库的数据分析方法包括:
步骤S302,建立数组列表;
步骤S304,扫描得到目标数据库中所有键的键名并存入数组列表;
步骤S306,根据数组列表中的键名向目标数据库发送数据分析指令,以得出目标数据库中每个键对应的数据量;以及
步骤S308,按照数据量对目标数据库中的键进行排序。
步骤S302可以按照目标数据库中数据的数据类型建立多个数组列表,例如对于Redis数据库可以分别建立字符串类型的键名列表、链表类型的键名列表、集合类型的键名列表、有序集合类型的键名列表、散列值类型的键名列表,用于分别存放字符串类型键值对应的的键名、链表键值对应的的键名、集合键值对应的的键名、有序集合键值对应的的键名。具体建立的数组列表的种类和数量以数据库中实际存储的数据类型确定。
相应地,步骤S304可以使用扫描指令(scan)分批迭代目标数据库,以得到所有键的键名以及与键名对应的键值的数据类型,以及按照数据类型将键名存入对应的数组列表。例如可以使用scan命令每次获取1000个key的键名以及key对应的value的数据类型直至获取数据库中所有的key,获取到的key的键名按照数据类型存储到对应的数组列表中,例如将字符串型键值的键名存入字符串键名列表。Scan命令每次获取的键名的个数可以根据数据库的处理能力灵活进行配置,从而协调读取、写入、以及数据库的处理速度。
在将目标数据库所有的key名存入对应的数组列表后,步骤S306可以启动多个数据分析线程,分别按照一个或多个数组列表中的key名向目标数据发出分析指令。例如每个数据分析线程使用管道模式(Pipeline)将一个或多个数组列表中的键名发送至目标数据库以供分析,得到每个键对应的数据量。
管道模式可以充分利用的处理能力。也就是将多条key名的数据分析指令一起发出,不需要等待单条指令的响应返回,而是由数据库处理完打包的多条指令后将多条指令的处理结果打包到一起返回。在进行大批量操作时,利用Pipeline模式,可以节省数据的交互,极大提高数据分析效率。另外由于必须在处理完所有命令前先缓存起所有命令的处理结果。一次打包的指令越多,缓存消耗内存也越多。因此指令的数量可以根据分析的实际情况进行配置。
数据分析线程的数量也可以灵活进行配置,一种可选方式为:数据分析线程的数量与数组列表的数量一致,每个数据分析线程用于对一个类型的数组列表进行分析,例如对于字符串键名列表、链表键名列表、集合键名列表、有序集合键名列表、散列值键名列表五个数组列表分别使用对应的数据分析线程进行分析。在一些特殊的数据库中,例如某种类型的key的数量明显大于其他类型的key的情况下,也可以将一个数据分析线程依次对多个数量较少的数组列表进行分析,或者将数量较大的数组列表使用两个甚至更多数量的线程进行同时处理。
对数据分析结果的排序可以利用中有序集合(sorted set)的排序功能完成,提高排序的效率。步骤S308可以通过指令在目标数据库中新建至少一个有序集合数据结构;按照数据类型将数据量以及对应的键名分类存储至对应的有序集合数据结构中;并在有序集合数据结构中按照数据量进行排序。在有序集合数据结构中按照数据量进行排序的一种排序方式为:在有序集合数据结构中按照每类数据结构中各键值的数据量大小进行排序。另一种可选的排序方式为有序集合数据结构中估算每类数据结构中各键值的数据量占用的内存,并按照占用的内存大小对目标数据库中的所有键进行排序。
对于Redis数据库中五种主要数据结构类型,本实施例的数据库的数据分析方法可以用最小的代价快速获取每类key的数据量的大小排序,比如字符串类型进行键值长度倒序排序,链表、集合、有序集合、散列值按照键包含的成员个数倒序排序,以快速分析确认当前数据库的内存使用情况,得到占用内存最大的key。
在步骤S308之后,本实施例的数据分析方法还可以进一步包括步骤S310:根据排序结果输出数据分析报告。一种可选的方式为按照排序结果生成数据分析报告;将数据分析报告中数据量超出预设阈值的键进行突出显示;以及输出数据分析报告。
输出排序结果可以采用数据分析报告的方式输出,例如以邮件或者其他方式将排序靠前的key名以及对应的数据量输出,为了在数据分析报告中突出可能存在异常的数据,在数据分析报告中将数据量超出预设阈值的键进行突出显示,例如以红色进行显示。
该数据分析报告中还可以不必包含所有类型的数据的排序结果,而仅输出排序最前的预定数量的结果,以便确定是否存在消耗大量内存的异常数据。另外数据分析结果还可以使用邮件、表格等各种方式发送给对应的数据库管理人员。
本实施例的数据的数据分析方法中的目标数据库可以为待分析的数据库的多个从库中的一个,选择的策略包括多种,例如按照从库访问量的大小进行选择、或者按照从库与主库的同步时间进行选择、随机选择等。具体的选择策略需要尽量避免影响数据库正常提供数据服务。
在目标数据库为Redis数据库时,以上数据分析的流程中在数据库内进行,利用内存处理,避免了对大数量的磁盘文件进行处理,处理速度快,效率明显提高,并且分析结果为按照数据量大小的排序结果,直接反映了数据库的内存使用情况,便于内存清理。另外由于可以采用远程连接的方式进行,也就是通过客户端远程连接Redis数据库并以通过对数据库的远程操作,实现对数据库的分析,无需在数据库服务器上布置数据库分析软件,避免了对Redis数据库的正常数据服务造成影响。
更进一步地,本实施例的Redis数据库的数据分析方法,按照Redis数据库的数据类型启动多个数据分析线程,采用管道模式实现Redis数据库不同数据类型的数据量的快速分析,分析效率高,相比于现有的磁盘分析方式,效率提高数个数量级。
而且,本实施例的数据库的数据分析方法输出的分析结果直接反映了key的内存使用情况,方便了对异常数据的快速清理。
本实施例的数据库的数据分析方法可以定期执行以了解数据库的运行情况,优选地,本实施例的数据库的数据分析方法还可以在内存使用暴涨或其他异常情况出现时,快速进行故障分析和内存清理,一种可选的分析启动方式为:监控待分析的数据库的内存使用情况,并在内存使用超过设定内存使用量后,触发执行步骤S302,从而开始运行本实施例的数据库的数据分析方法,以对目标数据库的分析。以下是使用本实施例的数据库的数据分析方法应用于Redis数据库的分析的一个具体实例。
待分析的Redis存储有字符串、链表、集合、有序集合、散列值等五种数据结构类型,分析目标为以最小的代价快速获取每类key的大小排序,比如字符串类型进行字符长度倒序排序、对链表、集合、有序集合、散列值类型返回数据成员个数倒序排序,以快速分析确认Redis数据库的内存使用情况。
Python开发的数据分析客户端10使用待分析的Redis数据库的IP地址、端口和连接密码实现远程连接。在完成连接后,在客户端建立五个专用的空数组列表数据结构,以分别存放Redis中的五种不同数据类型的key名称。当连接到Redis数据库后,因为Redis采用单线程处理应用请求的,为了不影响正常的业务访问,可以使用Scan操作分批迭代Redis数据库结果集,保证在扫描开始时的所有数据都能被获取。
当获取到所有的key对应的数据类型并存储至对应的列表数据结构后,启用Redis服务的特有pipeline模式,将所有key分批发送Redis服务端进行分析,以减少数据分析客户端与Redis数据库的交互次数,具体的分析过程为:对于字符串数据类型获取key的长度,其数据类型(list、hash、set、sorted set)可以获取数据成员个数。为了减少数据分析客户端的压力,无需将分析结果返回给客户端,而是直接在Redis数据库中建立SortedSet类型的五个数据结构,分别记录不同类型key的数据量,由于所有的计算和存储都是基于原有的Redis内存数据库实例,大大减少了客户端与数据库之间的数据交互,极大的提高了分析效率。
Redis数据库中所有key分析完后,在五个SortedSet中各进行一次长度、成员个数的排序,得到排序结果。根据该排序结果可以在数据分析客户端上生成数据分析报告并最终向数据库管理员输出,以便数据库管理员根据中数据情况进行内存清理,或者自动清理占用内存量超过阈值且长期未被访问的数据。
本实施例的数据库的数据分析方法,在对Redis这类基于内存的数据库进行分析时,可以直接基于数据库在内存中分析,大大提高了数据分析效率,分析结果直观,以便在出现内存使用量突然提高的情况下及时进行处理,提高了数据库的运行可靠性。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域的技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据库的数据分析装置和数据库的数据分析系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”或“包括”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
本实施例还提供了A1.一种数据库的数据分析方法,包括:
建立数组列表;
扫描得到目标数据库中所有键的键名并存入所述数组列表;
根据所述数组列表中的键名向所述目标数据库发送数据分析指令,以得出所述目标数据库中每个键对应的数据量;以及
按照所述数据量对所述目标数据库中的键进行排序。
A2.根据A1所述的方法,在所述按照所述数据量对所述目标数据库中的键进行排序的步骤之后,所述方法还包括:
根据所述排序结果输出数据分析报告。
A3.根据A2所述的方法,其中,所述建立数组列表的步骤进一步包括:
按照所述目标数据库中数据的数据类型分别建立多个所述数组列表。
A4.根据A3所述的方法,其中,所述扫描得到目标数据库中所有键的键名并存入所述数组列表的步骤进一步包括:
使用扫描指令分批迭代所述目标数据库,以得到所述所有键的键名以及与键名对应的键值的数据类型,以及
按照所述数据类型将所述键名存入对应的数组列表。
A5.根据A4所述的方法,其中,所述数组列表包括以下任意一项或多项:
字符串类型的键名列表、
链表类型的键名列表、
集合类型的键名列表、
有序集合类型的键名列表、以及
散列值类型的键名列表。
A6.根据A1至A5中任一项所述的方法,其中,所述根据所述数组列表中的键名向所述目标数据库发送数据分析指令的步骤进一步包括:
启动多个数据分析线程,其中
每个所述数据分析线程用于使用管道模式将一个或多个数组列表中的键名发送至所述目标数据库以供分析,以得到所述每个键对应的数据量。
A7.根据A6所述的方法,其中,
所述数据分析线程的数量与所述数组列表的数量一致,每个所述数据分析线程用于对一个类型的数组列表进行分析。
A8.根据A1至7中任一项所述的方法,其中,所述按照所述数据量对所述目标数据库中的键进行排序的步骤进一步包括:
在所述目标数据库中新建至少一个有序集合数据结构;
按照所述数据类型将所述数据量以及对应的键名分类存储至所述有序集合数据结构中;以及
在所述有序集合数据结构中按照所述数据量进行排序。
A9.根据A8所述的方法,其中,所述在所述有序集合数据结构中按照所述数据量进行排序的步骤进一步包括:
在所述有序集合数据结构中按照每类数据结构中各键值的数据量大小进行排序;或者
在所述有序集合数据结构中估算每类数据结构中各键值的数据量占用的内存,并按照所述占用的内存大小对所述目标数据库中的所有键进行排序。
A10.根据A2至A9中任一项所述的方法,其中,所述根据所述排序结果输出数据分析报告的步骤进一步包括:
按照所述排序结果生成数据分析报告;
将所述数据分析报告中数据量超出预设阈值的键进行突出显示;以及
输出所述数据分析报告。
A11.根据A1至A10中任意一项所述的方法,其中,所述数据量包括:
字符串类型的键的键值长度;
链表类型的键中包含的成员个数;
集合类型的键中包含的成员个数;
有序集合类型的键中包含的成员个数;以及
散列值类型的键中包含的成员个数。
A12.根据A1至A11中任意一项所述的方法,其中,所述方法进一步包括:
监控待分析的数据库的内存使用情况,并在内存使用超过设定的内存使用量后,触发所述建立数组列表的步骤,以启动对所述目标数据库的数据分析。
A13.根据A12所述的方法,其中,
所述目标数据库为所述待分析的数据库的多个从库中的一个。
A14.根据A1至A13中任一项所述的方法,其中,所述目标数据库为Redis数据库。
本实施例还提供了B15.一种数据库的数据分析装置,包括:
数组建立模块,配置为建立数组列表;
键名扫描模块,配置为扫描得到目标数据库中所有键的键名并存入所述数组列表;
数据量分析模块,配置为根据所述数组列表中的键名向所述目标数据库发送数据分析指令,以得出所述目标数据库中每个键对应的数据量;以及
排序模块,配置为按照所述数据量对所述目标数据库中的键进行排序。
B16.根据B15所述的装置,还包括:
输出模块,配置为根据所述排序结果输出数据分析报告。
B17.根据B16所述的装置,其中,所述数组建立模块进一步配置为:
按照所述目标数据库中数据的数据类型分别建立多个所述数组列表。
B18.根据B17所述的装置,其中,所述键名扫描模块进一步配置为:
使用扫描指令分批迭代所述目标数据库,以得到所述所有键的键名以及与键名对应的键值的数据类型,以及
按照所述数据类型将所述键名存入对应的数组列表。
B19.根据B18所述的装置,其中,所述数组列表包括以下任意一项或多项:
字符串类型的键名列表、
链表类型的键名列表、
集合类型的键名列表、
有序集合类型的键名列表、以及
散列值类型的键名列表。
B20.根据B15至B19中任一项所述的装置,其中所述数据量分析模块进一步配置为:
启动多个数据分析线程,其中
每个所述数据分析线程用于使用管道模式将一个或多个数组列表中的键名发送至所述目标数据库以供分析,以得到所述每个键对应的数据量。
B21.根据B20所述的装置,其中,
所述数据分析线程的数量与所述数组列表的数量一致,每个所述数据分析线程用于对一个类型的数组列表进行分析。
B22.根据B15至B21中任一项所述的装置,其中,所述排序模块进一步配置为:
在所述目标数据库中新建至少一个有序集合数据结构;
按照所述数据类型将所述数据量以及对应的键名分类存储至所述有序集合数据结构中;以及
在所述有序集合数据结构中按照所述数据量进行排序。
B23.根据B22所述的装置,其中,所述排序模块进一步配置为:
在所述有序集合数据结构中按照每类数据结构中各键值的数据量大小进行排序;或者
在所述有序集合数据结构中估算每类数据结构中的各键值的数据量占用的内存,并按照所述占用的内存大小对所述目标数据库中的所有键进行排序。
B24.根据B16至23中任一项所述的装置,其中所述输出模块进一步配置为:
按照所述排序结果生成数据分析报告;
将所述数据分析报告中数据量超出预设阈值的键进行突出显示;以及
输出所述数据分析报告。
B25.根据B15至B24中任意一项所述的装置,其中,所述数据量包括:
字符串类型的键的键值长度;
链表类型的键中包含的成员个数;
集合类型的键中包含的成员个数;
有序集合类型的键中包含的成员个数;以及
散列值类型的键中包含的成员个数。
B26.根据B15至25中任意一项所述的装置,还包括:
内存监控模块,配置为监控待分析的数据库的内存使用情况并在内存使用超过设定的内存使用量后,触发所述数组建立模块,以启动对所述目标数据库的数据分析。
B27.根据B26所述的装置,其中,
所述目标数据库为所述待分析的数据库的多个从库中的一个。
B28.根据B15至27中任一项所述的装置,其中,
所述目标数据库为Redis数据库。
本实施例还提供了C29.一种数据库的数据分析系统,包括:
数据库服务器,布置有需要分析的数据库;以及
数据分析客户端,用于对所述数据库进行数据分析,所述数据分析客户端配置有根据B15至B28中任一项所述的数据库的数据分析装置。
Claims (10)
1.一种数据库的数据分析方法,包括:
建立数组列表;
扫描得到目标数据库中所有键的键名并存入所述数组列表;
根据所述数组列表中的键名向所述目标数据库发送数据分析指令,以得出所述目标数据库中每个键对应的数据量;以及
按照所述数据量对所述目标数据库中的键进行排序。
2.根据权利要求1所述的方法,在所述按照所述数据量对所述目标数据库中的键进行排序的步骤之后,所述方法还包括:
根据所述排序结果输出数据分析报告。
3.根据权利要求2所述的方法,其中,所述建立数组列表的步骤进一步包括:
按照所述目标数据库中数据的数据类型分别建立多个所述数组列表。
4.根据权利要求3所述的方法,其中,所述扫描得到目标数据库中所有键的键名并存入所述数组列表的步骤进一步包括:
使用扫描指令分批迭代所述目标数据库,以得到所述所有键的键名以及与键名对应的键值的数据类型,以及
按照所述数据类型将所述键名存入对应的数组列表。
5.根据权利要求4所述的方法,其中,所述数组列表包括以下任意一项或多项:
字符串类型的键名列表、
链表类型的键名列表、
集合类型的键名列表、
有序集合类型的键名列表、以及
散列值类型的键名列表。
6.根据权利要求1至5中任一项所述的方法,其中,所述根据所述数组列表中的键名向所述目标数据库发送数据分析指令的步骤进一步包括:
启动多个数据分析线程,其中
每个所述数据分析线程用于使用管道模式将一个或多个数组列表中的键名发送至所述目标数据库以供分析,以得到所述每个键对应的数据量。
7.根据权利要求6所述的方法,其中,
所述数据分析线程的数量与所述数组列表的数量一致,每个所述数据分析线程用于对一个类型的数组列表进行分析。
8.根据权利要求1至7中任一项所述的方法,其中,所述按照所述数据量对所述目标数据库中的键进行排序的步骤进一步包括:
在所述目标数据库中新建至少一个有序集合数据结构;
按照所述数据类型将所述数据量以及对应的键名分类存储至所述有序集合数据结构中;以及
在所述有序集合数据结构中按照所述数据量进行排序。
9.一种数据库的数据分析装置,包括:
数组建立模块,配置为建立数组列表;
键名扫描模块,配置为扫描得到目标数据库中所有键的键名并存入所述数组列表;
数据量分析模块,配置为根据所述数组列表中的键名向所述目标数据库发送数据分析指令,以得出所述目标数据库中每个键对应的数据量;以及
排序模块,配置为按照所述数据量对所述目标数据库中的键进行排序。
10.一种数据库的数据分析系统,包括:
数据库服务器,布置有需要分析的数据库;以及
数据分析客户端,用于对所述数据库进行数据分析,所述数据分析客户端配置有根据权利要求9所述的数据库的数据分析装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510114342.0A CN104679884B (zh) | 2015-03-16 | 2015-03-16 | 数据库的数据分析方法、装置以及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510114342.0A CN104679884B (zh) | 2015-03-16 | 2015-03-16 | 数据库的数据分析方法、装置以及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104679884A true CN104679884A (zh) | 2015-06-03 |
CN104679884B CN104679884B (zh) | 2018-04-10 |
Family
ID=53314926
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510114342.0A Active CN104679884B (zh) | 2015-03-16 | 2015-03-16 | 数据库的数据分析方法、装置以及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104679884B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105812351A (zh) * | 2016-02-23 | 2016-07-27 | 平安科技(深圳)有限公司 | 实现会话共享的方法和系统 |
CN106547807A (zh) * | 2015-09-23 | 2017-03-29 | 财团法人工业技术研究院 | 数据分析方法与装置 |
CN109614140A (zh) * | 2018-12-17 | 2019-04-12 | 泰康保险集团股份有限公司 | 配置数据处理方法及装置、电子设备、存储介质 |
CN111125769A (zh) * | 2019-12-27 | 2020-05-08 | 上海轻维软件有限公司 | 基于oracle数据库的海量数据脱敏方法 |
CN111813758A (zh) * | 2020-07-02 | 2020-10-23 | 深圳乐信软件技术有限公司 | 数据库文件分布式分析方法、装置、服务器及存储介质 |
WO2021237630A1 (zh) * | 2020-05-29 | 2021-12-02 | 深圳市欢太科技有限公司 | 多键值命令的处理方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983313A (zh) * | 2006-04-07 | 2007-06-20 | 华为技术有限公司 | 工作流数据处理装置及方法 |
CN102314460A (zh) * | 2010-07-07 | 2012-01-11 | 阿里巴巴集团控股有限公司 | 数据分析方法、系统及服务器 |
CN103646111A (zh) * | 2013-12-25 | 2014-03-19 | 普元信息技术股份有限公司 | 大数据环境下实现实时数据关联的系统及方法 |
CN103902592A (zh) * | 2012-12-27 | 2014-07-02 | 深圳市腾讯计算机系统有限公司 | 基于MapReduce实现分析函数的方法及系统 |
-
2015
- 2015-03-16 CN CN201510114342.0A patent/CN104679884B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983313A (zh) * | 2006-04-07 | 2007-06-20 | 华为技术有限公司 | 工作流数据处理装置及方法 |
CN102314460A (zh) * | 2010-07-07 | 2012-01-11 | 阿里巴巴集团控股有限公司 | 数据分析方法、系统及服务器 |
CN103902592A (zh) * | 2012-12-27 | 2014-07-02 | 深圳市腾讯计算机系统有限公司 | 基于MapReduce实现分析函数的方法及系统 |
CN103646111A (zh) * | 2013-12-25 | 2014-03-19 | 普元信息技术股份有限公司 | 大数据环境下实现实时数据关联的系统及方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106547807A (zh) * | 2015-09-23 | 2017-03-29 | 财团法人工业技术研究院 | 数据分析方法与装置 |
CN106547807B (zh) * | 2015-09-23 | 2021-01-22 | 财团法人工业技术研究院 | 数据分析方法与装置 |
US11086881B2 (en) | 2015-09-23 | 2021-08-10 | Industrial Technology Research Institute | Method and device for analyzing data |
CN105812351A (zh) * | 2016-02-23 | 2016-07-27 | 平安科技(深圳)有限公司 | 实现会话共享的方法和系统 |
CN105812351B (zh) * | 2016-02-23 | 2019-04-09 | 平安科技(深圳)有限公司 | 实现会话共享的方法和系统 |
CN109614140A (zh) * | 2018-12-17 | 2019-04-12 | 泰康保险集团股份有限公司 | 配置数据处理方法及装置、电子设备、存储介质 |
CN109614140B (zh) * | 2018-12-17 | 2022-02-08 | 泰康保险集团股份有限公司 | 配置数据处理方法及装置、电子设备、存储介质 |
CN111125769A (zh) * | 2019-12-27 | 2020-05-08 | 上海轻维软件有限公司 | 基于oracle数据库的海量数据脱敏方法 |
CN111125769B (zh) * | 2019-12-27 | 2023-09-19 | 上海轻维软件有限公司 | 基于oracle数据库的海量数据脱敏方法 |
WO2021237630A1 (zh) * | 2020-05-29 | 2021-12-02 | 深圳市欢太科技有限公司 | 多键值命令的处理方法、装置、电子设备及存储介质 |
CN111813758A (zh) * | 2020-07-02 | 2020-10-23 | 深圳乐信软件技术有限公司 | 数据库文件分布式分析方法、装置、服务器及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104679884B (zh) | 2018-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104679884A (zh) | 数据库的数据分析方法、装置以及系统 | |
US10116534B2 (en) | Systems and methods for WebSphere MQ performance metrics analysis | |
US11669507B2 (en) | Indexing and relaying data to hot storage | |
Bockermann et al. | The streams framework | |
WO2020087082A1 (en) | Trace and span sampling and analysis for instrumented software | |
CN104303189B (zh) | 用于确定应用程序漏洞的系统及方法 | |
CN105389352A (zh) | 日志处理方法和装置 | |
CN107861981A (zh) | 一种数据处理方法及装置 | |
US10169461B2 (en) | Analysis of data utilization | |
CN106126551A (zh) | 一种Hbase数据库访问日志的生成方法、装置及系统 | |
US10657099B1 (en) | Systems and methods for transformation and analysis of logfile data | |
CN108140022B (zh) | 数据查询方法和数据库系统 | |
CN105653635A (zh) | 数据库管理方法与装置 | |
CN115934774B (zh) | 一种高并发多维度分布式交易系统流控方法、引擎及介质 | |
KR20150118963A (ko) | 큐 모니터링 및 시각화 | |
CN110704445B (zh) | 工业数据湖系统 | |
CN104933105A (zh) | 数据库访问请求的分析方法和装置 | |
CN114238085A (zh) | 接口测试方法、装置、计算机设备、存储介质 | |
CN107783728A (zh) | 数据存储方法、装置和设备 | |
CN104866597A (zh) | 数据库访问请求的分析方法和装置 | |
CN112311679B (zh) | 状态检测方法、装置、电子设备及可读存储介质 | |
US11341022B2 (en) | Runtime performance introspection | |
CN113128848A (zh) | 全业务指标的数据质量监控方法、电子设备及存储介质 | |
CN112527813A (zh) | 业务系统的数据处理方法及装置、电子设备、存储介质 | |
US20170300516A1 (en) | System and method for building a dwarf data structure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220718 Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015 Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park) Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Patentee before: Qizhi software (Beijing) Co.,Ltd. |
|
TR01 | Transfer of patent right |