1

私はこのプロジェクト オークション ポータルを持っています。問題は、ユーザーが入札できない場合があることです。または、入札のリクエストが登録されるまでに 2 ~ 3 秒かかることがあります入札した。

何が起こっているかを確認するためにログを追加しました。ここに私が見つけたものがあります:

Bid insert date        |    Auction close date
2012-06-25 14:40:57         2012-06-25 14:40:54

ご覧のとおり、オークションはすでに終了していましたが、入札は 3 秒遅れて処理されました。念のために言っておきますが、オークションがすでに終了している場合、ユーザーは入札できません。したがって、オークションが終了する前にリクエストが行われたことは確かです。

これは毎日 1 つのオークションで発生し、何がこの問題を引き起こすのかわかりません。PHPとMySQLを使用しています。

4

3 に答える 3

1

考えられる原因は、ユーザーが「入札」ボタンを含むページをロードし、オークションが終了し、ボタンがまだそこにあり、それに応じてアクションが実行されることです。挿入の直前にオークションが終了しているかどうかを検証する場合、これは決して起こらないはずです。SELECT と INSERT の間の時間は 0.1 秒を超えてはなりません。最後の入札を追加する前に、オークションのステータスを確認していないと思います。

于 2012-07-10T06:59:30.540 に答える
1

2~3秒?

入札リクエストの時点で、いくつのクエリを実行していますか? 私は想像します:

1) ユーザーはログインしていますか? 2) 入札できるアカウントはありますか?3) オークションはまだ開催されていますか? 4) 入札を投稿する

ひどくクエリを作成しない限り、これら 4 つのクエリの実行に 1 秒以上かかるとは思いません。どの MySQL DB レイヤーを使用していますか? コードが可能な限り合理化されていることを確認しましたか? つまり、データベースを開いている頻度などです。

彼らが入札し、入札が処理される前にオークションが終了した場合、タフクッキー. あなたは勝っていません。同じことがeBayで時々起こり、それはただ難しい. 問題が、入札が遅れてもシステムが勝つことを許しているということである場合は、その点でコードを再検討する必要があります。最後の入札試行では、入札が保存される前に、オークションがまだ実行されているかどうかを確認する必要があります。これには 1 秒もかからないはずです。

おそらく、テーブルのインデックスも確認する必要があります。少なすぎるとデータ検索が遅くなり、多すぎるとデータ挿入速度に影響します。

単純なインデックスの間違いから危険なクエリ/ループなどに至るまで、さまざまな問題が発生する可能性があります。

于 2012-07-10T08:21:43.197 に答える
0

正確なクロージング タイムスタンプとは一致しませんが、(クロージング時間 - turnaround_time) と比較してください。

締め切り時刻が 14:00:00 で、リクエストのターンアラウンド タイムが 10 秒であるとします。その後、リクエストが 13:59:50 より前に行われた場合のみ考慮されます。

于 2012-07-10T06:51:45.200 に答える