この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、菊池です。
MongoDB使いのみなさん、ニュースです。
少し前になりますが、現在開発中であるMongoDBの次期メジャーバージョン4.0で、複数ドキュメントのACIDトランザクションがサポートされることがアナウンスされました。
新機能ロードマップ
上記のブログの中で、開発中機能が紹介されています。
今年の夏にリリースを予定されている、MongoDB 4.0 ではレプリカセット内でのトランザクションがサポートされるようです。他にも、Replica set point-in-time-readなんかも気になります。
シャードをまたがるトランザクションは、4.0のさらに次の、MongoDB 4.2でのサポートとなるようです。
サンプルコード
公式ドキュメントでは、先行して複数ドキュメントのトランザクションの、サンプルコードが紹介されています。
Python
client = pymongo.MongoClient(...)
db = client.test
s = client.start_session()
s.start_transaction()
try:
db.inventory.update_one({"sku": "abc123"}, {"$inc": {"qty": -100}}, session=s)
db.shipment.insert_one({"sku": "abc123", "qty": 100}, session=s)
except Exception:
s.abort_transaction()
else:
s.commit_transaction()
s.end_session()
inventory
コレクションの更新と、shipment
コレクションへのインサートを1つのトランザクションで実行しています。これにより、2つの書き込み処理が、両方成功するか、両方とも実行されないかのいずれかになります。
トランザクションの実行イメージがよくわかりますね。
現在ベータプログラムを受付中です
MongoDB 4.0は、現在ベータプログラムを受付しています。希望する場合はこちらからサインアップしましょう。私も申し込みをしましたので、検証次第、レポートしていきたいと思います。
複数ドキュメントのトランザクションをサポートした、MongoDB 4.0は、今年の夏にリリース予定です!