我正在为一台机器构建一个监控应用程序,位置必须在一个月的时间内每秒读取和存储。我写了一个过程,用初始值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:00”时,程序到达了2016-01-14 07:16:39,由于与数据库失去连接而崩溃。
有没有一种更有效的方法来创建一个月的模板表,该模板表的增量为秒,值为0?我的监控应用程序是在vb.net上构建的,我曾尝试在vb上创建一个代码来创建这个模板表,但它比mysql工作站上的直接过程更慢,而且更有可能崩溃。
发布于 2016-01-14 05:02:43
我建议先看一下应用程序架构。期望整个系统在整个月内运行一秒钟都不会出现故障,这要求太高了。另外,试着想想你是否真的需要这么多数据。
1条记录/秒*3600秒/小时*24小时/天*30天/月超过310万条记录。尝试处理如此多的信息将导致许多软件阻塞。
如果测量是离散的,则只需在数据库中记录更改,就可以大大减少这种情况。如果它是模拟的,你可能没有选择。
我建议创建两个独立的应用程序:一个存储本地数据的本地监视器,然后每隔一个小时左右向mysql服务器应用程序报告一次。这样,如果数据库不可用,它会继续收集数据,当数据库再次可用时,它可以传输自上次连接以来记录的所有内容。然后,mysql应用程序可以一次性将数据存储在数据库中。如果失败,它可以重试,并保留自己的数据副本,直到数据存储到数据库中。
例如:
机器=>监控工作站应用程序=> mysql应用程序=> mysql数据库
这需要更多的工作,但每个应用程序都非常小,甚至可能是可重用的。这将使故障排除变得更加容易,并极大地提高系统的容错性。
https://stackoverflow.com/questions/34772120
复制相似问题