本发明涉及数据库管理领域,特别涉及一种基于有序队列的实时数据库监测方法。
背景技术:
1、数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
2、目前在实际数据库中,为了对数据库进行更好的使用,需要对数据库实行监控,从而便于为人们服务,其中心跳检测服务需要及时检测客户机器每秒发来的心跳请求,然而随着数据库客户端的不断增多,传统的遍历请求的方式已经不太适合作为检测算法,传统的检测算法需要进行遍历检测,比如以3秒超时为例,实际只需要每3秒检测一次即可,如果遍历检测就意味着多做了很多无用的检测,十分耽误整个心跳检测服务的效率,也严重拖延其处理效率,为此我们提出一种基于有序队列的实时数据库监测方法。
技术实现思路
1、本发明的目的在于提供一种基于有序队列的实时数据库监测方法,通过利用有序双向链表有序的特性在集群节点大多数健康的情况下只需检测队列尾部少量心跳信息就可以判断出队列整体的健康情况。由于不需要遍历整个链表减少了管理计算压力的同时还缩短了发现异常的时间。
2、为实现上述目的,本发明提供如下技术方案:一种基于有序队列的实时数据库监测方法,包括如下操作方法:
3、s1、根据系统设计吞吐量以及机器配置,设置初始参数分别设置工作线程和分发线程数以及内存容量告警阈值,根据工作线程数调整分流存储队列个数保证线程队列数相匹配;
4、s2、管理节点启动,开始接收心跳请求,并且根据预设的哈希算法进行分流存储,新接收的心跳请求都存储在有序双向链表队首,然后根据主机ip信息去哈希表里查询是否存在心跳记录,如果该新接收的心跳记录不存在,则为新上线客户端,把客户端信息进行存储至哈希表然后触发新上线事件并持久化到客户端数据库表写入流程结束,如果新接收的心跳记录存在,则根据哈希表存储的值找到有序链表节点位置进行删除,删除成功后把新入队的节点位置数据存储更新到哈希表中到此写入流程结束;
5、s3、检测模块启动,根据预设的检测频率,分别从各个分组的有序队列队尾进行取数,判断数值是否大于一开始的预设值,如果数据大于预设值则触发告警并进入相应处理流程,然后依次往前重复上述流程直到找到小于预设值的节点结束,由于队列有序的特性如果最后的节点数据都满足健康检测,则队列全部数据都满足小于预设值的情况,检测流程结束下个检测流程重复上述检测流程。
6、优选的,每次利用哈希表查询心跳记录,在链表队列中的位置进行删除旧心跳记录,以保证队列中只保留客户机最新的心跳记录。
7、优选的,所述检测模块启动后,在从有序队列的队尾开始遍历检测,如果队尾节点为超过预设阈值则表示该队列所有主机当前都未超时。
8、优选的,所述客户端为多个,具体为ip1、ip2或ip3。
9、优选的,所述ip1经由哈希表处理,保留最新最新心跳记录,形成ip1存储1,所述ip2经由哈希表处理,保留最新最新心跳记录,形成ip2存储2,所述ip3经由哈希表处理,保留最新最新心跳记录,形成ip3存储3。
10、优选的,所述检测模块启动时,使用哈希分流把心跳请求信息进行分流分别存储在多个主机中交由检测任务并行检测。
11、优选的,所述检测模块启动并且进行份流时,基于ip进行hash分流,然后再进行分别存储。
12、优选的,所述检测模块启动后,当取数的数值大于预设值时,所触发告警具体方式为弹窗提示和语音提示。
13、优选的,所述检测模块启动后,当取数的数值大于预设值时,触发告警并进入相应处理流程,其相应流程具体包括提供心跳记录异常情况,并且给出心跳异常情况出现的多种可能原因。
14、优选的,所述管理节点启动时和检测模块启动时,通过哈希表查询双向链表旧心跳的存储位置以及从有序队列队尾开始检测短路判断整个队列超时情况。
15、本发明的技术效果和优点:
16、(1)通过利用有序双向链表有序的特性在集群节点大多数健康的情况下只需检测队列尾部少量心跳信息就可以判断出队列整体的健康情况。由于不需要遍历整个链表减少了管理计算压力的同时还缩短了发现异常的时间;
17、(2)通过采用数据异构的方式提升检测效率,通过有序双向链表和哈希表结构存储带来的查询优势避免了直接遍历检测给管理节点带来的性能压力。利用哈希表查询时间复杂的o(1)的特性在哈希表中查找心跳信息所在的链表节点位置能够做的快速查找并删除旧的心跳信息保证计算复杂度不会随着数据量的增长造成指数级上升;
18、(3)通过充分利用计算机多核特性以及减少哈希表碰撞概率,可以进一步提升整个系统的检测效率,并且通过哈希表查询双向链表旧心跳的存储位置以及从有序队列队尾开始检测短路判断整个队列超时情况,能够避免了直接遍历检测给管理节点带来的性能压力,从而提升整个心跳服务的效率。
1.一种基于有序队列的实时数据库监测方法,其特征在于,包括如下操作方法:
2.根据权利要求1所述的一种基于有序队列的实时数据库监测方法,其特征在于,每次利用哈希表查询心跳记录,在链表队列中的位置进行删除旧心跳记录,以保证队列中只保留客户机最新的心跳记录。
3.根据权利要求1所述的一种基于有序队列的实时数据库监测方法,其特征在于,所述检测模块启动后,在从有序队列的队尾开始遍历检测,如果队尾节点为超过预设阈值则表示该队列所有主机当前都未超时。
4.根据权利要求1所述的一种基于有序队列的实时数据库监测方法,其特征在于,所述客户端为多个,具体为ip1、ip2或ip3。
5.根据权利要求4所述的一种基于有序队列的实时数据库监测方法,其特征在于,所述ip1经由哈希表处理,保留最新最新心跳记录,形成ip1存储1,所述ip2经由哈希表处理,保留最新最新心跳记录,形成ip2存储2,所述ip3经由哈希表处理,保留最新最新心跳记录,形成ip3存储3。
6.根据权利要求5所述的一种基于有序队列的实时数据库监测方法,其特征在于,所述检测模块启动时,使用哈希分流把心跳请求信息进行分流分别存储在多个主机中交由检测任务并行检测。
7.根据权利要求6所述的一种基于有序队列的实时数据库监测方法,其特征在于,所述检测模块启动并且进行份流时,基于ip进行hash分流,然后再进行分别存储。
8.根据权利要求1所述的一种基于有序队列的实时数据库监测方法,其特征在于,所述检测模块启动后,当取数的数值大于预设值时,所触发告警具体方式为弹窗提示和语音提示。
9.根据权利要求1所述的一种基于有序队列的实时数据库监测方法,其特征在于,所述检测模块启动后,当取数的数值大于预设值时,触发告警并进入相应处理流程,其相应流程具体包括提供心跳记录异常情况,并且给出心跳异常情况出现的多种可能原因。
10.根据权利要求1所述的一种基于有序队列的实时数据库监测方法,其特征在于,所述管理节点启动时和检测模块启动时,通过哈希表查询双向链表旧心跳的存储位置以及从有序队列队尾开始检测短路判断整个队列超时情况。