毎時1回実行するcronジョブを使用して、ローカルデータベースをAPIの時間データで更新しています。私のcronジョブ/データベースの更新を高速化するには
データベースは時間単位のデータを行に格納し、APIは過去24時間を表す24ポイントのデータを返します。
データポイントが見つからないことがあるので、データを取り戻すときに、最新の時間のみを更新することはできません。このデータを以前に保持していたかどうかを確認し、ギャップが見つかるギャップを記入する必要があります。
すべてが動作していますが、cronジョブは毎回完了するのに少なくとも30分かかっています。これをより良く/より速く/より効率的に実行する方法があるのだろうか?
// loop through the 24 data points returned
for($i=0; $i<24; $i+=1) {
// check if the data is for today, because the past 24 hours data will include data from yesterday
if ($thisDate == $todaysDate) {
// check if data for this id and this time already exists
$query1 = "SELECT reference FROM mydatabase WHERE ((id='$id') AND (hour='$thisTime'))";
// if it doesnt exist, insert it
if ($datafound==0) {
$query2 = "INSERT INTO mydatabase (id,hour,data_01) VALUES ('$id','$thisTime','$thisData')";
}
}
}
を1500個の異なるIDがありますので、この1500回を行います(簡潔にするために要約コード!):
私のコードは次の操作を行います!
このコードをスピードアップまたは最適化して、より高速で効率的に実行できる方法はありますか?
ストアドプロシージャ内で選択と条件付き挿入を使用すると、クエリの実行が最適化されます。 – Abhishek
あなたのテーブル 'mydatabase'の既存のサイズが大きいと仮定しています。 1つのアプローチは、適切な主キー(おそらく 'insert ignore'を使用)を使ってすべてをステージングテーブルにロードし、次に' mydatabase'に一度参加して更新することです。ステージングテーブル用にメモリテーブルを使用することができますが、これはさらに高速になる可能性があります。 –