MongoDbの現在の構成は次のとおりです。
- 1 つのプライマリ ( A )、2 つのセカンダリ ( BおよびC )、1 つのレプリカ セットのすべての部分
- プライマリへの挿入は write-concern で行われます: 多数派
- レプリカ セットからの読み取り時に読み取り設定が「最も近い」に設定されている
シナリオ:
- 挿入がトリガーされます。これは、レプリカ セット メンバーの大部分に伝播された後にのみ成功することを意味します。
- 書き込み操作が戻るまで、アプリケーションはプライマリから読み取ることができません (参照)
- 書き込みの懸念が「多数」に設定されているため、書き込み操作は、少なくとも 1 つのセカンダリ ( B ) インスタンスに伝播した後にのみ返されます。この場合、3 つのメンバーが設定されています。
- これは、複製しているため、セカンダリ ( B ) も読み取り用にロックされていることを意味します (これによると)
問題は、アプリケーションが最も近いインスタンスから読み取るように設定されているため、最も近いインスタンスがもう一方のセカンダリ ( C ) であるとしましょう。他の 2 つのインスタンスで書き込み操作がまだ進行中に読み取り要求が送信された場合、読み取りが許可されるかブロックされるか。許可される場合、どうすれば防止できますか?