STORES Product Blog

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

STORES ネットショップおよび STORES POSレジで使用している MongoDB を 4.4 から 5.0 にバージョンアップしました

こんにちは。リテール開発本部の鈴木雄一郎(u16suzu)です。 最近、私が所属する業務改善Gでは、 STORES ネットショップと STORES POSレジ のバックエンドで使用している MongoDB のバージョンアップを行いました。この記事では、今回の MongoDB のバージョンアップをどのように進めていったかを簡単にご紹介します。

MongoDB のバージョンをあげる背景

弊社では MongoDB Atlas で MongoDB のホスティングをしています。 MongoDB Atlas における 4.4 の End of Life Date (EOL) は 2024年2月とアナウンスされています。*1

この日付を過ぎてしまうと、メンテナンスウィンドウが設定され、 5.0 にバージョンアップされてしまいます。もしもコードベースに影響がある Breaking Change が含まれていた場合、ゼロデイ的に不具合が発生してしまいます。これを防ぐために、事前にバージョンアップをしておく必要があります。

バージョンアップ手順

バージョンアップは以下のような流れで実施しました。

  1. 変更差分を確認する

    • 4.4 から 5.0 にあげる上で Breaking Change がないかを公式のドキュメントの Compatibility Changes in MongoDB 5.0 を読んでチェックしました。今回は STORES のコードの修正対応が必要になるような Breaking Change は特にありませんでした。
  2. MongoDB のバージョンを 5.0 に変更して CI を回す

    • 前回、MongoDB 4.0 から 4.4 にバージョンアップした際には、 Map-Reduce の挙動が変わってしまいコード修正の対応が必要でした。しかし、今回は特に対応が必要になる変更はありませんでした。
  3. QAを実施する

  4. パフォーマンスの劣化がないかをチェックする

    • 定期実行しているバッチの中には、実行時間が長時間になるバッチがいくつか存在します。これらのレイテンシが悪化してしまうとサービスの運営に影響が出てしまいます。 今回は、本番と同等の量のテストデータを用意し、バージョンアップによるパフォーマンスの悪化がないかを調査しました。結果、レイテンシの悪化があるバッチはありませんでした。
  5. バージョンアップを実施する

結果

アップデートした結果、一部のクエリでパフォーマンスの悪化が発生してしまいました。これはインスタンスの再起動により、 Query Plan Cache がリセットされた結果、今まで使われていた Index が使われなくなってしまったものと推測されます。*2 *3

こちらは hint 句を追加して、利用する Index を強制的に指定することで解決しました。

最後に

この記事では、 STORES ネットショップと STORES POSレジ で使っている MongoDB のバージョンアップの様子をご紹介しました。 MongoDB 5.0 の EOL は 2024年10月ですので、次回以降も対応をしていきます。

そんな STORES 株式会社では、現在エンジニアの採用を実施しております。 もしも気になりましたら、お気軽にカジュアル面談を申し込んでみてください。