• ベストアンサー

MongoDBのデータ更新はDBを排他制御?

WebサイトのDBとしてMongoDBを使ってみようか迷っています。 「MongoDBは1レコードを更新する際、DB単位でロックする。」といった表現がちらほらネット上で散見されるため、ユーザによる更新が頻繁に発生するようなWEBサイト(SNS)でのMongoDBの使用をためらっています。 で、「MongoDBは1レコードを更新する際、DB単位でロックする。」とは本当でしょうか? (「コレクション単位でロック」などの表現もみられるのですが、どっちにしろ、 頻繁にロックで待機がかかると実用性が乏しくなってしまう気がしています。) よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

自分はMongoDBを使ったことはありませんが、MongoDBのマニュアルにはそういうことが書いてあるように見えます。 http://docs.mongodb.org/manual/faq/concurrency/ http://docs.mongodb.org/manual/faq/concurrency/#how-granular-are-locks-in-mongodb によれば、ほとんどの操作に対してdatabase単位でロックを行なっているようです。 read/write lockなのでwrite lockが必要なケースが少ないと問題ないでしょうが、ユーザーによる更新が多発する場合には大きな問題になりそうです。 http://docs.mongodb.org/manual/faq/concurrency/#which-operations-lock-the-database 更新の際には当然、write lockが行われるようです。 work aroundとしてはすべてのユーザーを単一のdatabaseに入れるのではなく、ユーザーIDごとに散らして入れておくという方法がありそうですが。複数のユーザーに関わる操作をされた場合には複数のdatabaseのロックを取得しないといけなくなります。

pokapoka1980
質問者

お礼

柔軟性の高いフィールド設定など、便利そうだったのですが、 多数のユーザが使用するサイトでは、実用性が薄そうですね・・。 ありがとうございました。

関連するQ&A