NoSQL发展史及Redis快速入门

NoSQL的概述

1.单机MySQL使用

早些年,小型网站很多,这个时候他们访问量也不大,一个数据库完全可以搞定!
瓶颈:

  • 数据量如果太大,一个机器放不下
  • 数据的索引,机器内存也放不下
  • 访问导致一个数据库实例不能够承受

假设这个网站满足上面的任何一条都要考虑升级了~

2.Memcached(缓存)+MySQL+垂直拆分

访问量的越来越大,单击MySQL一定会出现性能问题,网站需要提高性能,达到高可用。最开始的时候,是使用文件缓存来缓解数据库的压力,如果访问量继续增加,我们就需要做多个缓存服务器,但是web机器通过文件的缓存是不能共享的,大量的小文件会产生很多IO压力!Memcached就成为了这个时候最流行的产品!
在这里插入图片描述
3.主从复制和读写分离!

随着访问量更大,我们数据库的写压力也增加了,Memcached解决的是读的问题。所以这个时候我们就通过主从复制和读写分离来提高数据库的可读性,以及可扩展!
在这里插入图片描述
4.分库分表+水平拆分+MySQL集群

架构的演进,就是一个不断解决问题的过程!
我们数据量的持续增加,我们MySQL最开始的时候使用的是MyISAM(表锁),这个时候,假设有高并发的问题,就会导致其它的操作被等待,数据库资源被浪费。于是MySQL就开始使用InnoDB(行锁)引擎来替代MyISAM,高并发问题得到解决。但是缓存问题来了,慢慢开始流行 分库分表(继续项目的业务来进行操作)!在这个时候MySQL推出了表分区。MySQL还推出了MySQL Cluster集群,实现高可用!
在这里插入图片描述
这个架构到这里已经完全满足大部分的要求,但是MySQL是可以存储大文本,数据库表的压力还是十分大,恢复数据也需要一段时间。关系型数据库很强大,但是它并不能够很好的适应所有场景。MySQL的扩展性的话比较差,大数据,IO压力大,假设1000万的数据要增加一个列,就会十分的困难,MySQL开发人员就会觉得很痛苦!到今天为止,我们的应用十分的复杂,集成很多第三方平台,可以十分轻松的获取数据,用户的信息,社交网络,地理位置,这些数据量才是最大的,每天都暴增,我们假设要对这些数据进行操作,SQL关系型数据,完全无法适应。而NoSQL非关系型数据库在这上面就是如鱼得水。

关系型数据库和非关系型数据库最大的区别就在于 NoSQL,一般存储的是没有关系的数据。就可以满
足大数据的情况!

什么是NOSQL

NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。

问题: 大量的web2.0时代的产品,纯动态网站,暴露了很多问题,关系型数据库解决不了。

解决: NoSQL数据库的产生就是为了解决大规模数据集合多种多样的情况和挑战。

NOSQL和关系型数据库比较

 # RDBMS
 - 结构化的数据
 - 结构化的查询语言(SQL)
 - 所有的数据和关系都是存储在单独的表中
 - 严格的一致性
 - 事务的支持
 - ...
 # NoSQL
 - 不仅仅是SQL
 - 没有声明式的查询语言 get
 - 没有预先定义的模式
 - 存储: 键值对存储、列存储、文档存储、图形数据库
 - 最终一致性
 - CAP定理
 - 高可用、高性能、可伸缩
 - .....

非关系型数据库的优势:

1)性能:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
2)可扩展性:同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

关系型数据库的优势:

1)复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
2)事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

总结

关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。 一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据

NoSQL四大分类

KV键值对

  • 新浪:BerkeleyDB + Redis
  • 美团:Redis + tair
  • 阿里/百度 : Redis + Memcache

文档型数据库

  • MongoDB
    基于分是不是文件存储的数据库。C++ 编写。
    MongoDB就是介于关系型数据库和非关系数据库之间的产品,是非关系数据库中最像关系型数据库的产品
  • CouchDB

列存储数据库

  • HBase + Cassandra
  • 分布式文件系统

图关系数据库

  • 拓扑图,社交网络图
    在这里插入图片描述
  • Neo4J , InfoGrid。

对比
在这里插入图片描述

Redis

redis是c语言开发的一款高性能的NOSQL系列的非关系型数据库

优点

1. 性能高,速度快

Redis命令执行速度非常快,官方给出的读写性能可以达到10W/秒。为什么会如此之快呢?有以下几个因素:

  • 数据存储在内存中,直接与内存连接。
  • 由相对底层的C语言实现,离操作系统更近。
  • 实现源码很精湛,仅仅几万行代码,简单稳定。
  • 使用了单线程模型,避免了不必要的上下文切换,无多线程竞争、锁等问题。
  • 非阻塞I/O:Redis采用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为了事件,不在I/O上浪费过多时间

2. 丰富的数据结构

Redis与其他的内存数据库不同的是,Redis拥有丰富的数据类型,如字符串、哈希、列表、集合、有序集合等。正是因为Redis丰富的数据类型,所有它能应用的场景非常多。

3. 丰富的特性

除了支持丰富的数据结构外,还支持以下高级功能。

  • 支持键过期功能,可以用来实现定时缓存。 * 支持发布/订阅功能,可以有来实现消息队列。
  • 支持事务功能,可以保证多条命令的事务性。
  • 支持供管道功能,能够批量处理命令。
  • 支持Lua脚本功能。
  • 支持集群分片和数据复制功能。
  • 支持内存数据持久化硬盘功能。

4. 丰富的客户端

官网索引:http://www.redis.cn/clients.html
从官网给出的客户端列表可以看出,各种各种的语言都能接入到Redis,接入包括了所有的主流开发语言。
Redis 是一个键值对数据库(key-value DB),数据库的值可以是字符串,散列表,列表,集合,有序集合,而数据库的键则总是字符串对象。

Redis VS Memcache VS Ehcache

  • Ehcache

    • 优点

      • Java开发的
      • 基于JVM内存
      • 简单、方便:hibernate和mybatis都有集成
    • 缺点

      • 不支持集群(更适合单机应用)
      • 不支持分布式
  • Memcache

    • 优点
      • 简单的key-value存储
      • 内存使用率高
    • 缺点
      • 无法容灾
      • 无法持久化
  • Redis

    • 优点
      • 丰富的数据结构
      • 持久化
      • 主从同步,故障转移
      • 支持集群3.x以后
    • 缺点
      • 单线程(大数量存储的时候性能会降低)
      • 单核(无法充分利用CPU的多核性能,建议使用多实例)

更多Redis学习请看下一篇Redis常用五种数据类型及应用场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值