mongodb、mysql、redis区别和联系

  1. 1.mysql数据库(关系型数据库):
  2. 2.mongodb数据库:
  3. 3.Redis(内存数据库):
  4. 4.Mysql和Mongodb主要应用场景
  5. 5.插入数据比较
  6. 6.MongoDB的缺陷

1.mysql数据库(关系型数据库):

   优势:在不同的引擎上有不同 的存储方式。
查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。
开源数据库的份额在不断增加,mysql的份额页在持续增长。

  缺点:在海量数据处理的时候效率会显著变慢。

2.mongodb数据库:

  Mongodb是非关系型数据库(nosql ),属于文档型数据库。文档是mongoDB中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。

   存储方式:虚拟内存+持久化。

   查询语句:是独特的Mongodb的查询方式。

   适合场景:事件的记录,内容管理或者博客平台等等。

   架构特点:可以通过副本集,以及分片来实现高可用。

   数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

   成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB 之一,适用人群不断在增长。

   优点:
快速!在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。高扩展性,存储的数据格式是json格式!

   缺点
不支持事务,而且开发文档不是很完全,完善。

3.Redis(内存数据库):

   持久化方式:
Redis 所有数据都是放在内存中的,持久化是使用 RDB 方式或者 aof 方式。

4.Mysql和Mongodb主要应用场景

  (1).将mongodb作为后端db来代替mysql使用

mysql与mongodb 属于平行级别,那么,这样的使用可能有以下几种情况的考量:

(1)mongodb所负责部分以文档形式存储,能够有较好的代码亲和性,json格式的直接写入方便。(如日志之类)

(2)从datamodels设计阶段就将原子性考虑于其中,无需事务之类的辅助。开发用如nodejs之类的语言来进行开发,对开发比较方便。

(3)mongodb本身的failover机制,无需使用如MHA之类的方式实现。

   (2).将mongodb作为类似redis

  memcache来做缓存db,为mysql提供服务,或是后端日志收集分析。考虑到mongodb属于nosql型数据库,sql语句与数据结构不如mysql那么亲和 ,也会有很多时候将mongodb做为辅助mysql而使用的类redis memcache 之类的缓存db来使用。 亦或是仅作日志收集分析。

5.插入数据比较

  (1) 数据库的平均插入速率

MongoDB不指定_id插入 > MySQL不指定主键插入 > MySQL指定主键插入 > MongoDB指定_id插入。

  (2). MongoDB在指定_id与不指定_id插入时速度相差很大,而MySQL的差别却小很多。

分析:

(1).在指定_id或主键时,两种数据库在插入时要对索引值进行处理,并查找数据库中是否存在相同的键值,这会减慢插入的速率。

(2).在MongoDB中,指定索引插入比不指定慢很多,这是因为,MongoDB里每一条数据的_id值都是唯一的。当在不指定_id插入数据的时候,其_id是系统自动计算生成的。MongoDB通过计算机特征值、时间、进程ID与随机数来确保生成的_id是唯一的。而在指定_id插入时,MongoDB每插一条数据,都需要检查此_id可不可用,当数据库中数据条数太多的时候,这一步的查询开销会拖慢整个数据库的插入速度。

(3). MongoDB会充分使用系统内存作为缓存,这是一种非常优秀的特性。我们的测试机的内存有64G,在插入时,MongoDB会尽可能地在内存快写不进去数据之后,再将数据持久化保存到硬盘上。这也是在不指定_id插入的时候,MongoDB的效率遥遥领先的原因。但在指定_id插入时,当数据量一大内存装不下时,MongoDB就需要将磁盘中的信息读取到内存中来查重,这样一来其插入效率反而慢了。

(4).MySQL不愧是一种非常稳定的数据库,无论在指定主键还是在不指定主键插入的情况下,其效率都差不了太多。

  (3).插入稳定性分析

插入稳定性是指,随着数据量的增大,每插入一定量数据时的插入速率情况。

(1).相比较MySQL,MongoDB数据库更适合那些读作业较重的任务模型。MongoDB能充分利用机器的内存资源。如果机器的内存资源丰富的话,MongoDB的查询效率会快很多。

(2).在带”_id”插入数据的时候,MongoDB的插入效率其实并不高。如果想充分利用MongoDB性能的话,推荐采取不带”_id”的插入方式,然后对相关字段作索引来查询。

(3).MongoDB适合那些对数据库具体数据格式不明确或者数据库数据格式经常变化的需求模型,而且对开发者十分友好。

(4).MongoDB官方就自带一个分布式文件系统,可以很方便地部署到服务器机群上。MongoDB里有一个Shard的概念,就是方便为了服务器分片使用的。每增加一台Shard,MongoDB的插入性能也会以接近倍数的方式增长,磁盘容量也很可以很方便地扩充。

(5).MongoDB还自带了对map-reduce运算框架的支持,这也很方便进行数据的统计。

6.MongoDB的缺陷

(1).事务关系支持薄弱。这也是所有NoSQL数据库共同的缺陷,不过NoSQL并不是为了事务关系而设计的,具体应用还是很需求。

(2).稳定性有些欠缺,这点从上面的测试便可以看出。

(3).MongoDB一方面在方便开发者的同时,另一方面对运维人员却提出了相当多的要求。业界并没有成熟的MongoDB运维经验,MongoDB中数据的存放格式也很随意,等等问题都对运维人员的考验。

文章标题:mongodb、mysql、redis区别和联系

发布时间:2020-01-17, 14:52:11

最后更新:2020-01-17, 14:52:12