ITPub博客

首页 > 数据库 > NoSQL > MongoDB用户,我曾缺失的10项技能

MongoDB用户,我曾缺失的10项技能

NoSQL 作者:ITPUB社群 时间:1970-01-01 08:33:45 0 删除 编辑

当我第一次开始使用 MongoDB 时,我除了“安装它,然后祈祷一切顺利”之外,没有任何计划。我读到过关于它有多灵活的介绍,而且感觉所有开发者都对它赞不绝口,所以我想不妨试一试。我把它启动起来,构建了我的第一个应用程序,并让一个功能正常运行了。

但我感觉好像少了点什么。

它用起来感觉很笨重。我的查询比预期要长,性能也不太好;我有一种感觉,我是在和数据库较劲,而不是与它协作。在做了几个这样的项目之后,我开始怀疑也许 MongoDB 并不适合我。

现在回头看,我可以说问题不在于 MongoDB,而是在键盘和椅子之间。是我自己。我沿用了多年使用关系型数据库的习惯,期望同样的规则也适用。

如果我刚开始时 MongoDB 的 Skill Badges 就已经存在,我想我的学习曲线会短得多。我不得不通过艰难的方式学到了很多教训,但这些新的徽章涵盖了我曾经不得不慢慢拼凑起来的技能。与其假装我从第一天就掌握了它,不如诚实地讲述我是如何学习 MongoDB 的、途中是什么让我绊倒,以及这些 Skill Badges 本来会如何帮助我。

学习以 MongoDB 的方式建模

我搞错的第一件事是数据建模。我构建模式的方式就像我还在使用 SQL 一样——每个实体都在自己的集合中,总是引用而不是嵌入,并且绝对没有数据重复。这让人感觉安全,因为它是熟悉的。

然后我遇到了第一个复杂查询。它需要来自多个集合的数据,突然间,我发现自己写了一系列查询,并在代码中将它们拼接在一起。它能工作,但过程很混乱。

当我发现嵌入时,感觉就像找到了作弊码。我可以把相关数据放在一个文档中,一次性查询它,并获得更好的性能。

就在那时,我犯了第二个错误。我开始把所有东西都嵌入。

起初,这似乎没问题。然而,我的文档变得巨大,更新变得更慢,而且我以造成一致性问题的重复数据方式复制数据。就在那时,我了解了像 Extended References 这样的模式,更一般地说,了解了如何根据访问模式和更新频率在嵌入和引用之间进行选择。

后来,我遇到了更专门的需求,例如预计算数据、将大型数据集的一个子集嵌入到父文档中,以及处理模式版本控制。那时,我是通过反复试验来学习这些模式的。现在,它们已经涵盖在 Relational to Document Model、Schema Design Patterns 和 Advanced Schema Patterns 等徽章中。

修复我以为的“只是慢查询”

即使我在建模方面有所进步,性能问题仍然不断出现。有一个集合随着数据增长开始变慢,我想,“我知道该怎么办!加几个索引就行了。”

我在所有认为可能有帮助的地方都加了索引。但没有任何改善。

事实证明,索引只有在与查询模式匹配时才有帮助。字段的顺序很重要,是否覆盖查询形态也会影响性能。最重要的是,仅仅因为你能添加索引,并不意味着你一开始就应该添加它。

对我来说最大的转变是学会阅读 explain() 计划,了解 MongoDB 实际是如何执行我的查询的。一旦我开始让索引与查询匹配,性能就从“还行”变成了“飞快”。

大约在同一时间,我不再在应用代码中做所有的数据转换。以前,我会拉取原始数据并循环遍历来过滤、分组和计算。这很慢、冗长,而且容易出错。学习聚合框架彻底改变了这一点。我可以直接在数据库中处理过滤和分组,这让我的代码更简洁,查询也更快。

我在创建索引时有很多猜测,但新的 Indexing Design Fundamentals 现在涵盖了这些内容。在查询和分析数据方面,Fundamentals of Data Transformation 可以帮到你。如果我在刚开始时就有这两项技能,就能省下大量浪费在试错上的时间。

从“能运行”到“可靠运行”

早期,我的监控方法很简单:等出问题了,再找出原因。如果性能下降,我就在日志里翻找。如果服务器停止响应,我就关掉再打开,然后祈祷一切正常。

这很有压力,也意味着我总是在被动应对,而不是预防问题。

当我学会正确使用 MongoDB 的监控工具后,情况改变了。我可以跟踪延迟、复制延迟和内存使用情况。我为异常查询模式设置了告警。我开始在小问题变成故障之前就发现它们。

性能故障排查也变得更加有条理。我不再猜测,而是进行测量。分解查询、检查索引使用情况,并并排查看服务器指标。修复变得更快、更精确。

可靠性是我最后认真对待的一块。我曾以为一个能正常运行的集群就是一个可靠的集群。但可靠性还意味着要了解节点故障时会发生什么、故障转移启动的速度有多快,以及你的恢复计划在实践中是否真正有效。

这些内容你现在可以在 Monitoring Tooling、Performance Tools and Techniques 和 Cluster Reliability 技能徽章中学习。如果你正在考虑部署和维护 MongoDB 集群,这些技能将教你所需的知识,让你的部署更具韧性。

对下一步充满好奇

一旦我的集群稳定下来,我就不再疲于救火,心态也随之改变。当你信任自己的数据模型、索引、聚合和运维时,你就能放松下来。然后你可以把时间花在接下来要做的事情上,而不是修复已经上线的生产问题。

对我来说,这意味着探索我以前不会接触的功能,比如 Atlas Search、生成式 AI 和 Vector Search。既然基础已经扎实,我就可以在不危及稳定性的前提下进行实验,并在项目真正需要时引入新能力。

我想对过去的自己说的话

如果我能回到刚安装 MongoDB 的时候,我会保持简单:

  • 首先专注于数据建模。良好的基础能让你避免我遇到的大部分问题。
  • 打好基础后,学习索引和聚合管道。它们会让你在查询时轻松很多。
  • 从第一天就开始监控。从长远来看,这会为你省去很多麻烦。
  • 花点时间自我学习。仅靠试错能学到的东西有限。MongoDB 提供了大量资源和提升技能的方式。

一旦你建立了这个基础,就可以探索更高级的主题,发掘 MongoDB 的全部潜力。当你信任自己的数据模型并对运维设置充满信心时,像 Vector Search、使用 Atlas Search 的全文搜索或高级模式设计模式等功能就会更容易采用。

MongoDB 技能徽章涵盖了所有这些领域以及更多内容。它们简短、实用,专注于解决你作为开发者或 DBA 将面对的真实问题,而且大多数都可以在午休时间完成。你可以在 learn.mongodb.com/skills 浏览完整目录,选择与你当前面临的挑战相匹配的徽章。从那里继续前进,一旦你掌握了正确的技能,你可能会惊讶于自己能从数据库中获得的更多收获。


转载声明:本文为转载整理,原文版权归原作者及原站点所有。

原文来源:MongoDB Blog

原创地址:https://www.mongodb.com/company/blog/technical/10-skills-was-missing-as-mongodb-user

原文作者:Joel Lord;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    1090
  • 访问量
    546633