数据库知识学习

数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。
当今互联网中最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。
关系型数据库:
虽然网状数据库和层次数据库已经很好的解决了数据的集中和共享问题,但是在数据库独立性和抽象级别上扔有很大欠缺。关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
代表有:Oracle和MySQL
非关系型数据库:
优点是:NoSql数据库在特定的场景下具有高效率和高性能,它是作为对传统关系型数据库的一个有效的补充,经常用来作缓存。
(1)键值存储数据库(key-value)
键值数据库就类似传统语言中使用的哈希表。可以通过key来添加、查询或者删除数据库,因为使用key主键访问,所以会获得很高的性能及扩展性。简单、易部署、高并发。
代表产品:Memcached、Redis、MemcacheDB
(2)列存储(Column-oriented)数据库
列存储数据库将数据存储在列簇中,一个列簇(一些列的集合)存储经常被一起查询的相关数据,因为它是通过列簇来查询的。这种数据库通常用来应对分布式存储海量数据。
典型产品:HBase
(3)文档数据库
文档数据库会将数据以文档形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名词与对应值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或JSONB等多种形式存储。
典型产品:MongoDB、CouchDB

Hadoop:
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群的威力进行高速运算和存储。
从其定义就可以发现,它解決了两大问题:大数据存储大数据分析。也就是 Hadoop 的两大核心:HDFSMapReduce
1,HDFS(Hadoop Distributed File System)是可扩展、容错高、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储。
2,MapReduce 为分布式计算框架,包含map(映射)和 reduce(归约)过程,负责在 HDFS 上进行计算。

Hadoop存储-HDFS

Hadoop HDFS 的架构是基于一组特定的节点构建的,如图:
数据库知识学习_第1张图片

(1)名称节点(NameNode)
它是一个通常在HDFS架构中单独机器上运行的组件,负责管理文件系统名称空间和控制外部客户机的访问。NameNode决定是否将文件映射到DataNode上的复制块上。
(2)数据节点(DataNode)
数据节点也是一个通常在HDFS架构中的单独机器上运行的组件。Hadoop集群包含一个NameNode和大量DataNode。数据节点通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。

数据节点响应来自HDFS客户机的读写请求。它们还响应来自NameNode的创建、删除和复制块的命令。名称节点依赖来自每个数据节点的定期心跳(heartbeat)消息。每条消息都包含一个块报告,名称节点可以根据这个报告验证块映射和其他文件系统元数据。如果数据节点不能发送心跳消息,名称节点将采取修复措施,重新复制在该节点上丢失的块。

(3)第二名称节点(Secondary NameNode)
第二名称节点的作用在于为HDFS中的名称节点提供一个Checkpoint,它只是名称节点的一个助手节点。

通过下面这段内容理解一下Secondary NameNode的作用。
fsimage 是 NameNode 启动时对整个文件系统的快照;edits 是在 NameNode 启动后对文件系统的改动序列。
如图 1-4 所示,Secondary NameNode 会定时到 NameNode 去获取名称节点的 edits,并及时更新到自己 fsimage 上。这样,如果 NameNode 宕机,我们也可以使用 Secondary-NameNode 的信息来恢复 NameNode。并且,如果 Secondary NameNode 新的 fsimage 文件达到一定阈值,它就会将其拷贝回名称节点上,这样 NameNode 在下次重启时会使用这个新的 fsimage 文件,从而减少重启的时间。
数据库知识学习_第2张图片

文件在客户端时会被分块,这里可以看到文件被分为 5 个块,分别是:A、B、C、D、E。同时为了负载均衡,所以每个节点有 3 个块。下面来看看具体步骤:
1.客户端将要上传的文件按 128M 的大小分块。
2.客户端向名称节点发送写数据请求。
3.名称节点记录各个 DataNode 信息,并返回可用的 DataNode 列表。
4.客户端直接向 DataNode 发送分割后的文件块,发送过程以流式写入。
5.写入完成后,DataNode 向 NameNode 发送消息,更新元数据。
这里需要注意:
1.对于常见的3个复制块。写 1T 文件,需要 3T 的存储,3T 的网络流量。
2.在执行读或写的过程中,NameNode 和 DataNode 通过 HeartBeat 进行保存通信,确定 DataNode 活着。如果发现 DataNode 死掉了,就将死掉的 DataNode 上的数据,放到其他节点去,读取时,读其他节点。
3.宕掉一个节点没关系,还有其他节点可以备份;甚至,宕掉某一个机架也没关系;其他机架上也有备份。

Hadoop计算-MapReduce

MapReduce 是 Google 提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(归纳)”以及它们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。

HBase

HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。
HBase架构原理详解:
https://www.cnblogs.com/steven-note/p/7209398.html

hive

是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计。hive十分适合对数据仓库进行统计分析。
hive下的SQL特点:
1.不支持等值连接,一般使用left join、right join 或者inner join替代。
2.不支持行级别的增、改、删,所有数据在加载时就已经确定,不可更改。
3, 不支持事务。

你可能感兴趣的:(数据库,Hadoop,链表,c++,编译器)