redis-mysql-mongodb三大数据库的区分

redis

非关系型数据库,也是一个内存数据库。

那这就会存在两个问题:1.数据存储在内存中(断电重启怎么办?);这里会有人说使用RDB或者AOF持久化机制,那这也不能100%保证数据的不丢失。2.存储在内存中,内存溢出怎么办?这里会有人说搭建redis集群等等,可以。

  • 优点:多用于缓存,可以实现快速读写操作。
  • 缺点:存储格式是key-value类型,只能做等值查询,也就是说只能通过key查找到它对应的值;不能用它进行范围查询或者模糊匹配。

mysql

关系型数据库,存储在磁盘上。
  • 优点:适合各种的查询条件,而且能够保证数据的持久化。
  • 缺点:最开始没有考虑分布式设计,需通过mycat中间件来进行分库分表 。

为什么要采用分库分表 :
1.在数据量过大情况下,解决数据的存储问题;
2.在查询时分担了查询数据量,也可以提高查询效率。

MongoDB

非关系型数据库,但是存储在磁盘上。

mongodb一开始就考虑到分布式设计,有个_id字段,如果不指定,它会自动生成唯一的主键;它的存储格式是类json格式的bson来进行存储,在4.x以后也支持事务。

  • 优点:可以用来存储海量数据,也可以进行持久化;
  • 缺点:磁盘空间占用比较大。

mongoDB的特点:
1)反范式设计
反范式设计就是允许一些数据的冗余,减少数据之间的关系。通俗来讲,就是把相关的数据存储在一块。不像设计mysql数据库的一二三范式,减少数据冗余。
既然提到了一二三范式,那就简单理解下:
1.第 一范式:列不可再分,比如说:把省市区三列分开存储,每个省就是不可再分的。
2.第二范式:所有的列完全依赖于主键列,比如说:
学生id 学生姓名 课程id 课程名称 分数
分数这一列必须根据学生id和课程id 才能确定一个分数,把学生id或者课程id哪一个设置为主键都不合适。这时候就需要分表,设计出一个中间表来存储分数。
3.第三范式:表中的每一列都直接依赖于主键,不产生传递依赖。比如说:

学生id课程cid课程名称cname
11英语
12语文
22语文

学生1和2都有这个语文,语文是通过课程cid间接依赖于主键的,如果想要修改语文的话,就需要把学生1和2的语文都一改。可以把课程cid和课程名称cname重新建立一个表,在这个表中只需创建一个cid并进行关联。
2)模式自由
可以自由的更改文档的属性,并不会影响其他的数据,适合业务变化非常快的数据。不像mysql数据库,它的表结构是固定的,当然也可以通过alter来添加或者修改列,但是在上线后这样操作会影响数据库的性能。
3)高可用
支持集群,实现99.99%的可用性。
4)可扩展
只需要多加一个节点的IP地址就可以了。不像mysql数据库需要通过mycat中间件来进行分库分表。

通过mysql和mongodb对应来了解

mysqlmongodb
数据库(database)数据库(database)
数据表(table)集合(collection)
行(row)文档(document)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值