计算机原理(二)

计算机原理(二)

数据描述的三个领域

1. 现实世界

  现实世界是存在于人们头脑之外的客观世界,是客观事物及其互相的联系。例如学校教学管理中涉及的学生管理、教师管理、课程管理。管理者要求:每个学期开学时制作学生选修课程情况表,内容包括学号、姓名、课程名、选修课类别(类别分为必修、选修);每个学期结束时制作学生选修课程成绩表,内容包括学号、姓名、课程名、选修课的类别、总评成绩;制作教师授课安排表,内容包括教师号、教师名,课程名,授课类别(授课类别分为主讲、辅导、实验)、学时数、班级数等。这就是现实世界,是数据库设计者接触到的最原始的数据,数据库设计者对这些原始数据进行综合、抽象成为数据库技术所能处理的数据。对现实世界的数据描述,就成为信息世界。

2. 信息世界

  信息世界是现实世界的符号描述,即将客观世界用数据来描述。例如,学生是客观世界的个体,可以用一组数据(学号、姓名、性别、年龄、班级、成绩)来描述,有这样一组数据不见其人便可以了解该学生的基本情况。因此可以说信息世界就是我们所说的数据世界。信息世界中的术语包括:

(1) 实体。客观世界存在的、可以区别的事物称为实体。实体可以是具体的事物,例如学生李,教师张、数学课,也可以是抽象的事件,例如:本学期学生李选修了哪些课程,教师张教授了哪门课程,读者的一次借阅活动等。

(2) 属性。实体有很多特性,每个特性称为实体的一个属性,每个属性有一个类型。例如学生实体的属性有:学号、姓名、性别、年龄、班级、成绩,其中学号、姓名、班级的类型为字符型,性别的类型为逻辑型,年龄的类型为整型。

(3) 实体集。性质相同的实体的集合。例如全体学生的集合,全体教师集合等。

(4) 实体标识符。能够唯一标识实体的属性或属性的集合。如学生实体的属性:学号,能够唯一确定一个学生,因此可以作为学生实体集的标识符。

3. 机器世界

  信息世界中的数据在机器世界中的存储,成为计算机的数据。机器世界中对数据的描述采用数据库技术的专业术语,对应于信息世界的术语有以下四个专业术语:

(1) 记录。对应于信息世界中的每一个实体的数据。例如学生这一实体的一组数据(20100301001,孤傲苍狼,男,20,计算机0901,87)就是一条记录

(2) 字段,对应于信息世界中的属性,在数据库技术中称为字段,学生实体中学号、姓名、性别、班级、成绩都是字段,每个字段都有它的类型、取值范围,字段的取值范围称为字段的域。

(3) 数据文件。对应于信息世界的实体集。由若干个相同类型记录组成的数据集合,在数据库系统中以文件(二维表)的形式存放。

(4) 关键字。能够唯一标识记录的字段或字段表达式,与信息世界中的实体标识符相对应,例如学生实体中的学号可以作为学生的关键字。

  从客观世界到信息世界不是简单的数据描述,而是从客观世界中抽象出适合数据库技术研究的数据。同时要求这些数据能够很好地反映客观世界的事物;从信息世界到机器世界也不再是简单的数据对应存储,而是要设计数据的逻辑结构和物理存储结构。所谓数据的逻辑结构是指程序员或用户用以操作的数据形式,数据的逻辑结构是数据本身所具有的特性,是现实世界的抽象;所谓数据的物理结构是实际存储在存储设备上的数据。

    在数据库系统中,数据的逻辑结构于数据的物理结构之间可以差别很大,数据的逻辑结构面向程序员,数据的物理结构面向机器。数据库管理软件的功能之一,就是要能够把数据的逻辑结构映像为数据的物理结构,把数据的物理结构映像为数据的逻辑结构。

 

关系型数据库理论

关系模型数据库系统的数据结构简单,表示数据及其数据之间的联系均采用关系(二维表),同时关系模型有扎实的数学理论做基础,使得数据的操作可以通过关系的运算来完成。

 

关系及关系模型

    关系是数学上的一个概念,建立在日常生活中所论及的关系概念之上,例如我们通常所说的邻里关系、朋友关系、学生与所选修的课程及该课程的成绩关系等。在这里我们所论及的朋友关系涉及到了互为朋友的双方,在数学上可表示为(张,李);邻里关系也涉及到了互为邻里的双方,表示为(李家,张家);学生与所选修的课程及该课程的成绩关系,涉及到学生、所选的课程以及所取得的成绩,在数学上表示为(李兰,软件基础,90)。(李,张)、(李家,张家)、(李兰,软件基础,90)在数学上称为元组,括号里用逗号隔开的对象,数学上称为元组的分量。

    数学上关系的概念是日常生活中关系概念的抽象,下面给出关系的简单、直观的概念:

   1.关系

    关系是以元组为元素的集合。数据库技术中论及的关系概念应该是:关系是同类型元组的结合。

    简单说,关系就是集合,可以用大写字母R1,R2,R来表示。

    范例:学生与所选课程之间的关系R可以表示为:

    R={(李兰,软件基础,90),(张娜,高等数学,87),(张伟,C语言,76),…,(韶华,英语,79)}

    这样的一个关系R,在日常生活中可通常表示成一个表格的形式:

