我们平常开发都会选择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等等,希望全方位给初学者一点帮助,积累或巩固知识,体验到技术的美妙。