NoSQL数据库

NoSQL在大数据体系中的作用

  • 数据存储工具
    • 把数据存储或映射为表格形式
    • 把数据存储成适于使用的模式
    • 实现分布式存储
  • 数据管理工具
    • 对数据“库”、“表”或类似的概念进行管理
    • 对存储的数据进行管理,对数据的性能和可靠性等进行管理
    • 对分布式系统进行管理,对系统的配置方式、运行状态等进行管理
  • 数据查询工具
    • 快速查询海量数据
    • 提供易用的客户访问接口
    • 一般无法进行过于复杂的查询,或查询性能极低

NoSQL一般不会

  • 提供实时数据采集功能
  • 提供复杂的数据预处理、数据分析、数据挖掘等功能
  • 提供完整的数据可视化等功能

大多数NoSQL系统需要在分布式系统中存储数据

  • 希望通过并行处理提高数据查询和处理效率,因此进行数据分片, 使用布隆过滤器等
  • 为提高可靠性采用数据多副本机制,由此带来一致性等问题,进而延伸出主从结构下的分布式选举等问题(引出Paxos),以及集群时间同步等问题
  • 系统可伸缩(横向扩展、移除或更换故障节点等)
  • 系统要易用
  • 大数据场景下,数据一般是一次写入多次读取的,很多设计策略是与此相关的

HBase的基本特点

  • 分布式、主从架构、底层基于HDFS,基于Java语言开发
  • 可伸缩、高可靠性、易于使用
  • 基于键值对+基于列(族)的数据存储模式
  • 可以基于Shell进行操作
  • 原生的Java语言调用接口,支持远程调用
  • 支持通过thrift,实现跨语言、跨平台调用
  • 实现数据的分布式存储和统一管理
  • 实现数据条目的随机增删改
  • 实现大数据的实时查询

HBase的主要弊端

  • 不支持复杂的统计和处理操作
  • 不支持二级索引,行键天然是一级索引,对于键值对内容无法方便的实现 索引
  • 对时序数据的存储,需要考虑热点问题
  • 是否可以让“NoSQL”支持“SQL”语言

HBase和关系型数据库对比

  • 无模式和表结构、数据结构简单
  • 无法实现事务、多表查询等机制
  • 可以存储多个版本的数据
  • 分布式存储、易扩展
  • 面向列的存储模式,更适合存储稀疏数据

HBase和其他NoSQL对比

  • 需要部署HDFS+HBase,甚 至Zookeeper等组件,部署过程 相对复杂
  • 大数据的(简单)查询功能出色
  • 和MapReduce、Spark等大数据 处理工具配合良好
  • 采用主从式架构
  • 应用广泛、扩展组件很多

表名、列族名

行键、列名、时间戳、值

Hmaster和Hregionserver

HMaster负责对Hregionrever的管理范围 进行分配,但不负责管理用户数据表

每个Hregionrever只会对一部 分分区进行管理——负责数据的写入、 查询、缓存和故障恢复等。用户表最终 是以文件形式存储在HDFS上,但如何写入并维护这些文件,则是由 Hregionrever负责的

bin:集群控制命令和HBase shell命令

lib:HBase的各种库包(Jar包)

conf:配置文件

通过浏览器访问:http://hmaster:16010/ 查看HBase的运行情况

进入shell:hbase shell

hbsae shell

  • 不支持SQL
  • 列名、表名采用单括号包括
  • 参数大小写敏感
  • 同一个表中不能有同名的列族

Hbase基本操作

  • create:创建表
  • alter:修改表结构
  • describe:描述表结构
  • exist:确认表是否存在
  • list:显示所有表名列表
  • disable/enable:禁用/解禁一个表
  • disable_all/enable_all:禁用/解禁所有表
  • is_disabled:确认表是否被禁用
  • drop/drop_all:删除一个或全部表
  • truncate:禁用、删除并重建一个表
  • Put:即插入(insert)和更新 (update)
  • get:根据行键获取一条数据
  • scan:扫描一个表,可以指定行键范围或使用过滤器限制范围
  • count:查询逻辑行的数量

