文章目录
- MongoDB:28000 Star 的数据库,聊聊它为什么还能打
- 两个核心组件
- 为什么选 MongoDB
- 安装和使用
- 驱动和生态
- 哪些场景适合
- 注意事项
MongoDB:28000 Star 的数据库,聊聊它为什么还能打
MongoDB 这个项目,程序员基本都听过。GitHub 上 28000 多 Star,开源十几年了,到现在还是很多公司的首选数据库。我这几年用过不少数据库,MySQL、PostgreSQL、Redis 都碰过,但 MongoDB 始终占着一席之地。今天聊聊它到底好在哪,哪些场景适合用它。
两个核心组件
MongoDB 的架构不复杂,主要就两个东西:mongod 和 mongos。mongod 是数据库本体,负责存数据、处理查询。mongos 是分片路由器,数据量大了需要分散到多台机器上时,它来决定数据往哪写、从哪读。这种设计让 MongoDB 既能单机跑小项目,也能集群撑大业务。
为什么选 MongoDB
用文档数据库,最大的好处是灵活。关系型数据库要先建表、定字段,改个结构还得迁移。MongoDB 直接存 JSON 格式的数据,字段随时加减,不用提前规划。做快速迭代的项目,这个优势很明显。
我之前做过一个电商项目,商品属性五花八门,有的有颜色,有的有尺寸,有的有材质。用 MySQL 的话,要么建一堆关联表,要么用 JSON 字段存(那跟直接用 MongoDB 有啥区别)。最后选了 MongoDB,开发效率高了不少。
安装和使用
安装方式挺多的。官网下载、Homebrew、Docker 都行:
brew tap mongodb/brew docker pull mongodb/mongodb-community-server装完直接启动 mongod,用 mongosh 连上去就能操作。Shell 交互体验不错,写个查询、插条数据,几行命令搞定。
Compass 是官方的图形化工具,装完 MongoDB 自带。不想敲命令的话,用 Compass 看数据、做查询,体验跟 phpMyAdmin 差不多。
驱动和生态
几乎所有主流语言都有 MongoDB 驱动,Python、Java、Node.js、Go、C#,文档里都有链接。社区活跃,遇到问题搜一下基本都能找到答案。
官方文档写得也算清楚,从入门到高级用法都有覆盖。MongoDB University 上还有免费课程,想系统学的话可以看看。
哪些场景适合
几个典型场景:
- 内容管理系统:文章、评论这类结构不固定的数据,MongoDB 存着舒服
- 日志和事件数据:量大、格式可能变化,文档数据库比关系型灵活
- 快速原型开发:不用建表,直接存,迭代快
- 缓存层:配合 Redis 用,MongoDB 做持久化,Redis 做热数据
不太适合的场景也有。强事务要求的金融系统,还是 PostgreSQL 或 MySQL 更稳。数据关系特别复杂的场景,关联查询多的话,MongoDB 的 $lookup 不如 SQL 的 JOIN 好用。
注意事项
MongoDB 默认不开启认证,生产环境一定要配好权限。我见过有人裸跑 MongoDB 被扫到数据泄露的,挺冤的。
备份也要做好。虽然 MongoDB 有 replica set,但逻辑备份还是得定期做。mongodump 和 mongorestore 是官方工具,够用。
版本选择上,建议用最新的稳定版。老版本有些已知问题,社区也不太维护了。
MongoDB 不是万能的,但它解决的那些问题,确实解决了。灵活的数据模型、简单的 API、活跃的社区,让它在文档数据库这个赛道上一直跑在前面。28000 多 Star 不是白来的,是开发者们用脚投票的结果。如果你在选数据库,项目需求里有「结构不确定」「需要快速迭代」「数据量会增长」这几个关键词,MongoDB 值得试试。
果你在选数据库,项目需求里有「结构不确定」「需要快速迭代」「数据量会增长」这几个关键词,MongoDB 值得试试。