构建大规模系统,真的可以考虑使用MongoDB替代MySQL,既灵活还好扩展

143 阅读4分钟

我们平常开发都会选择mysql,可为什么没有其他选择呢,我开发和运维过几个基于mongodb的系统,一方面开发很快,维护性也非常不错,所以今天给大家推荐一下。

介绍mongodb是什么,有什么局限,和mysql的一些比较,选择mongodb的一些准则。

让我们开始吧!

1:mongodb是什么

mongodb诞生于2007年,时间不算短了,它是一个NoSQL、非关系型数据库管理系统(DBMS)。

既然是一个数据库系统,所以事务、锁、ACID这些特性和概念都是有的。

它使用文档的概念替代mysql中的表和行。

什么是文档?用灵活的key-value键值对存储数据,使用类JSON的文档和文件,所以JavaScript是能解析它的。

mongodb采用的文档的形式,所以修改数据结构是非常方便的。

基于无schema的模式,表示其不用像mysql一样预先设计schema,所以对于程序员来说,非常的灵活。

可靠性和效率方面是mongodb的一大特点,性能非常出色,它是一款分布式数据库,所以具备高可用性,支持横向扩展。

如果你的数据量变化非常快,mongodb可能是个很好的选择,它的可扩展非常好,能支持快速迭代开发。

2:一些局限性

  • 它不支持在多个集合中进行join操作
  • 因为key-value对的设计方式,会让数据产生冗余,对于内存的需求比较高
  • 每个文档最大支持16MB
  • 因为没有严格遵守ACID,复杂事务的处理会非常麻烦(涉及钱交易的系统我不会采用它)

3:mysql vs mongodb

从比较的维度来理解monogdb:

  • 数据表现形式不一样,mysql基于表和行,mongodb基于文档
  • mysql不支持数据嵌套,所以虽然可以使用join弥补,但性能是个大问题,mongodb可以支持多层的嵌套,但多少会有一些冗余
  • 查询语言,mongodb采用MQL,mysql则是采用更通用的SQL
  • 索引方式,如果没有使用索引,mongodb需要遍历整个集合,mysql则需要扫描整个表
  • 速度和性能,从基准测试上看,mongodb更好
  • 集群支持,mysql支持master-master、master-slave的模式,它本质是一个单机系统;而mongodb可以使用分片、副本集,且支持故障自主选取切换
  • mysql基于权限保障控制各种操作的安全性,在传输层进行加密连接;mongodb基于角色的方式控制权限,非常的灵活,在传输层和socket层控制操作的安全性
  • 可扩展性,理论上mysql是纵向扩展,通过加CPU和磁盘进行扩展;而mongodb通过增加机器到集群解决扩展性问题,更优雅,也更方便

4:选择mysql还是mongodb?

选择mongodb还是mysql并没有明确的准则,取决于你从事的业务领域,也依赖于你的目标和需求。

如果你遇到下面的情况,可以考虑mysql:

  • 你刚刚开始一个产品的开发,不用考虑太多的数据规模问题
  • 长时间数据存储结构不会发生变化
  • 你的产品有很多的事务操作
  • 非常注意数据安全性,是最优先级
  • 需要更好的技术支持,遇到问题能够快速解决

mongodb可能更适合以下的情况:

  • 希望数据服务是高可用的,数据恢复和维护要方便和快速,甚至完全自动化
  • 你的服务模式不固定,或者期望减低迁移成本
  • 期望加速开发速度

实时分析、移动业务、物联网,同时业务增长很快速,业务需求变化快,那么mongodb是个很好的选择。

总之选择那个数据库系统,可以综合考虑,只要把业务支持好,价格可控,服务可控,维护可控,那么选择就不是问题了!

欢迎关注我的公众号,搜索:虞大胆的叽叽喳喳 或者 yudadanwx,文章比较杂,涉及到编程语言、Linux、大数据、分布式、DevOps、AI、微服务、K8s/Docker等等,希望全方位给初学者一点帮助,积累或巩固知识,体验到技术的美妙。