MongoDB 到 Postgres

这是什么?

在公司面试一个职位时,我被要求回答以下问题:请描述您解决过的最困难的问题。总的来说,我解决的最困难的问题发生在我为 eBay 工作期间,我在 2023 年将 eBay 的一个大型内部项目从使用 MongoDB 迁移到使用 Postgres。然而,这个问题让我思考我如何解决这个困难的问题,并让我反思我的开发者之路。因此,我写了一个非常详细和彻底的回答,并想在我的网站上分享我的回答。

问题是什么?

请描述您解决过的最困难的问题?请在少于 4 段的文字中回复并告诉我们:

  1. 您做了什么
  2. 是什么让它困难
  3. 您从这次经历中学到了什么
  4. 您因此如何成长

我的回答是什么?

1 - 您做了什么

目前,在我的职业生涯中,最困难的问题发生在我目前在 eBay 的工作中。现在在 eBay,我通过 Hitachi Vantara 合同工作,开发并维护一个内部工具,称为存储管理系统(Storage Management System)或 STMS。STMS 是 eBay 的服务与存储基础设施(SSI)团队用于监控和管理 eBay 数据中心中设备的工具。STMS 使工程师能够监控众多阵列、交换机、主机、磁盘组、集群和数据库的指标,并处理交换机和阵列的警报,轻松让工程师完成诸如主机分配等高级任务。STMS 每分钟摄取超过 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 - 您从这次经历中学到了什么

STMS 从 MongoDB 到 Postgres 的代码迁移在没有停机的情况下成功完成,并且几乎保留了所有功能和特性。这需要大量的研究、学习、测试和故障排除。我重构了我们的数据结构,使其更有效地与关系型数据库配合,并开发了新的包来替代那些不兼容 Postgres 的依赖。总体而言,迁移过程顺利且没有出现任何真正的缺陷,超出了我的预期。在此过程中,我学到了很多。技术层面上,我对 Postgres、SQL、解析树、ORM、Sequelize、Prisma、查询构建器、等价性检查、主备数据库设置以及与数据库相关的单元测试有了更深入的了解。根本上,我学会了如何更有效地将复杂问题拆解为更小的部分,并为这些部分实现有效的解决方案。此外,我学会了如何成为一名领导者并将此项目推进至完成,尽管面临许多限制、挫折和未知因素。

4 - 您因此如何成长

我在本科期间开始从事机器人领域的工作,但在获得 eBay 的工作后转向了网页开发,进入了一个我之前没有经验的领域。这一转变为我的职业生涯奠定了不断学习和适应的基础。将 STMS 从 MongoDB 迁移到 Postgres 的挑战是我职业生涯中的一次重要飞跃,对我的专业成长贡献巨大。这不仅仅是加深了我对数据库的理解或提升了解决问题的能力。这个项目将我推向了新领域,需要精细的规划并承诺零停机。尽管之前没有大型数据库迁移的经验,我在领导迁移过程中学会了清晰沟通、团队合作以及将复杂挑战拆解为可管理的部分的价值。这段经历不仅扩展了我的技术技能,也提升了我的自信,使我更倾向于追求更宏大的目标和项目。这个职业里程碑不仅展示了我作为开发者和领导者的成长,也展示了我作为问题解决者的能力,表明拥抱未知并取得成功是个人和职业发展的关键。

结论是什么?

我的回答使我进入了公司面试流程的第二阶段,让我能够与团队的一位开发者进行愉快的交谈,这相当不错。但主要是,这次任务让我反思了我在 eBay 工作期间在职业生涯中解决的最具挑战性的技术问题。它让我思考自己作为开发者/工程师的成长,培养了新技能,并增强了我在适应和解决复杂问题方面的信心。