姓名

课程名

成绩

李兰

软件基础

90

张娜

高等数学

87

张伟

C语言

76

韶华

英语

79

    我们可以看到,这张表表示一个关系,表中的每一行表示一个元组,也就是关系集合的元素,表格中每列的数据表示元组的分量。

 

关系模型

    从上面的例子中可以看到,数学上关系的概念可以用来描述一个二维表,而二维表就是我们现实世界中进行各种档案管理使用的方法,其中记录了大量的数据。这样就用数学理论中的一个概念描述了现实世界的一个对象。关系型数据库就是用关系描述数据的数据库系统。

(1)二维表与关系 

  关系可以用来描述二维表,对应的术语是:

  • 关系←→二维表;
  • 元组←→二维表中的行
  • 分量←→二维表中的列

(2)二维表与关系型数据库中的数据

  一个关系型数据库中的数据对应于一个二维表,其中对应的术语是:

  •  二维表←→一个数据库中的表、一个数据视图
  •  二维表的行←→数据表中的记录
  •  二维表的列←→表记录的字段

范例:

   这里的教学管理系统的E-R模型图,其中实体“学生”的属性为学号,姓名、年龄、性别,分别用S#,SNAME,AGE,SEX表示,实体“课程”的属性为课程号,课程名,授课教师,分别用C#,CNAME,TEACHER表示,实体学生用S表示,课程用C表示,学生与课程之间的关系用SC表示,SC的属性成绩用GRADE表示。

用关系描述教学管理模型的数据:

    分析:在这个E-R图中,实体有学生和课程两个,两个实体之间的联系是多对多的,按照将E-R模型转换成关系模型的转换方法,由于学生实体与课程实体之间的联系是多对多的,所以转换成关系模型时,实体和联系分别转换为关系模式:

    S(S#,SNAME,AGE,SEX)

    C(C#,CNAME,TEACHER)

    SC(S#,C#,GRADE)

这些关系模式集可以描述三类关系,下面是这三类关系模式的关系实例:

  上面的三个关系中,关系S的关键字是:S#(学号),关系C的关键字是:C#(课程号),关系SC的关键字是:S#+C#(学号+课程号)。关键字是能唯一标识记录的字段或字段表达式。这样我们就将现实世界(教学管理系统)用S、C、SC三个关系模式描述清楚了。

(3)关系模型的三类完整性规则

    关系描述了现实世界中的数据,这些数据以数据库(表)的形式存储到计算机中,根据现实世界的变化,计算机中的数据也要进行相应的改变。为了维护数据库数据与现实世界数据的一致性,关系数据库中的数据的建立与数据的更新必须遵守以下规则:

  1. 实体完整性规则:实体完整性规则要求关系中,记录关键字的字段不能为空,不同记录的关键字,字段值也不能相同,否则,关键字就失去了唯一标识记录的作用。
  2. 参照完整性规则:参照完整性规则要求关系中“不引用不存在的实体。”

  例如在联系关系SC中课程号字段出现的课程号,必须在课程关系中存在,假如在关系C中找不到“小学算术”这个课程的课程号,而SC中出现了记录:(李冰,CC01(小学算术),95),那么这条记录就是一条错误的记录,因为它违背了参照完整性规则

参照完整性规则可以理解如下:

  如果属性集K是关系模式R1的关键字,K也是关系模式R2的属性,那么在关系R2中K为外键,在R2的关系中K的取值只允许有两种可能,或者为空值,或者等于R1关系中某个关键字的值。

  其中提到的外键是指:当关系中的某个属性或属性组虽然不是该关系的关键字或只是该关系关键字的一部分,但却是另一个关系的关键字,则成该属性是这个关系的外键,如上面提到的SC关系中的课程号不是SC的关键字,但课程号是关系C的关键字,因此课程号是SC的外键,在关系SC中属性课程名的值只能为空或者为C中课程号字段中的某个值。

  主键不能为空,并且不可以重复,外键可以为空

  3.用户完整性规则:这是针对某一具体数据的约束条件,由应用环境决定。用户定义的完整性规则反映某一具体应用涉及的数据必须满足语义的要求。系统提供定义和检验这类完整性的机制,以便用统一的方法处理它们,不再由应用程序承担这项工作,例如在定义关系模式时,定义关系中的每个字段,对每个字段必须定义该字段的字段名(年龄),字段类型(整型),字段宽度(2位),小数位数(0位),经过这样的定义,在给每条记录的年龄字段输入数据时,可以输入两位整型数据,这就是一种约束,如果我们还想进一步对录入的数据进行约束,以减少数据录入的错误,需要定义一个具体的约束条件(可以写一条规则),把年龄限制在15岁到25岁之间(实际上这是学生的实际年龄范围),以满足实际数据的需要,这就是用户完整性规则,在进行数据操作时由系统负责检验数据的合理性。

总结前面关于关系模型的论述,我们看到,在定义一个关系模式时,需要进行以下三个部分的定义:

  1)   数据结构的定义:数据库中的全部数据及其互相联系都被组织成“关系”的形式,并且关系模型的基本数据结构也是关系。

  2)   数据操作的定义:关系模型提供一组完备的高级关系运算,以支持数据库的各种操作。关系运算分为关系代数和关系演算两类。

  3)   关系模型的三类完整性规则的定义:除了进行数据结构、数据操作的定义,为了确保数据的正确性,还要进行三类完整性规则的定义。

 

