データベースの自動読み取り/書き込みを毎秒実行
質問
自動入札システムを備えたオークション サイトを作成しています。このシステムにより、人々はその場にいなくても入札を行うことができます。
私の質問は、そのようなシステムをどのように実装するかです。php ファイルを作成し、すべての準備が整いました。毎秒更新される html ページを作成しました。それは機能しますが、より良い解決策があるかどうか疑問に思っています。
私が試した 2 番目のオプションは、Web ページを毎秒開く Java アプリケーションを作成することでした。これにより、メモリ/CPU が「大量に」消費されます。また、どこかでメモリリークがあると思います。
私はこのアプリケーションを centOS と Plesk を備えた専用の Linux サーバーで実行しているので、代替手段はたくさんあると思います。
例えば:
PHP ファイルを毎分実行する cron ジョブ。PHP ファイルはスリープを使用して 1 分間ループします。
1 秒でループする 1 つの php ファイルがスリープします。
1 つの cron ジョブが実行され、1 秒後に別の cron ジョブがスケジュールされます。
MySQL スケジューラですが、実装方法がわかりません。また、他の書き込みのためにデータベースをロックすると聞きました。
cli、perl、python スクリプトについても聞きましたが、どれも詳しくありません。
これらのオプションに詳しい人がこの件について私に光を当ててくれませんか。速度とメモリ使用量の点で最適なソリューションを探しています。
誰かが別の代替ソリューションを持っている場合は、それも喜んで聞きます。
解決
1 秒ごとは非常に短い間隔であるため、cron ジョブはオプションではありません。また、パフォーマンスが重要であるため、CLI 用に作成されたスクリプトだけで実行できるため、「Web ページ」をそのまま使用しないことを強くお勧めします。
私がやることは次のとおりです:
- 誰かがAuto-Bidをアクティブにするときは、それをデータベースに登録する必要があります。
- その時点で実行されるエントリのデータベースを投票するデーモンを作成します。
誰であっても、あなたはそうである必要があります とても 各サイクルの後にスクリプトをスリープ状態にしないように注意してください。そうしないと、データベースがダウンします。
余談ですが、本当に毎秒実行する必要があるのでしょうか?私の考えでは、自動入札はイベントによってトリガーされます。残り 10 秒以内に誰かがあなたより多く入札しています。これは、実装するのがはるかに簡単で、リソースの消費も少ないように思えます (そして、そこでデーモンを使用して自動入札イベントをリッスンすることもできますが、それは別の話です :)
他のヒント
与えられた時間間隔で問題のPHPスクリプトを実行するcronジョブを作成します。あなたはhref="http://php.net/manual/en/features.commandline.php"は、それが道に書かれている場合は、コマンドラインからPHPスクリプトを実行noreferrer"> rel="nofollow $_GET、$_POST
と類似へのアクセスを必要としない)。
さて、あなたは基本的に、データがデータベースに挿入された後、それを実現するために何かをトリガすることを意味し、「イベントベースのパブリッシング」のいくつかの並べ替えを試みることができます。
ポイントのケースは、MySQLは他の誰でもが、その入札後、高い最高入札額を置いた場合、新規入札のためのINSERT ON、あなたがチェックし、単純なPHPスクリプトをトリガーするか。
彼らがした場合、新規落札金額と現在のトップ入札者を更新します。
のポイントは、あなたが本当に周りを実行し、このビジネス上の問題を把握するためにスケジュールされたジョブを行うべきではないということです。私はあなたがトリガやイベントを使用することをお勧めします。
、あなたは毎分(カール curlコマンドを呼び出すにcronをスケジュールすることができますhttp://your/page.phpする)。唯一の注意点は、それが外部から呼び出された場合、あなたはそれが問題である必要があり、あなたのページを保護する必要があるかもしれないということです。