mongodb出现的背景
mongodb出现之前,大家都习惯于使用关系型数据库。但是,在使用关系型数据库的过程中,却存在很多问题。
- 基于单机架构的关系型数据库扩展性差,无法支撑海量数据
比如mysql,oracle,都是基于单机架构的,支撑的数据量很小。如果要支撑海量数据,则必须扩展到集群架构。而关系型数据库扩展到集群架构,是一个很痛苦的过程,最常见的手段就是分库分表,除了数据库端的改动,还需要的业务代码配合进行修改。总之,关系型数据库的扩展性差,需要用户来手动维护。
由于无法忍受基于单机架构的关系型数据库的缺点,10gen创始人Eliot和Dwight决定开发一套数据存储服务,该系统允许开发者将数据存储到一个类似于数据库的地方,同时,友好的API方便开发者使用。
mongodb要做的事情
- 友好的API
对于用户友好的API,是数据库应用成功的第一步。 - 支持海量数据的、高扩展性的架构
这是mongodb存在的理由。 - 高性能的读写
这是一个数据库应用最基本的保证。
mongodb是怎么做的
-
友好的API
为了最大程度的方便用户使用,mongodb决定采用JSON格式来存储数据。JSON格式作为一个通用的数据交换格式,简单明确,所有的开发者对其都不会陌生。而且,直接将数据对象作为一个JSON对象保存到数据库中,显得更加方便。 -
支撑海量数据下的可扩展性
在传统的关系型数据库中,当数据量太大时,单机无法支撑海量数据的高性能的读写。这种情况下,关系型数据库一般会采用分库分表的方式来进行优化。但是,这种方案对于业务代码和数据库的侵入性都很高,用户需要修改业务代码,在数据库层面需要手动迁移数据。
在mongodb中,用户可以首先使用一主多从的架构。当需要保证海量数据的处理性能时,可以无缝切换到分片架构,用户几乎没有感知。mongodb会自动在多个节点间进行数据的分布和均衡,代码中也不需要进行修改。 -
读写的高性能
mongodb3.0版本使用了WiredTiger存储引擎,从而解决了MMAP存储引擎写性能较差的问题,使得mongodb可以拥有读写的高性能。 -
JOIN操作
mongodb从3.2版本开始,通过$lookup操作符,从而做到了支持多表(集合)关联。类似于关系型数据库的JOIN操作。 -
支持ACID多行多表强事务
对于使用关系型数据库的用户来说,很多时候都是看重关系型数据库的ACID事物特性,mongodb也已经支持。2018年6月,MongoDB推出4.0版本,支持ACID多行多表强事务,支持事务回滚。
前面两条,是区别于关系型数据库的地方。后面三条,是不输于关系型数据库的地方。
mongodb最终解决了哪些问题
- 方便用户使用的API,高扩展性的架构,使得mongodb作为传统关系型数据库的一个替代。在处理海量数据时,用户可以考虑抛弃关系型数据库,使用mongodb。