关系代数

  关系是一个数学上的概念,是一类集合(以同类型元组为元素的结合),因此关系代数是以集合代数为基础发展起来的,关系是可以进行运算的。如同数字运算的对象和结构都是数字、集合运算的对象和结果都是集合一样,关系运算的对象和结果都是关系。关系运算可以分为两类:

    传统的集合运算:这类运算从关系是集合的定义出发,把关系看出集合,则集合的所有运算对关系也是有效的。这类运算有:关系的并集、交集、差集、笛卡尔积。

    专门的关系运算:这类运算是用来进行数据库的查询操作。这些运算可以把二维表进行任意的分割和组装,随机地由已有的二维表构造出各式各样用户所需要的二维表。这类运算有:投影、选择、连接、除法运算。

 

传统的集合运算

  传统的集合运算是二元运算。所谓二元运算是指运算的对象为两个,比如加法就是二元运算,进行运算的对象是两个数;二元关系运算是指,两个关系进行运算,结果为一个新关系。

(1)关系的并运算

  关系的并运算的运算符号与集合并运算的符号相同,都是∪,关系运算中,只有两个同类型关系的并才有意义。设R1和R2是两个同类型的关系,它们之间的并运算表达式是:R1∪R2,其结果也是同类型的关系,其中R1∪R2的元组或者是R1的元组或者是R2的元组,记为:

    R1∪R2={t|t∈R1∨t∈R2}

      “∨”这个符号的意思是“或”,即t是属于(∈)R1里面的元组,或者t是属于R2里面的元组。所以这里的表达式的意思是R1∪R2产生了一个新的关系,这个新的关系由元组t组成,t可能是来自R1里面的元组,也可能是来自R2里面的元组。

范例:

设R1、R2为学生实体模式下的两个关系:

则由关系并的定义得R1∪R2

(2)关系交运算 

  关系交运算符号与集合交运算的符号相同,都是∩,关系运算中,只有两个同类型关系的交才有意义。设R1和R2是两个同类型的关系,它们之间的交运算表达式是:R1∩R2,其结果也是同类型的关系,其中R1∩R2的元组是由既是R1的元组也是R2的元组构成,记为:

         R1∩R2={t|t∈R1∧t∈R2}

  “∧”这个符号的意思是“且”,即t既是属于(∈)R1里面的元组,同时t也是属于R2里面的元组。所以这里的表达式的意思是R1∩R2产生了一个新的关系,这个新的关系由元组t组成,t既是来自R1里面的元组,也是来自R2里面的元组。

范例:设R1、R2为上述范例中的学生实体模式下的两个关系,求R1∩R2

由关系交运算的定义可得R1∩R2

(3)关系差运算  

  关系差运算的运算符合与集合差运算的符号相同,都是-,关系运算中,只有两个同类型关系的差才有意义。设R1和R2是两个同类型的关系,它们之间的差运算表达式是R1-R2,其结果也是同类型的关系,其中      R1-R2的元组是由R1的元组,而不是R2的元组构成,记为:

  R1-R2={t|t∈R1∧t∉R2}

范例:设R1、R2为上述范例中的学生实体模式下的两个关系,求R1-R2

由关系差运算的定义可得R1-R2

(4)笛卡尔积运算   

   笛卡尔积是关系这类集合所特有的一种运算,其运算符合是乘法运算符“×”,是一个二元关系运算,两个运算对象可以是同类型的关系也可以是不同类型的关系,若R1是r1元元组的集合,R2是r2元元组的集合,则R1×R2是r1+r2元组的集合,R1×R2的元组(元组对应着二维表中的行)是由R1的分量(分量对应着二维表中的列)和R2的分量组成的,记为:

       R1×R2={t|t=(r1,r2)∧r1∈R1∧r2∈R2}

范例:设关系R1、R2分别为学生实体和学生与课程联系的两个关系,求R1×R2。

由笛卡尔积的定义可得R1×R2

  从上例中我们看到R1×R2是一个很大的运算,由R1、R2进行笛卡尔积运算得到的新关系是比关系R1、R2大得多的关系。这个运算的运算量大、占有的存储空间大,并且我们看到在R1×R2关系中,四条记录只有第一条记录有实际意义的,而其他的三条记录均没有实际的意义。我们分析第一条记录,又是一条非常有用的信息,反映了李兰同学的所有信息包括她的学号、姓名、性别、年龄、选学的课程名以及所选课程的成绩,这条记录的信息来源于两个关系中,是两个关系的一种连接。

 

专门的关系运算

  专门的关系运算有选择、投影、关系的自然连接和关系的除法,其中关系的选择运算和投影运算是一元运算,是对一个关系进行垂直和水平分解而得到一个关系,而关系的自然连接和关系的除法是二元运算,是把两个关系的信息根据需要组织成一个新关系,是信息的综合,这几种关系的运算都与记录的查询操作有关。

     (1)选择运算 

  关系的选择运算的运算符是“δ”,关系的选择运算是一元运算,运算的对象是关系,运算的结果也是关系,新关系是原关系的子集,记为:

