提高告警数据查找和存储效率的方法
技术领域
本发明涉及通信领域,特别是一种针对电信管理网的提高告警数据查找和存储效率方法。
背景技术
ITU-T M.3010将电信管理层模型划分为网元层(NEL)、网元管理层(EML)、网络管理层(NML)、业务管理层(SML)、事务管理层(BML)。针对不同层次相应存在不同的网络管理系统,比如:网元层网管系统(EMS)、网络层网管系统(NMS)、业务层网管系统(SMS)等等。
在这些系统中,需要关心网络设备的运行情况,在网管系统中一般使用告警数据来表现设备的运行状态。此处主要论述网络层网管系统(NMS)网管告警数据的处理情况。
一般而言,告警数据为告警模块实际处理的数据,告警数据挂接在单板上;单板为索引数据,单板挂在网元上;网元也为索引数据,网元挂在EMS上。EMS也为索引数据,同时对EMS的数据加锁。当前操作如对网元下的单板或单板下的告警进行增加,删除,修改时,只要此网元还有其它线程正在操作,都会发生访问冲突;如只是对网元下的单板或单板下的告警数据进行查询操作,如果有其它线程对此网元下的单板或单板下的告警进行增加,删除,修改操作,都会发生访问冲突。所以,此设计只允许一个线程对EMS数据进行操作,因此对数据的访问效率比较低下。
发明内容
针对现有技术存在的缺陷和不足,本发明提供一种提高告警数据查找和存储效率的方法,给出一种允许多线程访问数据的方法。
为了达到上述发明目的,本发明提高告警数据查找和存储效率的方法,其特征在于:包括以下步骤:
(1)通过依次获取网元层网管系统,网元,单板索引数据分别加入到系统的网元层网管系统索引链表、网元索引链表、单板索引链表来构造告警服务器的索引数据;
(2)告警服务器采用三层锁多线程处理告警数据,其中,通过对网元层网管系统和网元数据的访问增加资源读写锁,对网元数据增加表明操作线程使用网元状态的标记位,以及对访问网元的使用状态标记位增加网元锁构成所述三层锁。
上述的提高告警数据查找和存储效率的方法中,所述构造告警服务器的索引数据还包括以下步骤:
(11)对ems和网元数据的访问增加资源读写锁,同时对于网元数据增加表明操作线程使用网元的状态的标记位。
上述的提高告警数据查找和存储效率的方法中,所述步骤(2)分为告警服务器处理设备上报告警数据和告警服务器处理客户端查询告警数据。
上述的提高告警数据查找和存储效率的方法中,所述告警服务器处理设备上报告警数据包括以下步骤:
(2A1)操作线程获取资源读写锁,如成功则进入下一步,失败则退出操作;
(2A2)从设备上报的告警数据获取所属的ems数据,从系统中查找是否有此ems数据,如成功,则进入下一步,失败则退出操作;
(2A3)从设备上报的告警数据中获取所属的网元数据,从(2A2)步骤中查找到的ems数据下的网元数据中查找是否有此网元数据,如成功,则进入下一步,失败则退出操作;
(2A4)操作线程获取网元锁,如成功则进入下一步,失败则退出操作;
(2A5)查看网元的使用状态是否与当前访问相冲突,如冲突则当前操作线程进入睡眠状态,并增加网元等待写标记位,线程唤醒后需去掉网元等待写标记位,增加网元写标记位并进入下一步;否则增加网元写标记位进入下一步。进入下一步前需释放网元锁;
(2A6)从设备上报的告警数据中获取所属的单板数据,从(2A3)步骤中查找到的网元数据下的单板数据中查找是否有此单板数据,如成功,则进入下一步,失败则退出操作;
(2A7)从(2A6)步骤中查找到的单板中查询是否存在设备上报的告警数据,如不存在则在单板下增加一告警数据;
(2A8)操作线程获取网元信号量锁,如成功后去掉(2A5)中获取网元的写标记位,如系统中存在其它线程在等待,试图唤醒等待线程后释放网元信号量锁。最后释放资源读写锁。
上述的提高告警数据查找和存储效率的方法中,所述告警服务器处理客户端查询告警数据包括以下步骤:
(2B1)操作线程获取资源读写锁,如成功则进入下一步,失败则退出操作;
(2B2)从客户端的输入参数中提取ems数据,从系统中查找是否有此ems数据,如成功,则进入下一步,失败则退出操作;
(2B3)从客户端的输入参数中提取网元数据,从(2B2)步骤中查找到的ems数据下的网元数据中查找是否有此网元数据,如成功,则进入下一步,失败则退出操作;
(2B4)操作线程获取网元锁,如成功则进入下一步,失败则退出操作;
(2B5)查看网元的使用状态是否与当前访问相冲突,如冲突则当前操作线程进入睡眠状态,并增加网元等待读标记位,线程唤醒后去掉网元等待读标记位,增加读标记位并进入下一步;否则增加网元读标记位进入下一步。进入下一步前需释放网元锁;
(2B6)如果客户端不提供单板数据,进入步骤(2B9);如果客户端提供单板数据,从客户端的输入参数中提取单板数据,从(2B3)步骤中查找到的网元数据下的单板数据中查找是否有此单板数据,如成功,则进入下一步,失败则退出操作;
(2B7)从(2B6)步骤中查找到的单板中查询是否存在告警数据,如存在则取出单板下所有告警数据;
(2B8)操作线程获取网元信号量锁,如成功后去掉(2B5)中获取网元的读标记位,如系统中存在其它线程在等待,查看第一个等待线程是否满足访问条件,如满足,唤醒它后释放网元信号量锁。最后释放资源读写锁,并返回(2B7)步骤中的获取的告警数据,步骤结束;
(2B9)查出网元下所有单板,依次取出单板下告警数据并合并为一个数据包返回给客户端,步骤结束。
采用本发明所述方法,与现有技术相比,由于采取了三层锁(两个实际锁和一些简单标记位)技术措施,使告警数据允许多线程操作,提高了处理效率。
具体实施方式
下面结合一个光传输NMS网管系统中告警模块告警数据处理的实例,详细说明如何设计一种方法来提高访问层次数据的效率。
具体实施也分两个场景处理:处理设备上报告警和客户端向服务器查询告警数据。
1.处理设备上报告警数据
A:构造告警服务器的索引数据;B:设备上报告警。
2.客户端向服务器查询告警数据
A:构造告警服务器的索引数据;
C:客户端向告警服务器查询告警数据。
其中A步骤可详细描述为以下步骤:
A1:依次获ems,网元,单板索引数据分别加入到系统的ems索引链表、网元索引链表、单板索引链表。
A2:对于ems和网元数据的访问增加资源读写锁。同时对于网元数据增加表明操作线程使用网元状态的标记位,比如读,等待读,写,等待写标记位。另外对于访问网元的使用状态标记位增加网元锁。
其中B步骤可详细描述为以下步骤:
B1:操作线程获取资源读写锁,如成功则进入下一步,失败则退出操作。
B2:从设备上报的告警数据获取所属的ems数据,从系统中查找是否有此ems数据,如成功,则进入下一步,失败则退出操作。
B3:从设备上报的告警数据中获取所属的网元数据,从B2步骤中查找到的ems数据下的网元数据中查找是否有此网元数据,如成功,则进入下一步,失败则退出操作。
B4:操作线程获取网元锁,如成功则进入下一步,失败则退出操作。
B5:查看网元的使用状态是否与当前访问相冲突,如冲突则当前操作线程进入睡眠状态,并增加网元等待写标记位,线程唤醒后去掉网元等待写标记位,增加网元写标记位并进入下一步;否则增加网元写标记位进入下一步,如此一来,就允许告警数据多线程操作了。进入下一步前需释放网元锁。
B6:从设备上报的告警数据中获取所属的单板数据,从B3步骤中查找到的网元数据下的单板数据中查找是否有此单板数据,如成功,则进入下一步,失败则退出操作。
B7:从B6步骤中查找到的单板中查询是否存在设备上报的告警数据,如不存在则在单板下增加一告警数据。
B8:操作线程获取网元信号量锁,如成功后去掉B5中获取网元的写标记位,如系统中存在其它线程在等待,查看第一个等待线程是否满足访问条件如满足唤醒它后释放网元信号量锁。最后释放资源读写锁。
其中C步骤可详细描述为以下步骤:
C1:操作线程获取资源读写锁,如成功则进入下一步,失败则退出操作。
C2:从客户端的输入参数中提取ems数据,从系统中查找是否有此ems数据,如成功,则进入下一步,失败则退出操作。
C3:从客户端的输入参数中提取网元数据,从C2步骤中查找到的ems数据下的网元数据中查找是否有此网元数据,如成功,则进入下一步,失败则退出操作。
C4:操作线程获取网元信号量锁,如成功则进入下一步,失败则退出操作。
C5:查看网元的使用状态是否与当前访问相冲突,如冲突则当前操作线程进入睡眠状态,并增加网元等待读标记位。否则增加网元读标记位进入下一步,如此一来,就允许告警数据多线程操作了。进入下一步前需释放网元信号量锁。
C6:如果客户端不提供单板数据,进入步骤C9;如果客户端提供单板数据,从客户端的输入参数中提取单板数据,从C3步骤中查找到的网元数据下的单板数据中查找是否有此单板数据,如成功,则进入下一步,失败则退出操作。
C7:从C6步骤中查找到的单板中查询是否存在告警数据,如存在则返回所有单板下告警数据。
C8:操作线程获取网元信号量锁,如成功后去掉C5中获取网元的读标记位,如系统中存在其它线程在等待,查看第一个等待线程是否满足访问条件如满足唤醒它后释放网元信号量锁。最后释放资源读写锁,步骤结束。
C9:如果客户端不提供单板数据,就表明此时要查询网元下所有告警数据,此时需查出网元下所有单板,依次取出单板下告警数据并合并为一个数据包返回给客户端即可。
本发明所述方法与现有技术相比,采取了三层锁(两个实际锁和一些简单标记位)技术措施,使告警数据允许多线程操作,提高了处理效率。