0

ユーザー プロファイルを作成するためにモバイル アプリで使用される API があります。アプリがタイムアウトしてエラー メッセージが表示されることがあるようですが、サーバーは引き続きプロファイルを作成します。その結果、重複するプロファイルがいくつかあります。

私は、完全な再アーキテクチャを必要としない「クイックフィックス」として、PHP スクリプトの実行時間をアプリのタイムアウト制限に合わせて設定してみることができると考えています。私の質問は、この制限時間に達した場合、自動または指定した「データベースへの変更を元に戻す」スクリプトを何らかの方法で実行できるかということです。

PHP がタイムアウト制限に達している理由 (数分です!) をもっと詳しく調べる必要があることはわかっていますが、サーバーの一部を既に調整しており、ほとんどの場合、実行時間はわずか数ミリ秒です。タイムアウトが発生するケースはごくわずかです。一例として、ユーザーがイスラエルを拠点としている時間を調べています。イスラエルのネットワーク接続は悪いですか? 私が経験している行動を引き起こす可能性のあるものを誰か考えられますか?

4

2 に答える 2

1

仮定: MySQL と INNODB を使用しています。

transactionsの使用を検討する必要があります。INNODB では、次のように autocommit を 0 に設定すると、セッションがタイムアウトした場合にトランザクションがロールバック されます。

SET GLOBAL init_connect='SET autocommit=0';

PDOとのトランザクションの例:

try {
    // First of all, let's begin a transaction
    $db->beginTransaction();

    // A set of queries ; of one fails, an exception should be thrown
    $db->query('first query');
    $db->query('second query');
    $db->query('third query');

    // If we arrive here, it means that no exception was thrown
    // i.e. no query has failed ; and we can commit the transaction
    $db->commit();

} catch (Exception $e) {
    // An exception has been thrown
    // We must rollback the transaction
    $db->rollback();
}
于 2013-01-25T10:40:18.237 に答える
1

1 つのアプローチは、データベース トランザクションを使用することです。私は PostgreSQL でこれを経験していますが、MySql でもそれができると確信しています。すべてをトランザクションにラップします。次に、失敗を検出したときにトランザクションをキャンセルし、トランザクションに属するすべてのものをロールバックできます。

次に、致命的なエラーであるため、スクリプトのタイムアウトをキャッチすることはできませんが、コミットされない場合、トランザクションは自動的にロールバック (キャンセル) されるはずなので、設定する必要があります...

多分それはあなたのために働くことができますか?

参考文献:

于 2013-01-25T10:38:24.293 に答える