δF(R)={t|t∈R∧F(t)}

     在上式中δ表示的是选择运算,F是一个条件表达式,R是进行关系运算的对象,δF(R)是选择运算的结果,其元组首先是关系R的元组,并且这些元组要使得条件F为真,即F(t)为真,因此,选择运算也可叙述为:在关系R中选择满足条件F的记录,组成一个新的关系

     范例:设关系R1是实体学生关系模式的一个关系,在关系R1中查找满足年龄小于等于17的学生。

     解决这个问题可以使用选择运算来完成。

  R=δ年龄≤17(R1)={t|t∈R1∧age≤17}

运算的结果为:

  通过这个例子可以看到,关系的选择运算可以用来在一个关系中查找满足条件的记录,由这些满足条件的记录组成的新关系就是选择运算的结果。在这个例子中条件是学生关系中记录的年龄字段的值小于等于17。选择运算是对关系进行水平分割生成用户需要的关系。

(2)投影运算 

  关系投影运算的运算符是“Ⅱ”,关系投影运算是一元运算,运算的对象是关系,运算的结果也是关系,新关系的元组是在原关系的元组中选出的若干个分量组成的元组,记为:

     Ⅱti1,ti2,…tim(R)={t|t=(ti1,ti2,…tim)∧(t1,t2,…,tk)∈R}(其中K>im)

     上式中“Ⅱ”是投影运算的运算符,R是投影运算的运算对象,(t1,t2,…,tk)是关系R的元组,(ti1,ti2,…tim)是投影运算所得到新关系的元组。

     范例:设S是学生关系模式的一个关系,在某次查询中要求查找每个学生的年龄

     解决这个问题,可以使用投影操作:

  R=Ⅱ姓名,年龄(S)={t|t=(姓名,年龄)∧(学号,姓名,性别,年龄)∈S}

运算结果R为:

  在关系R中查找某个学生的年龄比在关系S中查找某个学生的年龄运算量要小得多。

  投影运算是对关系进行垂直分割,产生用户所需要的关系

(3)连接运算  

  连接运算与投影和选择运算不同,连接运算是将两个关系连接起来,以满足查询任务的要求,连接运算是二元运算。实际上,关系笛卡尔积运算就是一种连接运算,是两个关系的最大连接。笛卡尔积运算的结果,产生了很多没有实际意义的记录,而连接运算是将两个关系连接起来,获得与用户查询有关的新关系。关系的连接有两类;条件连接和自然连接

 

数据库表分割技术

 数据库表分割技术包含以下内容:

  • 水平分割
  • 垂直分割
  • 库表散列

 

水平分割

  什么是水平分割?打个比较形象的比喻,在食堂吃饭的时候,只有一个窗口,排队打饭的队伍太长了,都排成S型了,这时容易让排队的人产生焦虑情绪,容易产生混 乱,这时一个管理者站出来,增加多个打饭窗口,把那条长长的队伍拦腰截断成几队。更形象一点的理解,你拿一把“手术刀”,把一个大表猛的切了几刀,结果这个大表,变成了几个小表。

  水平分割根据某些条件将数据放到两个或多个独立的表中。即按记录进分分割,不同的记录可以分开保存,每个子表的列数相同。水平切割将表分为多个表。每个表包含的列数相同,但是数据行更少。例如,可以将一个包含十亿行的表水平分区成 12 个表,每个小表表示特定年份内一个月的数据。任何需要特定月份数据的查询只需引用相应月份的表。

  通常用来水平分割表的条件有:日期时间维度、地区维度等,当然还有更多的业务维度。

  下面我举几个例子来解说一下 

  • 案例1:某个公司销售记录数据量太大了,我们可以对它按月进行水平分割,每个月的销售记录单独成一张表。 
  • 案例2:某个集团在各个地区都有分公司,该集团的订单数据表太大了,我们可以按分公司所在的地区进行水平切割。 
  • 案例3:某电信公司的话单按日期、地市水平切割后,发现数据量太大,然后他们又按品牌、号码段进行水平切割 

  水平分割通常在下面的情况下使用:
  (1)表数据量很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,加快了查询速度。 
  (2)表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。 
  (3)需要把数据存放到多个介质上。 
  (4)需要把历史数据和当前的数据拆分开。

  水平分割优点: 
    1:降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,加快了查询速度。

  水平分割缺点: 
    1:水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。 

 

垂直分割

  什么是垂直分割呢?打个形象的比喻,一个小公司通过短短几年发展变成了一个跨国大企业,以前的部门架构明显不能满足现在的业务发展,CEO噼里啪啦的把公司分成了财务部、人事部、生产部、销售部门.....,一下子成立了多个部门,各司其职。这个还算比较形象吧,有木有?呵呵 
  垂直分割表(不破坏第三范式),把主键列和一些列放到一个表,然后把主键列和另外的一些列放到另一个表中。将原始表分成多个只包含较少列的表。如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割。

  垂直分割优点: 
  1:垂直分割可以使得行数据变小,一个数据块(Block)就能存放更多的数据,在查询时就会减少I/O次数(每次查询时读取的Block 就少)。 
  2:垂直分割表可以达到最大化利用Cache的目的。 
  垂直分割缺点: 
  1:表垂直分割后,主码(主键)出现冗余,需要管理冗余列 
  2:会引起表连接JOIN操作(增加CPU开销)需要从业务上规避

 

