NoSQL

NoSQL,not only sql,不仅仅是SQL,泛指非关系型数据库。NoSQL数据库的产生是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包含超大规模数据的存储。例如Facebook每天为他们的用户存储上万亿比特的数据,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

NoSQL四大分类:

  • Key-Value键值对,如redis、memcache
  • 文档型数据库(json格式比较多),如MongoDB
  • 列存储数据库,如HBase
  • 图关系数据库,放的是图关系(如社交网络),典型产品如Neo4J

分布式系统的CAP原理和BASE

分布式和集群

分布式:将项目按照不同的业务来做拆分,分成一个个独立的子系统,每个子系统能独立运行,它们之间通过RPC进行通信交互,对外提供服务和组内协作。

集群:复制多个功能相同的实例节点,所有的节点构成集群,通过负载均衡服务器进行请求分配调度,对外提供服务和访问。

image.png

CAP

C: consistency,数据一致性。指的是请求数据得到的一定是最新数据,不会返回旧数据。为了保证数据一致性,分布式系统需要等待数据同步,同步完成后方能释放资源响应,若同步失败,返回错误。
A: availability,可用性。指的是请求可以得到响应,为了避免响应错误或响应超时(或者说提高并发度,系统可用性),允许返回旧数据。
P: partition tolerance,分区容错性。指的是分布式系统中某个子系统宕机了,整个分布式系统还能继续运转下去(可对该宕机子系统做出一些熔断处理)。

CAP理论:在任何分布式系统中,不可能同时满足C、A、P三个指标,最多同时满足两个。

在分布式系统中,P是必然发生的。如果某个子系统宕机,整个服务就无法使用,这是不符合实际需要的。所以,对于分布式系统,当发生分区错误(子系统宕机)时,我们只能对数据一致性和可用性进行取舍。

CAP的组合方式有以下三种:

  • CP: 放弃可用性,追求一致性和分区容错性,zookeeper其实就是追求的强一致性,又比如跨行转账,一次转账请求要等待双方银行系统都完成整个事务才算完成。
  • AP: 放弃一致性,追求分区容忍性和可用性。这是很多分布式系统设计时的选择,通常实现AP都会保证最终一致性。
  • CA: 放弃分区容错性,即不进行分区,不考虑由于网络不通或结点挂掉的问题,则可以实现一致性和可用性,那么系统将不是一个标准的分布式系统,退化成单体服务了。

CAP理论表明,既能提供超高质量服务,也能提供超高性能服务的系统是不存在的,高质量和高性能需要做出折衷选择。

BASE

BASE本质是一种对AP和CP的折衷处理方案。

BASE属于以下三个术语的缩写:

  • Basically Available,基本可用
  • Soft state,软状态
  • Eventually consistent,最终一致

它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,我们必须采用另外一种方式来完成,这里BASE就是解决这个问题的办法。

redis介绍

redis,REmote DIctionary Server(远程字典服务器),是一个开源免费的,用C语言编写的,高性能的键值对分布式内存数据库,基于内存运行并支持持久化,是当前最热门的NoSQL数据库之一。

redis相较于其他键值对缓存产品,有以下三个特点:

  • 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载使用
  • redis的value支持多种数据类型,如string,list,set,zset,hash等
  • 支持主从模式的数据备份

redis的常见使用场景:

  • 缓存
  • 计数器,如浏览次数
  • 排行榜系统
  • 社交网络
  • 发布订阅消息系统

redis基础说明:

  • 单进程
  • 默认16个数据库,默认使用零号库,select n命令可切换数据库
  • dbsize可查看当前数据库的key的数量,命令O(1)复杂度
  • flushdb清空当前库
  • flushall清空全部库
  • 同一密码管理,16个库都是同样密码
  • redis索引都是从零开始

redis安装后的可执行文件:

  • redis-server,启动redis服务器
  • redis-cli,redis命令行客户端
  • redis-benchmark,redis基准测试工具
  • redis-check-aof,redis AOF持久化文件检测和修复工具
  • redis-check-dump,redis RDB持久化文件检测和修复工具
  • redis-sentinel,启动redis sentinel(哨兵)

redis数据类型

string

string,字符串,最基本的类型,是二进制安全的,所以可以存储任何数据,比如图片或者序列化的对象。string的最大值是512M。

list

list,列表,有序可重复集合。底层实际是个链表。

hash

hash,类似于Java中的map。

set

set,集合,无序不可重复。它是通过HashTable实现的。

zset

zset,sorted set,有序集合,有序不可重复。每个元素会关联一个double类型的分数,并按照分数从小到大排序,分数可以重复。

redis配置文件

redis安装后有个默认配置文件,redis.conf,里面记录了可以设置的变量。一般来说,我们都不要在默认配置文件上做修改,而应该拷贝出来一个副本,在副本上修改并运行使用。

配置文件中常用的配置项:

  • 端口、密码、禁用或重命名某命令
  • TCP连接参数配置
  • 日志配置
  • 快照、复制
  • 连接限制、内存限制、过期策略

参考资料:
彻底搞清楚什么是CAP理论
CAP理论中的P到底是个什么意思? - 四猿外的回答 - 知乎
CAP理论中的P到底是个什么意思? - 邬江的回答 - 知乎
redis命令参考文档
redis分布式锁介绍