欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

国标GB28181协议国标平台EasyGBS视频平台告警功能占用数据库内存过多的优化方案

程序员文章站 2022-03-17 14:14:21
...

之前在《EasyGBS实现告警功能快照》一文中,讲了EasyGBS的告警功能已经成功开发,可以设定报警画面,以及对画面进行快照拍摄记录。

国标GB28181协议国标平台EasyGBS视频平台告警功能占用数据库内存过多的优化方案

然而,在服务器长时间不断累积报警信息之后,报警信息就会越积越多,此时不单单是告警快照图片过多,而是数据库存的告警记录也会一直累积,服务器和数据库的性能必然会受到影响。

国标GB28181协议国标平台EasyGBS视频平台告警功能占用数据库内存过多的优化方案

国标GB28181协议国标平台EasyGBS视频平台告警功能占用数据库内存过多的优化方案

因此我们需要对报警信息的累积存储进行优化,设置告警快照和告警记录的存储时间,然后在程序中设置定时检查间隔。

国标GB28181协议国标平台EasyGBS视频平台告警功能占用数据库内存过多的优化方案

/*
			1、获取配置文件告警保留时间
			2、设置定时检测任务删除超过时间的快照文件和数据库告警记录
		*/
		for _, v := range devoceFiles {
			alarmPath := filepath.Join(alarmSnapDir, v.Name())
			alarmFiles, err := ioutil.ReadDir(alarmPath)
			if err != nil {
				return err
			}
			for _, k := range alarmFiles {
				alarmJpgPath := filepath.Join(alarmPath, k.Name())
				nameSplitArr := strings.Split(k.Name(), ".")
				if len(nameSplitArr) == 2 {
					//晒出后缀时间
					if len(nameSplitArr[0]) > 20 {
						timeStr := nameSplitArr[0][len(nameSplitArr[0])-14:]
						if t, err := time.ParseInLocation("20060102150405", timeStr, time.Local); err == nil {
							if thisTime.After(t.Add(time.Duration(d) * time.Hour * 24)) {
								if err := os.RemoveAll(alarmJpgPath); err != nil {
									log.Println(err)
								} else {
									utils.Logf("定时清空告警快照失败 %v ,%v", alarmJpgPath, d)
								}
							}
						}

					}

				}

			}

设置过后会按照设置的间隔,检查本地的快照目录文件夹和数据库的告警记录,然后将超过保留时间的记录和快照信息删除,达到减少资源占用的目的。

国标GB28181协议国标平台EasyGBS视频平台告警功能占用数据库内存过多的优化方案