おおよそ次のようなPHPとMySQLを使用して新しいプロジェクトを開始しています。
毎分、さまざまなユーザーの API から To Do トランザクションのリストを取得しています。
例:
user1 send $1 to user2
userx send $2 to usera
userw send $0.50 to user2
etc..
user1 が $1 を user2 に送りたいとします。成功するか、資金が不足しているか、ユーザーのスペルが間違っているために失敗するかの 2 つの可能性があります。失敗した場合は、ユーザーにメッセージを送信します。
私は今、いくつかの選択肢に直面しています:
オプション1
処理が必要なトランザクションを含むデータベース テーブルを作成し、それらを毎分処理する cronjob を使用します。ここでのリスクは、スクリプトがエラーまたはタイムアウトに対して実行される可能性があり、他のトランザクションがデータベース テーブルで進行中と表示される可能性があることです。そのため、タイムスタンプと照合するための 2 つ目のスクリプトが必要になります。
オプション 2
トランザクションを受け取った後にトランザクションごとに呼び出され、応答を返す API または関数を作成します。そこから別の API または関数を呼び出して、その応答を処理するか、次のトランザクションに進むことができます。ただし、スクリプトの実行が停止した場合にそれらを失う危険がないため、それらをデータベース テーブルに配置する必要があります。したがって、次のように機能します。すべてのトランザクションをデータベーステーブルに入れます-トランザクションを開始します-トランザクションが終了したらテーブルから削除します-トランザクション2を開始します.
トランザクションのリストがどれくらい長くなるかわからないため、どちらのオプションにも欠陥があります。長い場合、PHP を長時間実行するのは最適ではありません。set timeout をゼロに設定するのは危険です。PHPで拡張できるソリューションを作成しようとしています。そこで、オプション 3 を考えていました。
オプション 3 (最適なソリューション?)
API を使用して 10 件のトランザクションを返します。
データベースで、スクリプトに送信されたことを示すフラグと、送信された時刻を示すタイムスタンプを設定します
PHP スクリプトは API から 10 個のトランザクションを取得します - 10 個のトランザクションを処理します。
トランザクションが完了したら、このテーブルから削除し、完了したトランザクション テーブルにコピーします。
timesent が X 分 (10 トランザクションの実行時間の上限に基づく) よりも大きい場合、cronjob スクリプトで 3 分ごとにチェックします。大きい場合は、送信しないように設定して、再度送信できるようにします。
ご覧のとおり、これに関する私の思考プロセス全体を書き留めて、意見を求めています。私が見逃したものがあるはずです。また、これらは実際の金融取引ではないことに注意してください。これは、明確にするために私が使用できる最良のメタフォーです。