質問: 皆様いつもお世話になっております。 Node.js + MongoDBの組み合わせでふと思ったのです。 RDBMSですとデッドロックに気をつけないといけないのは分かったのですが、MongoDBのようなNoSQLではデッドロックは起きるのでしょうか?英語でも調べたのですが分からなかったのです。 お詳しい方、どうかご教授のほどよろしくお願いします。
回答: デッドロックは、あるレコードに排他制御で握ったままで他のレコードをアクセスすることが原因で起こります。 トランザクション1が、レコードAを握ったまま、レコードBをアクセスしようとしたときに、すでにレコードBを握っているトランザクション2が、レコードAをアクセスしようとしたときにデッドロックが起こります。つまり、どちらも2つ目のレコードがアクセス出来るようになるまで無限に待ち続けるということです(実際には無限に待つのでなくDBMSが検知するはずですが)。 MongoDBだと、トランザクション制御の機能が無いので、「レコードを排他で握ったまま」というのが無いため、デッドロックは起こらないということでしょう。 つまり、RDBMSかNoSQLかどうかは関係なくて、トランザクション処理をするかどうかに依ります。 RDBMSでも、トランザクション機能を使わない事が出来るRDBMSで、実際にトランザクション制御を行わないとデッドロックは起こりません。