MongoDB 4.0 では複数ドキュメントの ACID トランザクションがサポートされます

この記事は公開されてから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は、今年の夏にリリース予定です!