2016-04-16 11 views
0

一部の電子商取引サイトでは、アイテムの数量が1つしか残っていません。アイテムが購入された場合、マスタ(書き込みに使用される)dbは量0で更新されます。マスター - スレーブの同期には時間差があるため、スレーブ(読み取りに使用)dbは2番目顧客は同じ製品に関する情報を要求します。彼は依然として失効したデータ、すなわち利用可能な1つのデータを見ることができる。いくつかの質問があります:マスタとスレーブのデータベース

1)お客様の関連するすべてのクエリをマスターデータベースに更新させることをお勧めしますか?

2)そうでなければ、マスターとスレーブの同期に間違いなくタイムラグが含まれますが、どのようにして顧客の利便性を向上できますか?

答えて

0

簡単な例から始めましょう:単一のマスターデータベースのみ。

我々は両方とも製品を検索します、我々は両方とも最後のアイテムを参照してください。あなたはそれを購入する。私はあなたがしているよりも10秒以上それを考え、購入をクリックします。遅すぎる!だから私は "おっと、その商品はもう在庫切れです"と言っている間違いをします。

マスター/スレーブでは、これはまったく同じ経験ですが、そのためのウィンドウはちょっと大きめです。だから、本当にあなたが問題を防ぐためにできることは何もありません。あなたは、すべての顧客が読み込みクエリをしてマスターする必要はありません。あなたが望むものは、マスターを通じて書き込みを行うことです。古い状態(oopsでは購入できない)のため書き込みが失敗した場合は、顧客にお詫び申し上げます。

アイテムを表示するためのUIでは、ユーザーに警告することができるアイテムが1つだけ残っているため、このエラーが発生すると予想され、発生したときにはあまり怒られません。

+0

私はこれをどこかで読んでいます - この問題に取り組むもう一つの方法は、読み込みを重要な読み込みと重要でない読み込みに分けることです。最後のx分で更新された行に関連するすべての読み取りは、マスター・データベースにヒットする必要があります。そうでなければ、スレーブ・データベースは十分です。しかし、どのようなリクエストが来た場合でも、それが重要な読み取りであるかどうかをどのように判断できますか? –

関連する問題