すべてのカテゴリ » Sooda!について

質問

終了

最近は二重投稿の話題が何度か出ていますが、そもそもどうして二重投稿が起きてしまうのでしょうか?
サーバが混雑していると発生しやすいみたいですが、それはどうしてでしょう?

  • 質問者:匿名ちゃん
  • 質問日時:2009-06-30 13:22:10
  • 0

Sooda!で回答を投稿した場合、処理の流れは以下の様になっていると思われます。
 1.PCで回答ボタンを押す。
 2.回答内容がサーバに送信される。
 3.受け取った回答内容から、回答者のIDと質問のIDを取得。
 4.回答者IDと質問IDをもとに、既に回答していないかチェックを行う。
 5.回答していない場合、回答内容の登録処理を行う。
 6.回答者IDと質問IDをもとに、回答済みとして登録する。
 7.PCに投稿完了ページを送信する。
 8.PCに投稿完了ページが表示される。

ここで問題になるのは、4番〜6番の処理です。

仮にほぼ同じタイミングで、同じユーザから同じ質問に対して複数の投稿があったとします。
1つ目の回答が5番の処理まで行われて、6番の処理前まで来たとします。
この時、2つ目の回答の4番の処理が先に行われたらどうでしょうか。
まだ回答済みとして登録されていないので、このユーザは未回答だと判断され5番の処理に進みます。
その後、両回答とも処理を最後まで行います。
この結果、二重投稿となります。

同じタイミングで複数の投稿を行う事が難しいため、通常は二重投稿になりません。
サーバが混雑すると複数の投稿を送信しやすくなるため、二重投稿が起きやすくなります。

これを防ぐために「クライアントの画面更新を素早くする」というのは確かに効果はありますが、根本的な改善策にはなりません。
4番〜6番の処理順序を見直す必要があります。
ですが、これを見直すと回答登録で失敗した場合の処理も見直す必要があるので、かなり面倒な作業になると思います。

  • 回答者:もみじ (質問から9時間後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

二重投稿になってしまうメカニズムがよくわかりました。
回答ありがとうございました。

並び替え:

2度押しが原因ですよ。

  • 回答者:sooda (質問から1日後)
  • 0
この回答の満足度
  
回答ありがとうございました。
お礼コメント

2度押しは根本的な原因ではありません。
コピペ回答しかしない人は1点です。

「確認する」ボタンの2回押しが原因です。

【サーバーが込んでいる時の予測現象】
実際ボタン押下後にリフレッシュ処理を走らせていますが、そのリフレッシュ処理が走る前に、ユーザーが、リフレッシュ(状態変化)が起きる前にボタンがあるために、2回目のボタン押下をします。

そうすると、2回同じ処理がSOODAシステムに送信されてしまうので、同じ投稿内容が2つInsert(挿入)される。

WEBアプリの限界ですね。私も以前、社内用に開発したDBシステムで同じ現象が出て、ボタン押下後に、ボタンをイネーブル(押せない)状態にする割り切りの開発をしたことがあります。

以上です。

===補足===
そのとおりです。

ユーザーから見ると、素早く更新(リフレッシュ)がかかれば良い。これができれば、2重投稿が避けられると思います。

  • 回答者:コゼニゲバ (質問から6時間後)
  • 0
この回答の満足度
  
参考になり、満足しました。回答ありがとうございました。
お礼コメント

回答ありがとうございます。

これも、
 1回目の回答ボタンで投稿が完了しているのに、画面上に反映されない。
 画面に反映されないから、回答ボタンが押せてしまう。
 そこで回答ボタンを押すと、2個目の回答が投稿されてしまう。
ということでいいですか?

もし二重投稿を防ぐなら、投稿結果がすぐに画面に反映されれば良い、という事でしょうか?

質問者さんのおっしゃる通り、サーバーが混み合っていると、接続が不安定になると起こりやすいようです。


回答ボタンを押す

接続が不安定で「回答が完了しました」が表示されない為に、
回答者は、反映されていないと思う。

画面推移が行われていないので、投稿フォームは残ったまま。
再度、回答ボタンを押す

今度は正常に「回答が完了しました」が表示される。

実際は両方反映されていたようで、2重投稿になる。


以上から、回答の「OK」ボタンを押した時に
回答自体は反映されていることがわかります。

回答は反映されているのに、「回答が完了しました」が表示されない(ネット接続が不安定な為、回答のプロセスが最後まで正常に動いていない為に、
回答者は反映されていないと思い、再度回答ボタンを押していることから起きている現象だと思います。

Sooda!に限らず、どこのサイトでも、接続状況が不安定な時は起こり得ることですね。

===補足===
「1回目の回答ボタンで投稿が完了しているのに…」の解釈で合っています。

サーバーが不安定になった時に、投稿フォームが残ってしまい、再度押せてしまうのが問題なので、
投稿結果がすぐに反映されて、自分の書き込みを見ることで確認出来るのもいいですけど、

そもそも正常に作動すれば、一つの質問に書ける回答も一つですよね。
本来ならば、同じ登録者が一つの質問に2つの回答を書くことは有り得ない。

同じ登録者であれば、反映された最初の書き込みのみが有効になれば良い訳で、
2回目以降は無効になる…というシステムにすればよいと思います。

  • 回答者:匿名 (質問から4時間後)
  • 0
この回答の満足度
  
参考になり、満足しました。回答ありがとうございました。
お礼コメント

回答ありがとうございます。

まとめると、
 1回目の回答ボタンで投稿が完了しているのに、画面上に反映されない。
 画面に反映されないから、回答ボタンが押せてしまう。
 そこで回答ボタンを押すと、2個目の回答が投稿されてしまう。
ということでいいですか?

もし二重投稿を防ぐなら、投稿結果がすぐに画面に反映されれば良い、という事でしょうか?

ただのシステム上のエラーだと思います。
サイト側が、それに気づいているのか、それとも知らないのか、現在システムを修理しているかどうも不明です。
混乱するので、早くなんとかしてほしいですね。

  • 回答者:匿名 (質問から3時間後)
  • 0
この回答の満足度
  
やや参考になりました。回答ありがとうございました。
お礼コメント

システム上のエラーが起きるからという回答が欲しいわけではありません。
どういったプロセスで二重投稿になるのかが知りたいのです。

システムエラーが起きた時に、どうしてそれが二重投稿に繋がるのでしょう?
エラーが起きた場合、正常時とは「どこが違うために発生するのか」を教えてください。

Sooda!からのお知らせ

一覧を見る