likes
comments
collection
share

NoSQL入门

作者站长头像
站长
· 阅读数 21

什么是NoSQL?

数据模型

结构化数据

  • 结构化数据指的是由二维表结构来逻辑表达和实现的数据,严格遵循数据格式与长度规范

非结构化数据

  • 非结构化数据指的是数据结构不规则或不完整,没有任何预定义的数据模型,不方便用二维逻辑表来表现的数据,例如文本、图片、HTML、视频音频等

半结构化数据

  • 半结构化数据是结构化数据的一种形式,虽然不符合二维逻辑这种数据模型结构,但是包含相关标记,用来分割语义元素以及对记录和字段进行分层,例如XMLJSON

  • 半结构化数据以或者的数据结构对数据进行存储

  • 对于结构化数据来讲通常是先有结构再有数据,而对于半结构化数据来说则是先有数据再有结构

 

关系型数据库

以关系型数据库的方式做存储的架构演进

  • 阶段一:企业刚发展的阶段,一台应用服务器加一个关系型数据库,每次读写数据库

  • 阶段二:通常随着企业规模的扩大,应用服务器成为性能瓶颈,增加多台应用服务器并且在流量入口使用Nginx做一层负载均衡

  • 阶段三:随着企业规模的继续扩大,数据库成为性能瓶颈,此时进行读写分离,每次写主库,读备库,主备库之间通过binlog同步数据

  • 阶段四:企业发展越来越好了,读写分离数据库压力还是越来越大,增加多台数据库做分库分表,对表做垂直拆分,对库做水平拆分

关系型数据库的优缺点

优点

  • 操作方便:通用的SQL语言使得操作关系型数据库非常方便,支持join等复杂查询

  • 数据一致性:支持ACID特性,可以维护数据之间的一致性

  • 数据稳定:数据持久化到磁盘,没有丢失数据风险,支持海量数据存储

  • 服务稳定:最常用的关系型数据库产品MySqlOracle服务器性能卓越,服务稳定,通常很少出现宕机异常

缺点

  • 高并发下IO压力大:数据按行存储,即使只对其中某一列进行运算,也会将整行数据从存储设备中读入内存,导致IO较高

  • 维护索引代价大:数据的更新伴随着所有二级索引的更新,降低了关系型数据库的读写能力,且索引越多读写能力越差

  • 维护数据一致性代价大SQL标准为事务定义了不同的隔离级别,从低到高依次是读未提交、读已提交、可重复度、串行化,事务隔离提供的隔离级别越高读写性能越差

  • 水平扩展带来的问题:做了分库之后,数据迁移、跨库join、分布式事务处理都是需要考虑的问题

  • 表结构扩展不方便:如果需要修改表结构,需要执行DDL导致锁表,部分服务不可用

 

非关系型数据库

非关系型数据库(NoSQL,Not Only SQL)是对不同于传统的关系数据库的数据库管理系统的统称,主要用于解决数据的高并发读写、海量存储与高可扩展等需求。

NoSQL数据库的优点

  • 高可扩展NoSQL数据之间没有关系,所以非常容易扩展

  • 高性能:同样由于NoSQL的无关系性,使其具有非常高的读写性能

  • 灵活的数据模型NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式

NoSQL数据库的分类

键值存储列存储文档存储图形存储
存储结构键值对列簇式存储类JSON对象图结构
应用场景内容缓存分布式数据存储与管理Web应用关系图谱
典型代表RedisMemcachedCassandraHBaseMongoDBCouchDBNeo4jInfinite Graph

NoSQL的CAP+BASE

NoSQL往往是多节点,通过BASE理论保证数据一致性

CAP理论

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。

  • 一个分布式系统最多只能同时满足强一致性(Consistency)可用性(Availability)分区容错性(Partition tolerance)这三项中的两项

    • 强一致性(Consistency):更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致(弱一致性与最终一致性不受CAP理论限制)

    • 可用性(Availability):服务一直提供相应,而且是正常响应时间

    • 分区容错性(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作

  • CAP的关系

    • CP without A:一旦发生网络故障或者消息丢失等情况,就要等待所有数据全部一致了之后再提供服务,比如Redis、HBase这种分布式存储系统,或是Zookeeper这种分布式协调组件,数据一致性是它们最基本的要求

    • AP wihtout C:一旦网络问题发生,每个节点只能用本地数据提供服务,导致全局数据的不一致性,许多Web应用为了服务高可用,舍弃了强一致性退而求其次保证最终一致性(参考下面的BASE理论)

BASE理论

BASE 理论起源于 2008 年, 由eBay的架构师Dan Pritchett在ACM上发表。

  • BASE基本可用(Basically Available)软状态(Soft state)最终一致性(Eventually consistent)

  • 最终一致性(Eventually consistent):系统中所有的数据副本,在经过一段时间的同步后最终能够达到一个一致的状态

 

什么是HBase?

HBase是基于Apache Hadoop构建的一个高可用、高性能、多版本的分布式列存NoSQL数据库,是Google BigTable的开源实现,提供海量数据高性能的随机读写能力。

 

HBase存储结构

数据模型

  • HBase本质上其实就是Key-Value类型的数据库

  • KeyRowKey(行键)+ColumnFamily(列族)+Column Qualifier(列修饰符)+TimeStamp(时间戳--版本)+KeyType(类型)组成,而Value就是实际上的值

系统架构

  • Client,提供了访问HBase的接口,并且维护了对应的cache来加速访问

  • Zookeeper,存储HBase的元数据,ClientZookeeper里边拿到元数据才知道去哪台机器读写数据

  • HRegionServer,处理客户端的读写请求,负责与HDFS底层交互,是真正干活的节点

  • HMaster,处理元数据的变更和监控RegionServer的状态

HRegionServer结构

  • 一张表的数据会通过RowKey来横向切分到HRegion上,HRegionHbase中分布式存储和负载均衡的最小单元,一个HRegionServer可以包含多个HRegion

  • HRegion的数据会通过ColumnFamily纵向切分到Store上,StoreHBase的核心存储单元,由MemStoreStoreFile组成

  • HBase在写数据的时候,会先写到MemStore,当MemStore超过一定阈值就会将内存中的数据刷写到硬盘上,形成StoreFile

  • StoreFile底层是以HFile的格式保存,HFileHBase实际存储的数据格式

  • 为了防止机器宕机,内存的数据没刷到磁盘中就挂了,所以在写Mem store的时候还会写一份HLog

  NoSQL入门

 

参考文章

《Sql Or NoSql,看完这一篇你就懂了》

《分布式系统的CAP理论》

转载自:https://juejin.cn/post/6992400735937757214
评论
请登录