私が取り組んでいるスクリプトは、使用国とすべての IP アドレス (またはほぼすべて) のステータスを記録するデータベース テーブルを更新するように設計されています。現在、私はそれをシンプルに保ち、5 つの RIR (Regional Internet Registries) からデータを取得して、それをデータベースに保存しています。
最初は速度は実用的ではありませんでしたが、ログ内の情報量を減らし、SQL 挿入を 1000 のグループにグループ化し、単一のクエリを使用することで、大幅に改善されました。ただし、スクリプトを実行すると、SQL 挿入の速度に非常に大きなばらつきが生じ、その理由を誰かが知っているかどうか疑問に思っていました。
以下は、私が記録した速度の一部です。テストでは、PHP でスクリプトの反復を実行するのにかかる時間と、SQL ステートメントを適用するのにかかる時間を分けました。影響が無視できるほどだったので、以下のリストに PHP の時間を含めませんでした。最大のデータ ブロックでも 1 秒以内です。
テスト速度(挿入されるデータ行の数は一貫して同じまま)
テスト 1 合計 SQL 実行時間: 33 秒
テスト 2 合計 SQL 実行時間: 72 秒
テスト 3 合計 SQL 実行時間: 78 秒
他のテストでは、約 30 秒から約 80 秒の間で変動が続きました。
2 つの質問があります。
1) これらの格差は、世の中のあり方として受け入れるべきですか、それとも理由がありますか?
2) 185000 行の挿入を 1 つのクエリにまとめることに不安を感じました。これらの挿入に 1 つのクエリを使用しないようにする理由はありますか? これほどの量のデータを一度に保存したことはありません。
ありがとうございました
__
データベーステーブルは次のとおりです。
Sorage エンジン - InnoDB
列:
id - 整数、主キー
レジストリ - varchar(7)
コード - varchar(2)
タイプ - varchar(4)
開始 - varchar(15)
値 - 整数
日付 - 日時
ステータス - varchar(10)