1

読み取り専用権限を持つリモート データベースのデータを使用する Web アプリケーションを開発しています。このデータベース SATMANAGE のデータは、5 分ごとに更新されます。私のアプリケーションでは、IDIRECT_STATUS と呼ばれるリモート データベース テーブルの 1 つにいくつかの列が必要です。

気圧 CLI からクエリを実行し、データを .txt ファイルに保存する cron ジョブがあります。次に、ローカル テーブルを切り捨て、LOAD DATA LOCAL INFILE を使用して更新されたデータを再読み込みします。

これは今までうまくいきました。アプリケーションがますます複雑になっているため、ローカルの「リモート」テーブルを変更する方法が必要です。ここで、ローカルの「リモート」テーブルを切り捨てます。リモートの「IDIRECT_STATUS」テーブルから更新されたデータでテーブルを更新するだけで済みます。これにより、リモートの「IDIRECT_STATUS」テーブルには存在しない列を、ローカルの「remotes」テーブルに含めることができます。

これは私が探しているものです。左側はリモートテーブルです。対応する列で、左側のリモートデータベースで更新された右側のローカルデータベースを維持したいと考えています。これは、追加のローカル列がその状態を維持するように、ローカル テーブルを切り捨てません。

IDIRECT_STATUS                  remotes
-------------------------------|-------------------------------
id                             | id
netmodem_name                  | netmodem_name
nms_name                       | nms_name
ip_addr                        | ip_addr
serial_no                      | serial_no
last_date_online               | last_date_online
last_updated                   | last_updated
network_name                   | network_name
network_id                     | network_id
is_mobile                      | is_mobile
latitude                       | latitude
longitude                      | longitude
lnb_name                       | lnb_name
buc_name                       | buc_name
upstream_qos_profile_name      | upstream_qos_profile_name
downstream_qos_profile_name    | downstream_qos_profile_name
inroute_maximum_data_rate      | inroute_maximum_data_rate
outroute_maximum_data_rate     | outroute_maximum_data_rate
upstream_cir                   | upstream_cir
use_upstream_cir               | use_upstream_cir
crtp_enabled                   | crtp_enabled
INROUTE_GROUP_ID               | INROUTE_GROUP_ID
                               | excluded           (Not updated or deleted)
                               | excluded_to        (Not updated or deleted)
                               | shipowner_id       (Not updated or deleted)
                               | etc...             (Not updated or deleted ...)

うまくいけば、素晴らしい人たちが私を助けることができます. 不明な点がありましたらお知らせください。質問をできるだけ早く編集します。

4

1 に答える 1

1

last_updated左の表にあるフィールドを見ました。私が提案するのは、単純な perl または php スクリプトを使用して、次のことを行うロードを行うことです。

a) ローカル テーブルから最新の更新時刻を取得する b) 最後の挿入後に更新されたリモート テーブルからデータを選択する c) リモート データでローカル テーブルを更新する

php コードでは、次のようになります。

<?
// select the last update time
$sql = "select max(last_updated) as last_update_time from remotes";
$r = mysql_query($sql);
$row = mysql_fetch_assoc($r);
// save the last upate time
$last_update_time = $row['last_update_time'];

// get newer rows from the remote database
$sql = "select * from IDIRECT_STATUS where last_updated > ".$last_update_time;
$r = mysql_query($sql);
while ($row = mysql_fetch_assoc($r)) {
  // generate update queries
  $sql = "update remotes set netmodem_name='".$row['netmodem_name']."', ... last_updated='".$row['last_updated']."' where id=".$row['id'];
  // execute query
  mysql_query($sql);
}
?>
于 2013-01-29T12:09:27.467 に答える