库表散列

  表散列与水平分割相似,但没有水平分割那样的明显分割界限,采用Hash算法把数据分散到各个分表中, 这样IO更加均衡。一般来说,我们会按照业务或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,散列128张表,则应就能够低成本的提升系统的性能并且有很好的扩展性

 

大数据以及Hadoop

什么是大数据

  大数据指的就是要处理的数据是TB级别以上的数据。大数据是以TB级别起步的。在计算机当中,存放到硬盘上面的文件都会占用一定的存储空间,例如:

  

  文件占用的存储空间代表的就是该文件的大小,在计算机当中,文件的大小可以采用以下单位来表示,各个单位之间的转换关系如下:

  

  平时我们在我们自己的电脑上面常见的就是Byte、KB、MB、GB这几种,那么究竟什么是大数据呢,大数据的起步是以TB级别开始的,1TB=1024GB,而我们处理的数据可能会到达PB级别,1PB=1024TB,那可想而知,数据量是多么庞大,所以大数据指的就是要处理的数据是TB级别以上的数据。而对于这些TB级别以上的数据,一般情况下,一台计算机的硬盘存储空间是无法存储那么大的数据,我们现在的普通电脑一般都是一块硬盘,而硬盘容量一般都是500GB左右,有的是1TB,假设现在有1PB的数据要存储,我们给每一台计算机配置10块硬盘,每一块硬盘都是1T的存储容量,那么也得要使用100多台电脑才能够存储得下1PB的数据。所以说,当我们的数据规模达到一定的程度的时候,我们以往的一些问题的解决办法在这种场景下已经变得不适用了。

1.2、大数据的特征

  

  大数据,顾名思义,第一个特征就是数据量大,需要非常大的存储空间进行存储,而如果要处理这些海量的数据,那么计算量可想而知,所以计算量非常庞大。而这些数据的来源往往也是多样化的,数据的格式也是多样化的,在我们平时的应用系统开发中,我们要处理的数据来源大多数是存储在数据库中的数据又或者是存储在文件当中,而在大数据时代,我们一个系统要处理的数据来源是多种多样的,这些数据的来源可能是来自数据库,也可能是来自一些监控采集数据,或者是一些科研数据,而数据的格式可能有普通文本,图片、视频、音频、结构化的,非结构化的等等,反正什么样的数据都有。在大数据时代,数据的增长速度是非常快的,例如我们每天打电话,发短信,我们打出去的电话和发出去的短信在移动和联通公司都会有相应的记录,而这样的数据每天都会产生几亿条,数据量的增长速度可想而知,因此要求处理数据的应用系统的处理速度也要快,当我们想展示一些数据给用户看时,如果应用系统的处理速度不够快,那么给用户的体验是非常差的。另外,在大数据领域,我们从海里数据中能够提取到的相对有价值的数据也是非常有限的,我们处理几十个T的数据,从这些数据当中能够提取出来的有价值的信息也是非常少的,大数据分析要想得到一些有价值的结果,那么要求数据要比较全。比如,我们想分析一个用户的购物习惯,她平时喜欢在京东和天猫、淘宝这些电子商务网站上面进行购物,我们分析她在京东商城上面的购物行为时,我们不光要分析她最近一次的购买行为,还要分析她很长一段时间内的历史购买行为,以及在其他电商网站的购买行为,如果我们真的想一体地分析用户的生活习惯,那么不光是要分析她的购物行为,还要分析她的社交行为,比如在一些社交网站上面平时和哪些人联系最多,平时喜欢讨论一些什么话题,从事的职业,年龄,性别等,拿到的数据越全,我们分析的结果就会越准确,所以大数据不光是要求数据量要大,更重要要的是数据要全面,要多维度的,这样我们提取到的数据才是比较有价值,比较准确的。大数据处理领域在价值这一块是稀疏型的,从海量数据当中能够提取到的有价值的数据是非常稀少的。

1.3、存在有大数据的行业

  放眼观世界,现在各行各业每天都会产生大量的数据,21世纪是一个互联网时代,一个信息化的时代,我们这一代人都不可避免地在一些IT系统当中留下我们的脚印,存在有大数据的典型的行业有以下几个行业:

  

  互联网企业是最早收集大数据的行业,最典型的代表就是Google和百度,这两个公司是做搜索引擎的,数量都非常庞大,每天都要去把互联网上的各种各样的网页信息抓取下来存储到本地,然后进行分析,处理,当用户想通过搜索引擎搜索一些他们关心的信息时,Google和百度就从海量的数据当中提取出相对于对用户而言是有用的信息,然后将提取到的结果反馈给用户,据说Google存储的数据量已经到达了上百个PB,这个数据量是非常惊人的。类似于Fackbook这样的SNS(社交网站)因为用户量比较多,用户每天在网站上面分享一些文章,图片,视频,音频等信息,因此每天产生的数据量也是非常庞大的。

 

大数据技术要解决的技术难题

