机器监控应用程序(mysql)

机器监控应用程序(mysql),mysql,datetime,stored-procedures,scada,Mysql,Datetime,Stored Procedures,Scada,我正在为一台机器构建一个监控应用程序,必须在一个月内每秒读取和存储一次位置。我编写了一个程序,用初始值0填充一个表 CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(start_date datetime, end_date datetime) BEGIN DECLARE interval_var INT DEFAULT 1; WHILE end_date >= start_date DO

我正在为一台机器构建一个监控应用程序,必须在一个月内每秒读取和存储一次位置。我编写了一个程序,用初始值0填充一个表

CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(start_date datetime, end_date datetime)
BEGIN

DECLARE interval_var INT DEFAULT 1;

    WHILE end_date >= start_date DO

        INSERT INTO table1(datetime, value) VALUES(start_date, 0);
        SET start_date = DATE_ADD(start_date, INTERVAL interval_var SECOND);

    END WHILE;

END
这个过程非常慢,而且大多数时候与sql数据库的连接都会丢失。例如,当我尝试将表格从“2016-01-14 07:00:00”填充到“2016-01-15 07:00:00”时,程序到达2016-01-14 07:16:39,并由于与数据库的连接中断而崩溃


是否有一种更有效的方法来创建一个月的模板表,以秒为增量,值为0?我的监控应用程序是在vb.net上构建的,我曾尝试在vb上创建一个代码来创建此模板表,但与mysql工作站上的直接过程相比,它速度较慢,更容易崩溃。

我建议先查看应用程序的体系结构。期望整个系统在一个月内运行一秒钟都不会出现故障,这要求太高了。另外,试着想想你是否真的需要这么多数据

每秒1条记录*3600秒/小时*24小时/天*30天/月超过310万条记录。试图处理这么多信息会导致很多软件阻塞

如果测量是离散的,您可以通过只记录数据库中的更改来显著减少这种情况。如果是模拟的,你可能别无选择

我建议创建两个独立的应用程序:存储本地数据的本地监视器,然后每隔一小时左右向mysql服务器应用程序报告一次。这样,如果数据库不可用,它将继续收集数据,当数据库再次可用时,它可以传输自上次连接以来记录的所有内容。然后mysql应用程序可以一次性将数据存储到数据库中。如果失败,它可以重试,并保留自己的数据副本,直到数据存储到数据库中

例:

machine=>监控站app=>mysql app=>mysql数据库


这需要更多的工作,但每个应用程序都非常小,甚至可以重用。而且它将使故障排除变得更加容易,并显著提高系统的容错能力。

我建议首先查看应用程序体系结构。期望整个系统在一个月内运行一秒钟都不会出现故障,这要求太高了。另外,试着想想你是否真的需要这么多数据

每秒1条记录*3600秒/小时*24小时/天*30天/月超过310万条记录。试图处理这么多信息会导致很多软件阻塞

如果测量是离散的,您可以通过只记录数据库中的更改来显著减少这种情况。如果是模拟的,你可能别无选择

我建议创建两个独立的应用程序:存储本地数据的本地监视器,然后每隔一小时左右向mysql服务器应用程序报告一次。这样,如果数据库不可用,它将继续收集数据,当数据库再次可用时,它可以传输自上次连接以来记录的所有内容。然后mysql应用程序可以一次性将数据存储到数据库中。如果失败,它可以重试,并保留自己的数据副本,直到数据存储到数据库中

例:

machine=>监控站app=>mysql app=>mysql数据库


这需要更多的工作,但每个应用程序都非常小,甚至可以重用。它将使故障排除更加容易,并大大提高系统的容错能力。

您应该能够使用准备好的查询来完成这项工作,该查询旨在准备一次并运行多次。虽然您的存储过程也应该做到这一点,但您应该能够通过准备好的查询来做到这一点,该查询设计为准备一次并运行多次。尽管您的存储过程也应该做到这一点。