Tables | mongo | mysql |
---|---|---|
数据库类型 | 非关系型、文档型、nosql | 关系型 |
存储方式 | 虚拟内存+持久化 | 不同引擎不同存储方式 |
查询语句 | 独特mongo查询语句 | 传统sql语句 |
架构特点 | 可以通过副本集,分片实现高可用,集群架构拥有十分高的扩展性
|
常见有单点、集群多种架构方式 |
数据处理方式 | 基于内存,将热数据存在物理内存中,从而达到高速读写
|
不同引擎拥有自己特点,海量数据处理效率显著变慢
|
事务性 | 本身没有事务机制 ,若要实现,需要通过一张额外的表,逻辑上自行实现事务 |
支持事务 操作 |
占用空间 | 占用空间大 | 占用空间小 |
join操作 | mongo没有join | mysql支持join |
扩展性 | nosql基于键值对,数据间没有耦合,容易水平扩展 | 关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难 |
成熟度 | 新兴数据库,成熟度较低 | 拥有成熟体系,成熟度较高 |
广泛度 | nosql数据库中,mongodb是较为完善的DB之一,使用人群也在不断增长 | 开源数据库份额在不断增加,mysql份额也在持续增长 |
关系型数据库?非关系型数据库?
关系型数据库依赖一个模型来创建数据库,比如我们使用的mysql中的表是由横列和纵列组成的一个二维表格。关系型数据库可以通过关系模型使多个表的数据关联起来,比如我们平时说的一对一、一对多、多对一。由于是建立在数据模型的基础上,所以可以通过SQL语句很方便在多个表之间做复杂的查询操作。关系型数据库相对安全,因为直接存储在硬盘中所以突然的宕机、停电等意外不会导致数据丢失。
非关系型数据库即我们常说的nosql数据库,部署起来都比较简单,没有关系型数据库那么复杂。Mongo的存储方式为虚拟内存+持久化存储,Mongo将数据写入内存中,再由虚拟内存管理器将其持久化到硬盘中,因此写操作会比关系型数据库快很多。NOSQL的存储格式是key-value形式,可以像关系型数据库那样存储基础数据类型的数据,也可以存储集合、对象等等。NoSQL虽然性能比较高,但是并不支持事务,也不能进行联表查询,一般用于较大规模数据的存储。
mongo和mysql主要应用场景
1、mongo所负责部分以文档形式存储,能够有较好的代码亲和性,json格式直接写入方便
mongo适合场景:事件的记录,内容管理或者博客平台等,存储数据格式比较丰富,日志信息一般种类较多,范围较大,内容比较杂乱,通过mongo将日志进行收集管理,使查找变得非常容易
2、将mongodb作为类似redis等缓存db,为mysql提供服务,或是后端日志收集分析。考虑到mongodb属于nosql型数据库,sql语句不如mysql亲和,也会有很多时候将mongodb作为辅助mysql而使用的类似redis之类的缓存db来使用。亦或是仅作为日志收集分析
3、mysql一个复杂的查询操作,一系列的组合索引都会消耗非常多的内存空间,此时我们需要对数据库进行读写分离操作,或将数据库结构进行拆分(水平拆分、垂直拆分)将请求压力分担在不同的库中