海量数据如何存储?

  海量数据的存储问题也不是今天才有的,很早以前就出现了,一些行业或者部门因为历史的积累,数据量也达到了一定的级别,当一台电脑无法存储这么庞大的数据时,采用的解决方案是使用NFS(网络文件系统)将数据分开存储,NFS系统的架构如下图所示:

  

  NFS这种解决方案就是同时架设多台文件服务器,如下图所示:

  

  然后在文件服务器上面设置共享目录,例如图中显示的【D:\software、E:\aa\bb、F:\dd\cc、E:\images】

  

  这样我们就可以把文件分类存放到各个文件服务器上面的共享目录当中,一台电脑的存储空间不够用,那么我们就将数据分散到多台电脑进行存储,而这些文件服务器上面的共享目录对于用户来说是透明的,用户会以为自己存放数据的【Software、Tools、film、music】这些目录都是属于【Itdc.com.local】这台文件服务器里面的【public】目录下的子目录,在NFS系统中,【Itdc.com.local】这台文件服务器只是起到一个中转站作用,将用户需要存放的海量数据分类存放到各个文件系统当中,这就解决了大数据的存储问题了。当用户需要访问分散在各个文件服务器中的文件资源时,它只需要访问【Itdc.com.local】这台文件服务器就可以了。

  NFS虽然是解决了海量数据的存储问题,但是在大数据背景下,这种存储方案是不适用的,大数据不光是要解决数据存储问题,更重要的是海量数据的分析,而NFS在海量数据分析方面不能够充分利用多台计算机同时进行分析。

 

海量数据如何计算

  一个实际的需求场景——日志分析

  对日志中每一个用户的流量进行汇总就和,如下图所示:

  

  对于这样的一个日志文件,如果只有这么几行数据,我们一般会采用这样的处理方式:
    1、读取一行日志
    2、抽取手机号和流量字段
    3、累加到HashMap中
    4、遍历输出结果

  那么问题来了,如果数据量变得很大呢,比如一个日志文件里面有几个GB数据,

  1. 如果仍然一行一行去读,那么就会因为磁盘的IO瓶颈导致效率太低,速度太慢。
  2. 如果一次性加载到内存,那么就会因为单台计算机的内存空间有限而导致内存溢出。
  3. 如果将中间结果全部缓存到HashMap中,那么也会因为单台计算机的内存空间有限而导致内存溢出。
  4. 可以选择采用多线程处理,但是依然无法改变资源瓶颈的现实,因为一台计算器的CPU资源,内存资源,磁盘IO瓶颈是定,创建再多的线程也无法改变这个现实。

  所以当一个日志文件里面存储了几个GB数据,那么这种情况下就不能采用这种传统的处理方式了。可以看到,在大数据背景下,我们一个简单的业务场景,比如这里的统计用户流量,在数据量变得很大的时候,原来不是问题的一些东西现在都成了问题。那么这些问题该如何解决呢?

解决思路一

  纵向扩展,也就是升级硬件,提高单机性能(增加内存,增强CPU、用更高性能的磁盘(如固态硬盘)),比如可以购买IBM的高端服务器。

  

  优点:

    1、简单易行
  缺点:

    1、单台计算机的扩展空间有限,CPU、内存、磁盘再怎么扩展也是有限的,无法无限扩展。

    2、成本高(高端服务器非常昂贵,几百万甚至上千万一台,一般的小公司承受不起这样高昂的成本)

解决思路二  

  横向扩展,用多台节点分布式集群处理 (通过增加节点数量提高处理能力,这里说的节点指的就是一台计算机)

  

  核心思想:任务分摊,通过协作来实现单节点无法实现的任务。

  优点:

    1、成本相对低(可采用普通机器)

    2、易于线性扩展

  缺点:

    系统复杂度增加,我们要将我们的web应用部署到每一个节点上面,而多个节点协同工作时就要考虑以下几个问题
      1、如何调度资源
      2、任务如何监控
      3、中间结果如何调度
      4、系统如何容错
      5、如何实现众多节点间的协调

    分布式计算的复杂性就体现在这样的5个问题里面。

 

Hadoop相关概念介绍

大数据行业的标准——Hadoop

  Hadoop是一个开源的可运行于大规模集群上的分布式文件系统和运行处理基础框架
  Hadoop擅长于在廉价机器搭建的集群上进行海量数据(结构化与非结构化)的存储与离线处理。

  Hadoop就是一门用来处理大数据的技术,就是用来解决上述提到的分布式计算里面的5个技术难题的。

Hadoop的Logo图片

  

Hadoop的由来

  

Hadoop的核心组件

3.4.1、海量存储——HDFS(Hadoop分布式文件系统,Hadoop Distributed File System)

  • 分布式易扩展
  • 廉价易得
  • 高吞吐量
  • 高可靠性

3.4.2、分布式并行计算——资源调度(Yarn)+编程模型(MapReduce)

  • 大容量高并发
  • 封装分布式实现细节
  • 大大提高分析效率

Hadoop的学习路线

  1. Linux系统基本操作能力
  2. java开发语言
  3. Hadoop核心组件
  4. MapReduce或Spark等编程模型
  5. Zookeeper-Sqoop-Flume等工具组件
  6. NoSQL技术,Hbase
  7. 数据分析挖掘、机器学习、Mahout

