NoSQL数据库原理与应用
NoSQL数据库原理与应用
1. 绪论
1.1 数据库系统
- 数据库技术是研究数据库的结构、存储、设计、管理和使用的一门科学。
- 数据库系统的组成:
- 数据库根据不同逻辑模型(一种数据模型)可分为:层次型(一对多)、网状型(多对多)、关系型(二维表)。
- 数据库管理系统(DBMS)
- 是一种操纵和管理数据库的大型软件,如Oracle、MySQL都是 DBMS。
- 是数据库系统的核心。
- 主要功能有:数据定义 DDL,数据操纵 DML,数据库的运行管理,数据组织、存储与管理,数据库的维护,通信。
- 数据库应用程序将用户的操作交给 DBMS,再由 DBMS 将其转化为数据库能识别的 DDL(数据定义语言)。
1.2 关系型数据库
关系型数据库以行和列的形式存储数据,这一系列的行和列被称为表
结构化查询语言 SQL:
- 是关系型数据库的核心。
- 是一种高度非过程化的语言。
- 组成:
SQL的组成 功能描述 数据定义语言 DDL 对表的创建 CREATE、删除 DROP和修改ALTER。 数据查询语言 DQL 数据查询 SELECT 数据操纵语言 DML 对表中数据的插入 INSERT、更新 UPDATE、删除 DELETE。 数据控制语言 DCL 对数据的访问权进行控制 关系型数据库的优点
容易理解:采用二维表的形式进行存储。
使用方便:使用通用的 SQL 语言进行数据操纵。
易于维护:具有完整性和一致性的特点
完整性:实体完整性、参照完整性、用户自定义完整性
提供对事务的支持,事物的重要特性:原子性要么全完 成,要么全部完成,–> 回滚,保证了数据的一致性。
关系型数据库的缺点
- 高并发读写能力差
- 对海量数据的读写效率低
- 扩展性差(纵向扩展)
由于关系型数据库具有数据模型、完整性约束和事务的强一致性等特点,导致其难以实现高效率的、易横向扩展的分布式架构。
1.3 NoSQL数据库
- NoSQL是非关系型数据库的统称。
NoSQL从诞生之初就是分布式、横向扩展的。
特点:
- 具有灵活的数据模型:可以快速容纳新的数据类型而无需修改表。
- 可伸缩性强:是分布式、横向扩展的,当数据库服务器无法满足数据存储和数据访问的需求时,只需要增加多台服务器,将用户请求分散到多台服务器上,即可减少单台服务器的性能瓶颈出现的可能性。
- 自动分片:横向扩展,即增加服务器而不是扩展单台服务器的处理能力。关系型数据库存储的是结构化的数据,采用的是纵向扩展,需要单台服务器持有整个数据库来确保可靠性和数据的持续可用性。
- 自动复制:服务器会自动对数据进行备份,即将一份数据复制存储在多台服务器上。
关系型数据库和非关系型数据库的区别
关系型数据库 非关系型数据库 存储方式 表(行、列) 数据集(键值对、图、文档) 存储结构 结构化,不易更改 动态结构 存储规范 采用最小关系表存储,避免了数据重复 单个数据库单独存储,极少分割 扩展方式 纵向,即提高自身性能 横向,添加更多服务器 查询方式 SQL(CRUD) UnQL(非结构化查询语言),以数据集为单位来进行管理和操作
1.4 分布式数据库的数据管理
- 分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。
- 与传统的关系型数据库相比:
- 放松事务一致性的要求。
- 改变固有的表结构。
- 去除事务、关联等复杂操作。
- 分布式数据库的特征:
- **高扩展性:**分布式数据库必须具有高可扩展性,能够动态地增添存储节点以实现存储容量的线性扩展。
- **高并发性:**分布式数据库必须及时响应大规模用户的读/写请求,能对海量数据进行随机读写。
- **高可用性:**分布式数据库必须提供容错机制,能够实现对数据的冗余备份,保证数据和服务的高度可靠性。
- 数据处理方式:集中式 VS 分布式
- 集中式数据库是指数据库中的数据集中存储在一台计算机上,数据的处理也集中在一台机器上完成。
- 分布式数据库是指利用高速计算机网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。
- 技术管理和主要策略
- 数据分片/数据分块 --> 多表联合查询性能较差
- 数据多副本
- 一次写入多次读取 WORM --> 顺序存储结构,速度较快
- 分布式系统的可伸缩性
- 集群状态维护
- 数据平衡
- 高可用性
▷ 扩展:数据处理过程
- 数据采集
- 数据存储(以xx形式,如二维表,键值,列族,文档,图形)
- 数据处理和管理
- 数据可视化
1.5 分布式数据库的理论
1.5.1 CAP理论
一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三者无法在分布式系统中被同时满足,并且最多只能满足其中两个。
C : 一致性(consistency)(强一致性)
它是指任何一个读操作总是能够读到之前完成的写操作的结果。所有节点在同一时间具有相同的数据。
A : 可用性(Availability)(高可用性)
每个请求都能在确定时间内返回一个响应,无论请求是成功或失败。
P : 分区容忍性(Partition Tolerance)
它是指分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。可视为在系统中采用多副本策略。
当处理CAP的问题时,可以有几个明显的选择:
- CA 也就是强调一致性(C)和可用性(A),放弃分区容忍性(P),最简单的做法是把所有与事务相关的内容都放到同一台机器上。
- CP 也就是强调一致性(C)和分区容忍性(P),放弃可用性(A),当出现网络分区的情况时,受影响的服务需要等待数据一致,因此在等待期间就无法对外提供服务。
- **AP ** 也就是强调可用性(A)和分区容忍性(P),放弃一致性(C),允许系统返回不一致的数据。
- 重新理解:三者之间不是非此即彼,应看做连续互相影响,因此可以采用如下策略:绝大多数未分区的情况下,尽可能保证CA,当发生网络分区时,系统应能识别P状况,降低CA并进行相应处理。
1.5.2 BASE理论
- ACID
- **事务:**是一个一致和可靠计算的基本单元,由作为原子单元执行的一系列数据库操作组成。数据库一般在启动时会提供事务机制,包括事务启动、停止、取消或回滚等。
- ACID 是对 CAP 中的强一致性(C)和可用性(A)进行权衡的结果。
- ACID 指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
- **原子性:**一个事务的所有系列操作步骤被看成是一个动作,所有 的步骤要么全部完成要么都不会完成。
- **一致性:**事务执行前后,数据库的状态都满足所有的完整性约 束。不能发生表与表之间存在外键约束,但是有数据却违背这种约束性。
- 隔离性:并发执行的事务是隔离的,保证多个事务互不影响,隔离能够确保并发执行的事务能够顺序一个接一个执行,通过隔离,一个未完成事务不会影响另外一个未完成事务。
- **持久性:**一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,不会因为和其他操作冲突而取消这个事务。
- BASE
- BASE 是对 CAP 中的弱一致性(C)和可用性(A)进行权衡的结果。
- **核心思想:**无法做到强一致性,但每个应用都可以根据自身的特点,采用适当方式达到最终一致性。
- BASE原则 = 基本可用性(Basically Available) + 软状态(Soft state) + 最终一致性(Eventuallyconsistent)
- **基本可用性:**分布式系统在出现故障的时候,允许损失部分可用性,即保证核心功能或者当前最重要功能可用,但是其他功能会被削弱。
- **软状态:**允许系统数据存在中间状态,但不会影响到系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步时存在延时(暂时不一致)。
- **最终一致性(核心):**要求系统数据副本最终能够一致,而不需要实时保证数据副本一致。*最终一致性是弱一致性的一种特殊情况。
- BASE理论和ACID理论的区别
区别 | BASE理论 | ACID理论 |
---|---|---|
一致性 | 弱一致性 | 强一致性 |
可用性 | 可用性优先 | 可用性不作要求 |
灵活性 | 变化速度快、灵活 | 难以变化 |
1.5.3 最终一致性
- 最终一致性是 BASE 原理的核心,也是 NoSQL 数据库的主要特点,通过弱化一致性,提高系统的可伸缩性、可靠性和可用性。
- 牺牲一致性换取高可用性是多数分布式数据库产品的方向。
- 五个变种:
实现一致性的策略 --> NRW策略
三个关键字N、R、W。
N — 数据复制的份数
W — 更新数据时需要保证写完成的节点数
R — 读取数据时需要保证读完成的节点数
如果W+R>N,写的节点和读的节点重叠,则是强一致性。
如果W+R<=N,不能保证读写有重叠,则是弱一致性
不同的N,W,R组合,是在可用性和一致性之间取一个平衡
总体上看,一致性和可用性成负相关。
1.6 NoSQL 数据库分类
- NoSQL 是基于存储的数据结构进行分类的。
分类 | 举例 | 典型应用场景 | 数据模型 | 优点 | 缺点 |
---|---|---|---|---|---|
键值数据库 | Redis, Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 | Key 指向 Value 的键值对,通常用hash table来实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 |
列族数据库 | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列族数据存在一起 | 吞吐量大,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档型数据库 | CouchDB, MongoDB | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) | Key-Value对应的键值对,Value为 JSON结构的文档 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法。 |
图形数据库 | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |
2. HBase
2.1 HBase简介
- HBase 是一个分布式非关系型数据库。
- 既可以存储结构化数据,也可以存储非结构化数据或半结构化数据。
- 使用 Java 语言实现,底层基于Hadoop 的 HDFS 来存储数据,在此基础上运行 MapReduce 进行分布式的批量处理数据,为 Hadoop 提供海量数据管理的服务。
- 是 Apache 基金会的 Hadoop 项目的一部分;是对 Google 的 Bigtable 的开源实现。
- HBase 特性:
- 容量巨大
- 列存储
- 稀疏性
- 扩展型强
- 高可靠性
HBase 和 Hadoop
2.2 HBase 的组件及其功能
- HBase 的系统架构包括客户端、ZooKeeper 服务器、HMaster 主服务器和RegionServer。
客户端
- HBase系统的入口 --> 操作HBase
- 通信功能(RPC机制):与HMaster进行管理类通信,与Regionserver进行数据读写操作。
- 支持多种形式:HBase shell、Java、Thrift等
ZooKeeper
- ZooKeeper 是一个高性能、集中化、分布式应用程序协调服务,主要是用来解决分布式应用中用户经常遇到的一些数据管理问题。
- ZooKeeper 是串联 HBase 集群和 Client 的关键。
- 负责协调的任务:
- HMaster选举(最典型的应用场景)
- HBase集群中有多个 HMaster 并存,通过竞争选举机制保证同一时刻只有一个 HMaster 处于活跃状态。
- 类似于 HDFS 的 HA 机制:只有一个 NameNode 处于活跃状态
- 系统容错
- 维护元数据,记录HMaster节点地址
- Region状态管理
- HMaster选举(最典型的应用场景)
HMaster
HMaster是 HBase 集群中的主服务器,负责监控集群中的所有RegionServer,并且是所有元数据更改的接口.
HMaster 服务器通常运行在 HDFS 的 NameNode 上,HMaster 通过Zookeeper 来避免单点故障
HMaster主要负责表和region的管理工作:
(1)管理用户对表的增、删、改、查操作
(2)管理RegionServer的负载均衡,调整region的分布。
(3)Region的分配和移除
(4)处理RegionServer的故障转移。
- HMaster故障不影响当前客户端对数据的访问,因为客户端直接与 RegionServer交互。但需尽快恢复,避免后续操作的正确性。
RegionServer
RegionServer主要负责响应用户的请求,向HDFS中读写数据。
一般在分布式集群当中,RegionServer运行在DataNode服务器上,实现数据的本地性。
RegionServer 是 HBase 中最核心的模块,其内部管理了一系列 Region 对象,每个 Region 由多个 HStore 组成,每个Hstore 对应表中的一个列族的存储。
RegionServer 的功能:
(1)处理客户端读写请求。
(2)处理分批给它的region。
(3)刷新缓存到HDFS中。
(4)处理region的合并和分片。
2.3 HBase数据模型
2.4 HBase Shell
NoSQL数据库原理与应用相关推荐
- 大数据技术原理与应用之【NoSQL数据库】习题
1.如何准确理解NoSQL的含义? NoSQL是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的一类统称,它采用的数据模型并非传统关系数据库的关系模型,而是类似键/值.列族.文档等非 ...
- 大数据技术原理与应用(第五章 NoSQL数据库)
目录 5.1 NoSQL数据库 Not only SQL特点 传统的关系型数据库特点 MySQL集群方式的缺陷 5.2 NoSQL与关系型数据库的比较 数据库原理 数据规模 数据库模式 查询效率 事务 ...
- 大数据技术原理与应用——NoSQL数据库
大数据技术原理与应用--NoSQL数据库 5.1 NoSQL 简介 特点 1.灵活的可扩展性 传统的关系型数据库由于自身设计机理的原因,通常很难实现"横向扩展",在面对数据库负载大 ...
- NoSQL数据库:从故障中恢复数据的原理
当应用程序处理由NoSQL创建的大量非结构化数据时,保持运行的稳定性与有效性是十分重要的.用户在决定持久栈(persistence stack)的主要架构时,了解每个数据库之间的特点与细微差别也非常重 ...
- 大数据技术原理与应用(林子雨)-NoSQL数据库单元测验
1单选(2分) 下列关于NoSQL数据库和关系型数据库的比较,不正确的是得分/总分 A. NoSQL数据库缺乏统一的查询语言,而关系型数据库有标准化查询语言 B. NoSQL数据库具有弱一致性,关系型 ...
- 转:几款主流 NoSql 数据库的对比
转自:http://www.cnblogs.com/vajoy/p/5471308.html 最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoS ...
- NoSQL数据库-MongoDB和Redis
NoSQL数据库-MongoDB和Redis 发布于2012-12-20,来源:比特网 1NoSQL简述 CAP(Consistency,Availabiity,Partitiontolera ...
- HBase、Redis、MongoDB、Couchbase、LevelDB 五款主流NoSQL数据库大比拼
在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资 ...
- nosql数据库学习总结
大数据时代的数据库选择:SQL还是NoSQL? 执行大数据项目的企业面对的关键决策之一是使用哪个数据库,SQL还是NoSQL?SQL有着骄人的业绩,庞 大的安装基础;而NoSQL正在获得可观的收益,且 ...
- 深入解析NoSQL数据库的分布式算法
深入解析NoSQL数据库的分布式算法 摘要:尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依然引发了铺天盖地的关于各种协议和算法的研究以及实践.在这篇文章里,我将针对NoSQ ...
最新文章
- java property异常_Java常见的异常和解决的办法
- 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信
- 编码的喜悦……以及Java中的变异测试
- java统计报表日期工具类
- MyBatis 逆向工程(MyBatis 自动生成接口以及xml)的使用
- 关于if 判断等于0 和‘0’的问题
- java第三方包学习之jsoup
- spring-boot整合场景实例分析
- HTML5新表单新功能解析
- C++ STL vector详解
- vim配置运行python3快捷键_Linux VIM8 Python3 编辑器配置文件
- 【学习技巧和心得】 - 如何将学习资源转化成图文笔记?
- KubeCon上海“行业客户云原生最佳实践日“成功举办,云原生在各行业落地生花...
- ACL2021 | 任务型和开放域对话系统
- 交换机运维-排查用户反应网速卡的问题
- 【软件测试】资深测试聊一聊,测试架构师是怎么样的,做一名成功的测试工程师......
- ROS2报错缺少“diagnostic_updater“,CMake did not find diagnostic_updater. 解决思路
- python编写赛车_90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来
- 使用 html2canvas 生成图片
- 微信转账记录删除了服务器还有吗,微信转账记录删除了还能查到吗,怎么查删掉的...
热门文章
- 有哪些知名的短信接口提供商
- 短信平台接口怎么选择?看这一篇就够了
- Linux安装GIMP
- 激光雷达(LiDAR)| 第一节:点云处理库与软件介绍
- 使用mat工具分析对比dump文件
- Visio图片导出不清晰
- 此版本专旧版本为android,关于Android9.0 此应用专为旧版Android打造,因此可能无法正常运行。请尝试检查更新或与开发者联系...
- 乌班图服务器系统升级,快速从Ubuntu 20.10升级到Ubuntu 21.04的方法
- VScode配置go空格缩进替代tab
- bsvadvaanjalvsc