HBase的存储和读写机制

  • 预写日志WAL的作用
    • 出现节点宕机、线程重启等问题时,memstore中未持久化的数据会丢失。当Regionserver恢复后,会查看当前WAL中的数据,并将记录进行重放(replay),根据记录的表名和分区名,将数据恢复到指定的store中
  • 数据的写入
    • Regionserver负责向对应的表分区和列族中写入数据,管理缓存和排序,以及实现容错
  • 打破HDFS无法随机更新的限制
  • HFile的结构及布隆过滤器如何发挥作用
    • Storefile可以看做简单封装的HFile,其内容一旦写入就无法更改
      • HFile是一种经过排序的序列化文件
      • 内容基本都是以键值对方式存储的,易于被HDFS分块
      • Hfile格式仍处在不断演进当中,目前通用的是Hfile v3版本
      • Storefile对应列族
  • 合并与拆分,面向列族还是分区
    • 分区(Region):对应表的横向拆分
    • Store:对应(列族)纵向拆分
    • HBase三种分区方式:自动分区、预分区和手动拆分

HBase的高可用性机制

HBase可以进行的扩展操作

  • 协处理器机制
    • 轻量级的分布式处理机制
    • Observer和Endpoint两种模式,Observer模式就如同关系型数据库中的 触发器,而Endpoint如同关系型数据库中的存储过程
  • 基于HBase的分布式处理
    • Hive可以直接建立、读取HBase的表 ,并映 射为Hive表
    • Hive提供了类似SQL和Hive QL语言
    • Hive在进行复杂的数据统计和聚合操作时,省去了编写MapReduce程序的过程,提高了易用性
    • Mapreduce可以直接将HBase表作为数据源或作为处理目的地
  • 扩展开源软件
    • 面向时序数据管理的OpenTSDB
    • OpenTSDB所存储的实际数据都存储在名为tsdb的HBase表中
    • 提供SQL语言支持的Apache Phoenix

MongoDB

  • 文档型的数据模型,可以在一个表中存储复杂的数据结构
  • 支持分片、多副本等分布式数据管理机制,也可以单机使用
  • 支持地理信息索引
  • 具有一个轻量级的分布式文件系统
  • 并未提供类似SQL的操作方法
  • 可以和Java、Python以及Javascript等常见语言配合使用,支持同步或异步的调用方式

图数据库

  • 图数据库是一种简单易用的、处理点 线关系的数据库
  • 在Windows上安装方便
  • 一般单机使用,而非集群化部署
  • 通过Cypher语言操作数据

内存数据库

  • 可以看作键值对数据库的分支
  • 通常作为WEB架构中的缓存系统
  • 其分布式部署策略和Cassandra、 MongoDB等均有相通之处

全文检索和搜索引擎

  • 可能和Hadoop、HBase建立联 系
  • 学习的重点在于算法和优化
  • 可以直接使用Solr、 Elasticsearch等集成化软件

CPA和BASE、弱一致性

分片和多副本的代价

采用灵活的数据模型,是为了分布式环境下更好的灵活性和分片性能

关系数据库的特点

  • 数据的存储将独立于硬件
  • 呈现给 用户的是二维表结构
  • 可以通过SQL语句实现数据定义和操作
  • 支持事务和ACID一致性

非关系型与关系型数据库的比较

  • 非关系的数据模型
  • 弱化模式或表结构、弱化完整性约束、弱化甚至取消事务机制
  • 无法支持,或不能完整的支持SQL语句
  • 实现强大的分布式部署能力——一 般包括分区容错性、伸缩性和访问效率( 可用性)等
  • 不同类型的关系型或NoSQL数据库侧重点 不同,不能简单地说谁更优秀

大数据4V特征

  • 大量(volume)
  • 高速(velocity)
  • 多样(variety)
  • 低价值密度(value)

NoSQL的主要特点

  • 非关系型存储模式
  • 通过牺牲事务、一致性、SQL语句等RDBMS中重要的机制,换取更好的分 布式部署特性
  • 和RDBMS有不同的侧重点(大数据量、简单查询)
  • 习惯统称,并非严谨定义

ACID

原子性、一致性、隔离性、持久性

CAP

一致性、可用性、分区容错性

BASE

最终一致性,即事务存在中间状态,但经历一段时间之后,最终会一致

