数据库的数据分析方法、装置以及系统的制作方法_3

文档序号:8361577阅读:来源:国知局
时,及时处理,提高了数据库的运行可靠性。
[0065]本实施例的数据库的数据分析装置,尤其适合于对Redis数据库进行分析,利用Redis所支持的管道模式以及有序集合的set命令,进一步提高数据分析效率。另外,本实施例的数据库的数据分析装置并不限于对Redis数据库进行分析,也可以用于其他类型的数据库。
[0066]以下结合本发明实施例的数据库的数据分析方法,对以上数据库的数据分析系统和数据库的数据分析装置100进行数据分析流程进行介绍,该实施例的数据库的数据分析方法可以由以上介绍的任一实施例的数据库的数据分析装置100执行,实现数据库的快速分析。图3是根据本发明一个实施例的数据库的数据分析方法的示意图,该数据库的数据分析方法包括:
[0067]步骤S302,建立数组列表;
[0068]步骤S304,扫描得到目标数据库中所有键的键名并存入数组列表;
[0069]步骤S306,根据数组列表中的键名向目标数据库发送数据分析指令,以得出目标数据库中每个键对应的数据量;以及
[0070]步骤S308,按照数据量对目标数据库中的键进行排序。
[0071]步骤S302可以按照目标数据库中数据的数据类型建立多个数组列表,例如对于Redis数据库可以分别建立字符串类型的键名列表、链表类型的键名列表、集合类型的键名列表、有序集合类型的键名列表、散列值类型的键名列表,用于分别存放字符串类型键值对应的的键名、链表键值对应的的键名、集合键值对应的的键名、有序集合键值对应的的键名。具体建立的数组列表的种类和数量以数据库中实际存储的数据类型确定。
[0072]相应地,步骤S304可以使用扫描指令(scan)分批迭代目标数据库,以得到所有键的键名以及与键名对应的键值的数据类型,以及按照数据类型将键名存入对应的数组列表。例如可以使用scan命令每次获取1000个key的键名以及key对应的value的数据类型直至获取数据库中所有的key,获取到的key的键名按照数据类型存储到对应的数组列表中,例如将字符串型键值的键名存入字符串键名列表。Scan命令每次获取的键名的个数可以根据数据库的处理能力灵活进行配置,从而协调读取、写入、以及数据库的处理速度。
[0073]在将目标数据库所有的key名存入对应的数组列表后,步骤S306可以启动多个数据分析线程,分别按照一个或多个数组列表中的key名向目标数据发出分析指令。例如每个数据分析线程使用管道模式(Pipeline)将一个或多个数组列表中的键名发送至目标数据库以供分析,得到每个键对应的数据量。
[0074]管道模式可以充分利用的处理能力。也就是将多条key名的数据分析指令一起发出,不需要等待单条指令的响应返回,而是由数据库处理完打包的多条指令后将多条指令的处理结果打包到一起返回。在进行大批量操作时,利用Pipeline模式,可以节省数据的交互,极大提高数据分析效率。另外由于必须在处理完所有命令前先缓存起所有命令的处理结果。一次打包的指令越多,缓存消耗内存也越多。因此指令的数量可以根据分析的实际情况进行配置。
[0075]数据分析线程的数量也可以灵活进行配置,一种可选方式为:数据分析线程的数量与数组列表的数量一致,每个数据分析线程用于对一个类型的数组列表进行分析,例如对于字符串键名列表、链表键名列表、集合键名列表、有序集合键名列表、散列值键名列表五个数组列表分别使用对应的数据分析线程进行分析。在一些特殊的数据库中,例如某种类型的key的数量明显大于其他类型的key的情况下,也可以将一个数据分析线程依次对多个数量较少的数组列表进行分析,或者将数量较大的数组列表使用两个甚至更多数量的线程进行同时处理。
[0076]对数据分析结果的排序可以利用中有序集合(sorted set)的排序功能完成,提高排序的效率。步骤S308可以通过指令在目标数据库中新建至少一个有序集合数据结构;按照数据类型将数据量以及对应的键名分类存储至对应的有序集合数据结构中;并在有序集合数据结构中按照数据量进行排序。在有序集合数据结构中按照数据量进行排序的一种排序方式为:在有序集合数据结构中按照每类数据结构中各键值的数据量大小进行排序。另一种可选的排序方式为有序集合数据结构中估算每类数据结构中各键值的数据量占用的内存,并按照占用的内存大小对目标数据库中的所有键进行排序。
[0077]对于Redis数据库中五种主要数据结构类型,本实施例的数据库的数据分析方法可以用最小的代价快速获取每类key的数据量的大小排序,比如字符串类型进行键值长度倒序排序,链表、集合、有序集合、散列值按照键包含的成员个数倒序排序,以快速分析确认当前数据库的内存使用情况,得到占用内存最大的key。
[0078]在步骤S308之后,本实施例的数据分析方法还可以进一步包括步骤S310:根据排序结果输出数据分析报告。一种可选的方式为按照排序结果生成数据分析报告;将数据分析报告中数据量超出预设阈值的键进行突出显示;以及输出数据分析报告。
[0079]输出排序结果可以采用数据分析报告的方式输出,例如以邮件或者其他方式将排序靠前的key名以及对应的数据量输出,为了在数据分析报告中突出可能存在异常的数据,在数据分析报告中将数据量超出预设阈值的键进行突出显示,例如以红色进行显示。
[0080]该数据分析报告中还可以不必包含所有类型的数据的排序结果,而仅输出排序最前的预定数量的结果,以便确定是否存在消耗大量内存的异常数据。另外数据分析结果还可以使用邮件、表格等各种方式发送给对应的数据库管理人员。
[0081]本实施例的数据的数据分析方法中的目标数据库可以为待分析的数据库的多个从库中的一个,选择的策略包括多种,例如按照从库访问量的大小进行选择、或者按照从库与主库的同步时间进行选择、随机选择等。具体的选择策略需要尽量避免影响数据库正常提供数据服务。
[0082]在目标数据库为Redis数据库时,以上数据分析的流程中在数据库内进行,利用内存处理,避免了对大数量的磁盘文件进行处理,处理速度快,效率明显提高,并且分析结果为按照数据量大小的排序结果,直接反映了数据库的内存使用情况,便于内存清理。另外由于可以采用远程连接的方式进行,也就是通过客户端远程连接Redis数据库并以通过对数据库的远程操作,实现对数据库的分析,无需在数据库服务器上布置数据库分析软件,避免了对Redis数据库的正常数据服务造成影响。
[0083]更进一步地,本实施例的Redis数据库的数据分析方法,按照Redis数据库的数据类型启动多个数据分析线程,采用管道模式实现Redis数据库不同数据类型的数据量的快速分析,分析效率高,相比于现有的磁盘分析方式,效率提高数个数量级。
[0084]而且,本实施例的数据库的数据分析方法输出的分析结果直接反映了 key的内存使用情况,方便了对异常数据的快速清理。
[0085]本实施例的数据库的数据分析方法可以定期执行以了解数据库的运行情况,优选地,本实施例的数据库的数据分析方法还可以在内存使用暴涨或其他异常情况出现时,快速进行故障分析和内存清理,一种可选的分析启动方式为:监控待分析的数据库的内存使用情况,并在内存使用超过设定内存使用量后,触发执行步骤S302,从而开始运行本实施例的数据库的数据分析方法,以对目标数据库的分析。以下是使用本实施例的数据库的数据分析方法应用于Redis数据库的分析的一个具体实例。
[0086]待分析的Redis存储有字符串、链表、集合、有序集合、散列值等五种数据结构类型,分析目标为以最小的代价快速获取每类key的大小排序,比如字符串类型进行字符长度倒序排序、对链表、集合、有序集合、散列值类型返回数据成员个数倒序排序,以快速分析确认Redis数据库的内存使用情况。
[0087]Python开发的数据分析客户端10使用待分析的Redis数据库的IP地址、端口和连接密码实现远程连接。在完成连接后,在客户端建立五个专用的空数组列表数据结构,以分别存放Redis中的五种不同数据类型的key名称。当连接到Redis数据库后,因为Redis采用单线程处理应用请求的,为了不影响正常的业务访问,可以使用Scan操作分批迭代Redis数据库结果集,保证在扫描开始时的所有数据都能被获取。
[0088]当获取到所有的key对应的数据类型并存储至对应的列表数据结构后,启用Redis服务的特有pipeline模式,将所有key分批发送Redis服务端进行分析,以减少数据分析客户端与Redis数据库的交互次数,具体的分析过程为:对于字符串数据类型获取key的长度,其数据类型(list、hash、set、sorted set)可以获取数据成员个数。为了减少数据分析客户端的压
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1