1

まず、システムについて説明します。2 つのシステムに 2 つの同等のデータベースがあり、15 分ごとに複数のテーブルの新しいデータが同期されます。

このために、最初のデータベースの最後の主キーと 2 番目のデータベースの最後の主キーを比較します。すべての新しいデータは、INSERT ステートメントを介して 2 番目のデータベースに挿入されます。データ ボリュームは、少なくとも 200 から 500 のデータセットになります。データベースを備えたサーバーは、インターネット経由で接続されています。

問題: 2 番目のデータベースでは、異なるテーブルの 2 つの値から値を計算し、これを 3 番目のデータベースに書き込む必要があります。だから私はストアド プロシージャを書き、テーブルの 1 つのトリガーによってこれを呼び出します。

ただし、トリガーを含むテーブルには、最初のサーバーの同等のデータよりも少ないデータが格納されます。したがって、ストアド プロシージャの実行時にデータが失われると思います。しかし、なぜ?テストシステムでは機能しますが、生産プロセスでは機能しません。

もう 1 つの興味深い点は、データベースの実際の主キー (自動インクリメント整数) が同じであることです。しかし、2 番目のデータベースには含まれるデータが少なくなります。

CREATE DEFINER=`root`@`%` PROCEDURE `calcSigma`(IN `val1` DOUBLE(10,2), IN `ident` VARCHAR(20), IN `id` INT(11), IN `ts` DATETIME)
BEGIN   
DECLARE phi, theta, sigma double DEFAULT 0; 
IF ident='x_theta' THEN
    SET theta = val1;
    SET phi = (SELECT
    val
    FROM
    x_phi
    WHERE
    sensors_id = id
    AND 
    HOUR(
        TIMEDIFF(
            ts, ts_rised))='0'
    AND
    MINUTE(
        TIMEDIFF(
            ts, ts_rised))='0'
    ORDER BY
    ts_rised
    DESC LIMIT 1);  END IF;
IF theta<>0 && phi<>0 THEN
    IF theta >= 0 THEN
        SET sigma =(((phi/100)*(288.68*POW(1.098+(theta/100),8.02)))/(461.5*(theta+273.15)));
    ELSEIF theta < 0 THEN
        SET sigma =(((phi/100)*(4.689*POW(1.486+(theta/100),12.3)))/(461.5*(theta+273.15)));
    END IF;

    INSERT INTO 
    x_sigma (ts_rised, val, sensors_id) 
    VALUES (ts, sigma, id);
END IF;
END
4

0 に答える 0