学习Hadoop技术的书籍推荐

  1、Hadoop权威指南第三版
  2、Hadoop技术内幕

  3、Hadoop实战

 

云计算的概念

一、云计算的基本概念

  "云"这个词已经被说得烂到不能再烂了。云计算,云平台,云+端,云服务,云……但与很多行业里的朋友聊天发现,其实大家对云计算到底是怎么个玩意,并不是太了解。作者今天为大家梳理一下,各种各样的“云”,葫芦里都在卖什么药。

  云是网络、互联网的一种比喻说法,计算可以理解为计算机,因此云计算的基本模型,就是远程计算服务:用户通过网络连接到计算机上,获取计算服务。而远程计算机,因为规模效应,可以提供比个人计算机强大若干个数量级的计算能力,可以根据用户需求提可供弹性伸缩的计算资源,可以大大降低用户获取相同计算结果花费的成本。这三点其实都很容易理解。

  1.计算能力。用户的个人计算机一台智能配置一颗CPU,但云计算远程调用的计算机集群可能有成百上千颗CPU,计算能力天壤之别。

  2. 弹性的计算资源。个人电脑想要增加内存,只能重新买一根内存条来安装。而云计算的弹性伸缩能力,可以做到点下鼠标,内存就变成了8G。

  3. 低廉的使用成本。由于规模效应,以及按需使用的分配原则,硬件成本低,资源闲置率也低,所以也进一步降低了云计算的使用成本。

二、云计算的服务形式

  其实这是作为普通用户,或者从业人员更关心的话题:使用云计算的正确姿势是什么?

  云计算提供的服务目前有三种方式:IaaS层,PaaS层以及SaaS层。

  IaaS(Infrastructure-as-a- Service):基础设施即服务,常见形式是硬件服务器租用。阿里巴巴、腾讯、京东云鼎提供的就是IaaS层为主的云计算服务。IaaS层的云服务配置 灵活,但使用起来更为复杂,适合大型的、后台处理业务复杂的项目选用。IaaS层的服务目前基本已全面收费。

  PaaS(Platform-as-a- Service):平台即服务,常见形式是提供Web托管的应用引擎(App Engine)。我估计PaaS层是大家最不熟悉的一类服务,但恰好,PaaS层是最适合多数开发者选用的云计算服务。PaaS层可以被理解为在IaaS 层提供的硬件服务之上,还额外搭建好了服务器环境、中间件、数据库等。开发者用户只需要将网页代码上传部署,网站就可以运行起来了,既降低了IT运维成 本,还省去了大量的开发与运维工作量。PaaS平台目标的产品包括:京东云擎(JAE)BAESAE,目前京东JAE是全免费,BAE、SAE是收费的,BAE根据每日收费,SAE是根据使用服务来收费。稳定性都存在一些问题,JAE、SAE相比而言较为稳定。

  SaaS(Software-as-a- Service):软件即服务,常见的形式是提供Web端应用,按需购买使用,著名的CRM服务提供商Salesforce就是此类代表。国内提供 SaaS服务的包括阿里云、京东电商云、新浪云商店等。SaaS层服务目前收费与免费模式平分秋色,还暂无定论。

三、个人云服务

  个人云服务,其实谈不上真正的“云计算”,因为它只有“云”,没有“计算”。再退一步讲,所谓“云”,其实也就是一个移动网络而已,没有任何可值得神秘的地方。典型案例便是网易(有道)旗下多款产品:网易云相册、云音乐、云阅读、云阅读等等。

  甚至有人称,QQ早年与ICQ竞争的时代,ICQ只能将联系人保存在计算机本地,而QQ可以将联系人保存到服务器上,因此QQ是最早的云计算厂商。 诸如此类的说法, 都是由于对云计算知识的极度贫乏而衍生出来的误读。真正的云计算是技术门槛、资金投入、回报周期、现金流等问题都很突出的行业,只有土豪玩家敢全面布局。 稍有实力的玩家可以做一两个点,多数玩家被排除在门槛之外。

 

云计算红的共享数据库

摘要

   随着云计算的出现,出现了很多新的名词,像云数据库、云存储、弹性扩容,资源隔离等词汇。下面就大家炒的比较热的“共享型数据库”做一下解释,给大家剖析什么叫“共享型数据库” 

什么是共享型数据库

  谈及“共享型数据库”,最让我们困惑的是“共享型”三个字。 ”共享型“让我们会想到其反义词 — “独享型”。 没错,“共享型数据库”是对比“独享型数据库”的一种针对用户资源所有权的数据库称谓, 它是伴随着云计算出来之后的一种数据库创新,以节约资源为目的,而一般情况下,自己的服务器或PC机上安装的不与人共享的数据称为“独享型数据库”。很多 人不明白共享型数据库的特点,那么我接下来就简单介绍一下。