数据分片的目的

使数据均匀分布到多个节点上,执行查询或处理任务时,各个节点只查询自身数据, 实现并行处理

架构

  • 主从架构:主节点负责存储元数据,和客户端访问接口,从节点负责存储数据分片
  • 对等结构:无主节点,各个节点都可以接受客户端访问请求,如果自身没有存储相关 分片,则该节点回去向其他节点查询数据

关系模型

实体、属性、实体标识符、联系

关系模型中的完整性约束

域完整性、实体完整性、参照完整性、用户自定义完整性

NoSQL经常用来处理日志、存档资料类的信息,例如交易记录

RDBMS经常用来处理业务数据,例如账户余额

在分布式数据管理中,需要保持集群的高性能、高可靠性和易用性

进行分布式数据管理的主要目的是通过横向扩展提升数据存储、管理、查询和 处理性能

负载均衡:数据分片,并均匀分布在各个节点上;计算本地化,节点只查 询自身的数据

集群可伸缩:集群规模可以随着数据增长进行横向扩展

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q3qRLpFf-1625117886704)(https://i.loli.net/2021/06/26/5t2cN4oIX6TPZUy.png)]

HDFS:分布式文件系统

YARN:分布式资源管理

MapReduce:分布式计算框架

Hive:分布式数据仓库

HBase:分布式NoSQL数据库

Spark、Tez:分布式计算引擎

Flume:数据采集

Sqoop:和关系型数据库进行数据互转

Oozie/Hue:工作流、可视化操作

Ambari/Cloudera:集成化解决方案

Mahout:分布式数据挖掘

Pig:通过简化的数据操作语言执行MapReduce

Zookeeper:分布式协调服务

NameNode:负责存储文件和分块信息

SecondaryNameNode:只负责帮助NameNode压缩元数据

DataNode:负责存储具体分块

一台物理节点可能同时部署为NN、SNN、DN

NameNode数据结构:

  • FSImage:只读状态,在NN启动时整体读入内存
  • EditLog:以日志方式存储文件信息的变动情况

在NN启动时,构造新的FSImage,并将其读入内存,此过程中HDFS接受读请求,不接受写请求,该过程称为安全模式

EditLog需要定期合并,形成新的FSImage,FSImage文件过大,可能造成启动缓慢

HDFS写数据:

数据一旦写入,则无法被随意修改,否则会提高多副本一致性上的复杂度, 以及提高元数据维护上的复杂度

HDFS读数据:

NN将当前数据副本 的所在节点列表发给 客户端,客户端可以 找到一个可用的节点 进行读取

客户端可以从NN 持 续获得所有数据块的 存储位置,并直接向 合适的DN读取数据

HDFS可以通过http://namnode:50070/查看 系统的状态

stop-dfs.sh

start-dfs.sh

Hive的实时检索能力很弱。因此,Hive一般不会被当作NoSQL数据库使用, 而是作为数据仓库工具或MapReduce的替代性工具使用

Hive可以将HDFS文件映射为二 维数据表,并且支持将SQL语句(实际是Hive QL语言,简称HQL)转化为 MapReduce或Tez过程,其目的是将复杂的MapReduce编程转换为简单的 SQL语句编写

HDFS不能实现表格化管理与查询,无法实现数据的随机更新

输入访问地址:http://localhost:7474/,进入 neo4j的web操作界面

Redis的特点

  • 支持数据多副本、主从复制机制
  • 支持主节点选举机制
  • 在内存管理方面,Redis支持最近最少使用算法(Least Recently Used, LRU)
  • 提供了多种数据持久化(存储到硬盘)策略,常见的策略有RDB和 AOF
    • RDB是指在指定时间间隔,将数据保存为快照(.rdb文件),其经常 用于整个数据集的备份,存储格式比较紧凑,备份恢复性能较高
    • AOF是指逐次记录写入服务器的数据条目,追加到一个.aof文件末尾。 AOF文件的易读性、实时性较好,但文件体积较大
  • 支持发布订阅机制(即可以作为消息队列使用)
  • 支持多种数据格式:字符串(string)、散列(hash)、列表(list)、 集合(set)、有序集合(sorted set)等
  • 支持200多个Redis命令(操作方法)
  • 支持多种主流编程语言
  • 支持“事务”——实际上是一种批处理机制,并非RDBMS的事务
  • 存在多种图形化管理工具

9042(默认的CQL本地服务端口)、9160(默认的Cassandra服务端口)、 7000(Cassand集群内节点间通信端口)、7199(Cassandra JMX 监控端 口)等端口

systemctl start Cassandra

nodetool info

nodetool status

CQL

  • 不支持批量写入(包括insert、 update或delete)
  • 不支持join查询
  • 不支持事务、锁等机制
  • 不支持 group by、having、max、 min、sum、distinct 等分组聚合 查询语法
  • 条件查询时的限制较多

CQL数据类型

  • 字符串
    • ASCII
    • text/varchar
  • 整型
    • tinyint
    • smallint
    • int
    • bigint
    • varint
  • 浮点型
    • decimal
    • float
    • double
  • 时间型
    • data
    • time
    • timestamp
    • timeuuid
    • duration
  • 其他类型
    • blob:任意字节数组
    • boolean
    • counter
    • inet:IP地址
    • uuid

list、map和set类型的列如果是非frozen限定的(序列化),均无法作为主键, 而元组(tuple)类型(col5)无此限制

计数器列不能作为主键,且计数器列不能建立索引

BSON支持的数据类型

  • ObjectID:对象ID,每个文档必 须拥有一个唯一的ID
  • String:utf-8编码的字符串,在 文档中使用双引号引用
  • Boolean:布尔值,true 或者 false
  • Integer:整数
  • Double:浮点数
  • Arrays:数组或者列表
  • Object:嵌入文档,一个值为一 个文档
  • Null:空值
  • Timestamp:时间戳
  • Minkey/Maxkey:BSON中的最 低值和最高值
  • Date:UNIX格式的日期或时间
  • BinaryDate:二进制数据
  • BSoN中还包括正则表达式、 JavaScript代码等
  • 通过支持Arrays,文档可以支持嵌 套

MongoDB支持三种分片策略:升序分片、哈希分片和位置分片,分片在存储时分成默认64M大小的chunk,chunk是数据平衡的最小单位

Mongod:存储实际数据分片

Mongos:用户访问集群的入口,负责与客户端交互,并在内存中缓存分片数据的存储和路由信息,兼具平衡存储的 balancer组件功能

Config服务器:负责持久化存储各类元数据和配置信息

mongod的默认端口为27017

db.createCollection(“mycol”)

db.myCol.drop()

db.createCollection(“cappedC ol”,{capped:true,size:10000}),定长集合

db.mycol.insert({ item1: ‘first item’, item2: ‘second item’, item3 : 1, item4: [‘apple’,‘banana’,‘cherry’] })

db.mycol.find().pretty()

db.mycol.update( { “item3” : { $gt : 0 } } , { $set : { “item2” : “OK”} } );

删除一条,db.collection.remove({“item3” :{$gt:0}},true)

删除全部,db.col.remove({})

常见的管道操作包括:$group、$project 、$match、$sort、$limit和 $skip等

常见的聚合运算符包括:$sum、​$avg、$min/ $max、$first/ $last和 $push等

常见的比较运算符包括:$gt/​$lt、$gte/$lte、$ne等

此外还支持与、或($or)、​$in/$nin等逻辑或范围运算符

db. mycol.createIndex({“item1”:1}),第一个为字段名;第二个1表示升序,-1表示降序

MongoDB支持的索引类型:完全索引、稀疏索引、唯一索引、全文索引、地理位置索引

文档大小限制为16MB,轻量级的分布式文件系统——GridFS

GridFS实际上仍采用MongoDB的文档和集合方式存储分块后的文件——将 文件分块存储为两个集合(格式和普通集合相同)

  • 一个集合称为files,存储文件和分块的元数据信息
  • 另一个集合称为trunk,存储数据分块本身

mongofiles -h node1:27017 -d mydb list,-h参数表示连接到相应的节点和端口。-d参数表示连接到哪个数据库

导入数据mongoimport、导出数据:Mongoexport、数据库备份 mongodump、恢复数据 mongorestore

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值