MongoDBからPostgresへ
これは何についてですか?
ある企業のポジションの面接中に、次の質問に答えるよう求められました:『これまでに解決した最も難しい問題を説明してください』。要約すると、私が解決した最も困難な問題は、2023年にeBayで働いていたときに、eBayの大規模な内部プロジェクトの一つをMongoDBからPostgresへ移行したことです。しかし、この質問は私にその困難な問題をどのように解決したかを考えさせ、開発者としての旅を振り返る機会となりました。そのため、私はその質問に対して非常に詳細かつ徹底的な回答を書き、ウェブサイトで共有したいと思いました。
質問は何でしたか?
これまでに解決した最も難しい問題を説明してください。4段落未満で回答し、以下を教えてください:
- あなたがしたこと
- 難しかった点
- この経験から学んだこと
- その結果としてどのように成長したか
私の回答は何でしたか?
1 - あなたがしたこと
現在、私のキャリアにおいて最も困難だった問題は、eBayでの現在のポジションでの業務中に発生しました。現在、Hitachi Vantaraを通じてeBayと契約しており、Storage Management System(STMS)という内部ツールの開発と保守を担当しています。STMSは、eBayのService & Storage Infrastructure(SSI)チームがeBayのデータセンター全体のデバイスを監視・管理するために使用するツールです。エンジニアはSTMSを使って多数のアレイ、スイッチ、ホスト、ディスクグループ、クラスター、データベースのメトリクスを監視できます。また、スイッチやアレイのアラート処理や、ホスト割り当てなどの高度なタスクを容易に実行できるようになっています。STMSは1分間に150万件以上のメトリクスを取り込み、eBayのデータセンターにある数十〜数百のアレイ、スイッチ、ホスト、ディスクグループ、クラスターをカバーしています。これはSSIチームがeBayのストレージインフラを監視・管理するための重要なツールであり、eBayのコアサービスとビジネスモデルにとって不可欠です。以上を踏まえると、eBayで働いていた期間に解決しなければならなかった最も難しい問題は、STMSをMongoDBデータベースからPostgresデータベースへ移行することでした。
2 - 難しかった点
この問題が難しかった理由は、MongoDBとPostgresが根本的に異なるデータベースであることです。MongoDBはドキュメント指向データベース(NoSQL)で、データはコレクション内のJSONとして保存されます(書類キャビネットの中の文書のように)。一方、Postgresはリレーショナルデータベース(SQL)で、データはテーブルの行として保存されます(スプレッドシートのように)。さらに、STMSのバックエンド全体はJSONデータの処理と管理を前提に構築されており、データベース操作にはMongoDB専用のパッケージのみが使用されていました。また、この移行ではSTMSが内部ツールとして極めて重要であるため、ダウンタイムが許されず、ほぼすべての機能が継続して動作しなければなりませんでした。移行全体は数か月以内に完了させる必要があり、ダウンタイムゼロ、かつ実行計画も明確ではありませんでした。さらに、事前にPostgresの経験がほとんどなく、同僚全員と同様に、NoSQLからSQLデータベースへの大規模レガシーコードベースの移行経験もありませんでした。
3 - この経験から学んだこと
MongoDBからPostgresへのSTMSコード移行は、ほぼすべての機能と機能性を維持しながらダウンタイムなしで成功裏に完了しました。これには広範な調査、学習、テスト、トラブルシューティングが必要でした。リレーショナルデータベースでより効果的に動作するようにデータ構造を再設計し、Postgresと統合できなかった既存のパッケージに代わる新しいパッケージを開発しました。全体として、移行はシームレスに進み、実際の欠陥がほとんどなく、期待を上回る結果となりました。このプロセスを通じて多くを学びました。技術的には、Postgres、SQL、構文木、ORM、Sequelize、Prisma、クエリビルダー、等価性チェック、プライマリ-スタンバイデータベース構成、データベース関連のユニットテストについての理解が深まりました。根本的には、複雑な問題をより効果的に小さな部分に分解し、それらの部分に対して有効な解決策を実装する方法を学びました。さらに、多くの制約や挫折、未知の要素に直面しながらも、このプロジェクトを最後まで導くリーダーシップを身につけました。
4 - その結果としてどのように成長したか
大学時代はロボティクスでキャリアをスタートさせましたが、eBayでの仕事を得たことでウェブ開発へと転向し、全く経験のない分野に足を踏み入れました。この転換は、常に学び続け適応することを基盤としたキャリアの土台となりました。STMSをMongoDBからPostgresへ移行するという課題は、私のキャリアにおける大きな飛躍であり、プロとしての成長に大きく寄与しました。単にデータベースの理解を深めたり問題解決能力を高めたりするだけではありませんでした。このプロジェクトは新たな領域へと私を押し込み、綿密な計画とダウンタイムゼロへのコミットが求められました。大規模なデータベース移行の経験がない状態で移行をリードする中で、明確なコミュニケーション、チームワーク、そして複雑な課題を管理しやすい部分に分解することの重要性を学びました。この経験は技術スキルを広げただけでなく、自信も高め、より野心的な目標やプロジェクトに向かう原動力となりました。このキャリアのマイルストーンは、開発者・リーダーとしてだけでなく、問題解決者としての成長を示し、未知を受け入れ成功することが個人・プロフェッショナルの成長の鍵であることを証明しました。
結論は何ですか?
私の回答により、会社の面接プロセスの第2段階へ進むことができ、チームの開発者の一人と楽しい会話を交わす機会が得られました。これはとても良い経験でした。しかし主に、この課題はeBayでの在籍中に解決した最も挑戦的な技術的問題を振り返る機会を与えてくれました。これにより、開発者/エンジニアとしての成長を考え、新たなスキルを身につけ、複雑な問題に適応し解決する自信を高めることができました。