共享型数据库与独享型数据库的特点对比

     在介绍共享型数据库之前先来分析一下什么叫“独享型数据库”。 “独享型数据库”,顾名思义,“独享”就是自己的数据库,在云计算出来之前,我们几乎没有独享型数据库的概念,因为没有对比,认为所有的数据库都应该叫做 独享型数据库。 “独享型数据库”就比如我们有一块儿地(这块是有地址和门牌号的,好比数据库IP和端口),自己在这块儿地上修一栋房子当仓库(类似于我们创建了一个数据 库), 我们在这栋房子里任意使用房间来存东西 (类似于我们可以创建Table一样)。

      “共享型数据库”是为节省资源、降低开发者成本孕育而生的,很多人一起共同使用这栋楼房,但是这栋楼房不是属于具体某一个人, 是雇主的资产。在云平台的世界里,雇主是提供云数据库的供应商,比如“京东云擎”, 使用服务的人称为“租户”。大家在一起使用一个数据库,你有创建表的权限、修改表的权限,但是没有创建数据库、修改数据库的权限,因为这栋楼是大家的,不 是你一个人的,而你,只是租户之一。当然,你的几个房间会给你一个标签,取个名字,是某某人的(这个名字就是你以后使用数据库的名称); 您的这些房间与其他人的房间也是完全隔离的,彼此是不存在隐私暴露的问题的。

  "共享型数据库”的租户的房租比较便宜,因为按需收费,甚至免费。“按需收费“是云平台的共同特点,因为你的房间是用来存东西的,就类似于你的数据 库表是用来存数据的一样, 在以前你使用独享型数据库,你自己买了一个云数据库,是一次性投入,好比你花费了一辈子的积蓄来买了一栋房子,但是你真的需要那么房间来存你的东西吗?如 存粮食? 也许你自己都不知道你的东西有多少个东西。 共享型数据库的诞生解决了这个问题,一般的情况下,你有多少东西,你就租多大的房间,房东就收你多少的费用。这种就叫按需付费。有这样服务的云平台有很 多,比如百度的BAE、新浪的SAE、京东的JAE (即云擎)。目前BAE的数据库是按空间收费,SAE是既按空间计费,也按流量计费。京东的JAE目前是25G以内免费。    

京东云擎的云数据库的特点

  下面拿京东云擎 (下面简称“云擎”)的云数据库举例做一下介绍。云擎是一个 应用托管的云平台,属于云计算模型中的PaaS层。京东云数据库分为独享型和共享型数据库两种,在云擎里使用的共享型数据库,因为云擎是一个PaaS平 台,(我这里不介绍PaaS平台,大家去百度、Google一下)。我只插简单说一下其特点,PaaS平台的主要特点就是节约资源,按需分配,所以云擎使 用了共享型数据库。下面就简单介绍一下其特点吧:

  先看看我手绘的一个架构图:

 

(注:不代表云擎云数据库真实架构,只为说明清楚问题而绘制)

       1. 租户隔离。 多个租户共享同一数据库实例必然需要一个有效的隔离方案,防止一个用户的慢查询请求或恶意请求影响其他用户访问。这里的隔离实现方式是通过JProxy层 对用户所有的访问进行了拦截,并根据用户访问的数据表索引信息等,对用户执行该请求所需资源进行预判,并拦截掉恶意的请求及影响其他用户的请求。同时为了 精确控制每个用户的资源使用,整个系统针对用户使用的连接数,内存占用容量,磁盘空间使用情况,带宽流量等都做了有效的记录和监控并根据用户的配额进行控 制。

       2. 集群路由信息高一致性保障。整体集群采用经典的弱中心化集群结构,在满足集群高性能的基础上同时具备足够的可控性,JManager管理整个集群路由信 息,并通过多个Slave避免单点故障,当路由变更时,JManager首先同步路由变更信息给自己的Slave,然后才会同步所有的JProxy,避免 路由变更时JManager挂掉导致路由不一致。

       3. 高可用保障。整体集群所有节点无单点,用户的数据库会通过zookeeper做主从的高可用,如果用户主库挂掉,会自动切换至从库,并重新绑定 floating ip到从库,不会影响对用户的服务。(floating ip知道什么意思,想做架构师的朋友可以搜一下,这里不做累述)

      4. 用户数据库无缝升级扩容。当用户的数据库数据增长超过指定配额时,用户可以选择升级数据库,系统会自动根据资源池使用情况将用户数据库迁移到比较空闲的实 例上,迁移过程中并不会影响用户的服务。通过定时自动为用户数据库做快照的方式,结合数据库binlog同步工具,来帮助用户实现增量备份,迁移的工作也 是依赖于以上这些工具完成的。

      5. 共享型数据库基于安全方面考虑,通过jproxy对有潜在安全风险的数据库操作语法进行了限制,不如不能使用Create database,刚才提到了这栋房子除了您在用,别人也在用,你只有这几个或者几十个房间而已,你只能在这几个或者几十个房间里瞎搞,不能去别人的房间 胡来!

云擎的云数据库网址是:http://jae.jd.com  ,对这方面感兴趣的童鞋可以看看,目前是免费使用的。 

总结

  云计算出现以后,为企业、创业团队、个人带来了便利, 那个自建机房、购买或者租用服务器搭建环境、中间件、部署应用,搞定域名而浪费大量人力物力的时代,我相信在不久的未来可能会渐行渐远; 按需付费、方便快捷的互联网服务让云平台成为未来软件服务市场的宠儿, 而共享型数据库也会逐步体现其价值,迎接崭新的明天,相关的人才需求也会紧随其后。 预祝中国的云计算有广大的发展空间,越来越多的人才为其服务!

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wespten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值