Upload
others
View
52
Download
0
Embed Size (px)
Citation preview
第六部分 数据库技术的发展趋势
• 信息科学与工程学院
• 杨金民
• 2017.12
目录
l 对象-关系型数据库;
l 分布式数据库;
l NOSQL数据库;
l 数据仓库和数据挖掘;
l 大数据
object-relation 数据模型例子
title Author-set Publisher(name, branch)
Keyword-set
compiler {smith,John} (Oxford, Beijing) {word, sentence, syntax}
network {Jack, Smith} (Amason, Changsha) (transport, fault-tolerance}
database {Jim, Tom, Phillipe} (Greatwall, Changsha) {relation, record, foreign key}
book
flat_book表
title Author Publisher(name, branch)
Keyword
compiler smith (Oxford, Beijing) word
compiler smith (Oxford, Beijing) sentencecompiler smith (Oxford, Beijing) syntax
compiler John (Oxford, Beijing) wordcompiler John (Oxford, Beijing) sentence
compiler John (Oxford, Beijing) syntax
book表中的第一行数据的展开
Relation data model
title publisher branch
compiler Oxford Beijingnetwork Amason Shanghaidatabase Greatwall Changsha
title Authorcompiler smithcompiler Johnnetwork Jacknetwork Smithdatabase Jimdatabase Tomdatabase Phillipe
title Keywordcompiler wordcompiler sentencecompiler syntaxnetwork transportnetwork fault-tolerancedatabase relationdatabase recorddatabase foreign key
keywordsAuthors
books
关系数据模型的特性
l 当须要将一个东东看作一个对象时,就自然有其类的定义(Schema),自然就是该类表中的一行数据。
l 例如,在上一个例子中,如果要将每个作者看作一个对象,那么就应该创建book与作者的联系表Authors;
l 如果把book对象中作者看作是它的一个属性,那么book的属性author =“smith, John”即可;
l 到底是要将每个作者看作一个对象,还是将book对象中作者看作是它的一个属性,这要基于数据库服务的业务而定;
l 对于keywords也是。
对关系模型的扩展——支持面向对象
关系模型的数据类型是固定的:仅有integer, string,date,bool,CLOB, BLOB这些;
引入数据类型的可扩展性:
CREATE TYPE Publisher AS (name VARCHAR(16),branch VARCHAR(24),
);
CREATTE TYPE Name AS ( firstName VARCHAR(20),
lastName VARCHAR(20)) FINAL;
首先是对数据类型的扩展
数据类型扩展——典型的类型
l 典型的数据类型:数组,集合,List,stack,heap;
l 表是集合类型,表达的是某个类的实例的集合;
l 集合:其中成员的类型,既可以是基本类型,也可以是某个类;
l 集合的基本问题:其成员的标识问题。成员通常要求是同一类
型;
l 对于基本数据类型,就是自己本身来标识自己,即将所有字段
承视作主键;对于基本数据类型,它自然只一个字段;
数据类型扩展——支持成员函数
l 对集合类型:添加成员,查找成员,删除成员,清空;
l INSERT INTO setObj
l SELECT FROM setObj WHERE 成员(属性/函数)...
l DELETE FROM setObj WHERE 成员(属性/函数)...
类型与继承 in SQL 1999
集合(set)、数组(array)型数据类型:
CREATE TYPE Publisher AS (name VARCHAR(16),branch VARCHAR(24),
);
CREATE TYPE book AS (title varchar(64),
author-array varchar(20) array[10], publisher Publisher,
keyword-set setof(varchar(20)));
CREATE TABLE books OF book;
类型与构造函数
CREATTE TYPE Name AS (firstName VARCHAR(20), lastName VARCHAR(20)) FINAL;
CREATE FUNCTION Name(firstName VARCHAR(20), lastName VARCHAR(20))RETURN NameBEGIN SET self.firstName = firstName; SET self.lastName = lastName;END
类型与成员函数
CREATE TYPE personType AS ( name Name,
address Address,dateOfBirth date)NOT FINALMETHOD ageOnDate(onDate date) RETURN interval year;
CREATE INSTANCE METHOD ageOnDate(onDate date) RETURN interval yearFOR personTypeBEGIN RETURN onDate - self.dateOfBirth;END
创建类型的实例,调用类型的方法(1)
CREATE TABLE person OF personType;
INSERT INTO person(name, address, dateOfBirth)VALUES(new Name('John', ‘Georage’), new Address('20 MainSt.' , 'New York', '11001'),
date '2001-08-11');
SELECT name.lastName, ageOfBirth(now() ) FROM person
WHERE dateOfBirth ≧ date '2000-01-01';
创建类型的实例,调用类型的方法(2)
• 添加一行数据:
INSERT INTO books VALUES(`Compilers’, new ARRAY(`Smith’,`Jones’), Publisher(‘McGraw Hill’,`New York’ ), new SET(`parsing’,`analysis’));
查询行数据:
SELECT title, authors[0], publisher.name FROM books;
类型的继承
CREATE TYPE student UNDER personType
( degree VARCHAR(20), department VARCHAR(20));
CREATE TYPE teacher UNDER personType
( salary DECIMAL(8.2), department VARCHAR(20));
CREATE TYPE teachingAssistant UNDER student, teacher ;
集合的实例 表
CREATE TYPE teachingAssistant UNDER student, teacher ;
CREATE TYPE teachingAssistant UNDER
student WITH(department AS student_dept), teacher WITH(department AS teacher_dept);
CREATE TABLE teachingAssistant OF teachingAssistant;
类型的实例的存储方式
CREATE TABLE teachingAssistant OF teachingAssistant
person degree, department salary, department
person degree, departmentp_id salary, departmentp_id
person student teacher
CREATE VIEW teachingAssistant OF teachingAssistant ASperson JOIN student JION teacher
多继承中的对象层次结构
CREATE TABLE teachingAssistant OF teachingAssistant;
person degree, department salary, department
一个teachingAssistant实例隐含了另外三个类的实例:person实例,student实例,teacher实例
由某一类型的对象,来生成另一类型的对象
SELECT title, A.author, Publisher.name AS pub_name, K.keyword
FROM book AS B, unnest(B.author_array) AS A(author),
unnest(B.keyword_set) AS K(keyword);
其含义是:对book表中的每一个行,将author_array字段的值(一
个array类的实例)转化为一个表,将keyword_set的值(一个
set类的实例)也转化为一个表,然后做笛卡尔运算。其它输出
字段( title, Publisher.name)的值在笛卡尔运算的结果中的每行都
重复一样。
由某一类型的对象,来生成另一类型的对象(2)
INSERT INTO book ( SELECT title, array(SELECT author FROM authors AS A WHERE A.title = B.title ORDER BY A.position) AS author_array, Publisher(pub_name,pub_branch) AS publisher, multiset(SELECT keyword FROM keywords AS K WHERE K.title = B.title ) AS keyword_set
FROM flat_books AS B
);
对象标识和引用类型
• CREATE TYPE Department (
name VARCHAR(20),
head REF(Person) );
CREATE TABLE departments OF Department
( head WITH OPTIONS SCOPE people );
注意:在这里,TABLE的含义是集合类型的一个实例;
对象指针
1) INSERT INTO departments VALUES (`CS’, null);
2) UPDATE departments SET head = (SELECT REF(p)
FROM people AS p WHERE name=`John’)
WHERE name = `CS’;
3) SELECT head->name, head –>address FROM departments;
4) SELECT DEREF(head) AS teacherFROM departments WHERE name ='CS';
成员函数扩展成虚函数,纯虚函数多态
• 类型定义,包括成员变量和成员函数。
• 数据库可看作是一个容器,存放类的schema,以及类的实例。
• 数据库,自然有类的实例的集合这个概念。
• 对于集合,其元素,即类的实例,首先有标识问题,接下来就有
判别问题,即某个实例是否已经在集合中,然后就是查找问题。
查找结果自然也是集合。
• 由于成员函数,虚函数,纯虚函数都属于Schema的内容,因此
多态在数据库中,很容易实现。
虚函数,纯虚函数 接口 多态
内存
成员变量
指针对象指针(引用)
Schema
接口
缺点: 对象间的联系,数据建模混沌不清
CREATE TYPE student ( s_id VARCHAR(20), name VARCHAR(20),);
学生选修课程:
teacherObj.OpenCourse(courseObj, semesterObj);
StudentObj.Enroll(courseObj, semesterObj);
manager.AssignTeacherForCourse(teacherObj, courseObj, semesterObj);
teacherObj.Grade(courseObj, semesterObj, StudentObj, score);
CREATE TYPE course ( c_id VARCHAR(8), name VARCHAR(20), hours integer, credit integer);
关系数据模型,面向对象数据模型的共同——结构化数据
l 都有确定的Schema,结构轮廓固定,确定了其语义;
l 程序对数据的处理基于Schema,基于概念编程,运行时实例
化,实现了程序的通用性;
l 扩展性仅体现在类的实例的数目上;
l 横向无扩展性,仅在纵向上有扩展性;
l 横向要扩展,就要改变Schema,关系模型就要改表的schema,
对象模型就要定义新的类;
结构化数据 vs 半结构化数据
l 结构化数据 概念确定 状态空间也确定 程序确定
运行时的实例化 程序通用;
l Schema 实例;实例具有Schema的完全特征;
l 关系数据模型,面向对象数据模型:一维线性数据模型;
l 有Schema是最大的优点;
l 半结构化数据似乎试图增强一点点横向扩展性;
半结构化数据
一维线性结构 树形结构 新引入了层次型结构,新体现了
包含或者说归属关系;
关系数据模型,从扁平视角,来观察事情。事物之间具有对等性,
彼此之间的关系,不是从包含或者说归属视角来看待,而是从量
比上看待:一对一,一对多,多对多三种。
树形结构则是从包含或者说归属的视角来看待事情。
树形结构中,对等性的事情,为兄弟关系,彼此之间的关系要另
外刻画。
学校的树形结构模型
学院
信息学院 数学院
课程老师 学生 课程老师 学生
学校的树形结构模型
学院
信息学院 数学院
课程老师 学生 课程老师 学生授课 选课
学校的树形结构模型
学院
信息学院 数学院
课程老师 学生 课程老师 学生授课 选课
要求独立性很强:信息学院下面的学生,老师,课程与数学
院下面的课程,老师,学生之间最好是没有关系。
一旦有关系,树形结构就暴露在对象的引用中。
一旦树形结构发生变动,对象引用的一致性就难以维护。
关系数据模型
扁平结构:对等性,平起平坐性的实体。利用联系来表达彼
此之间的关系。在层次模型中,对象引用隐含了层次结构。
在关系模型中,无层次结构,对象引用变得直接。
学院 课程学生 老师 授课 选课
学校的树形结构模型
学院
信息学院 数学院
课程老师 学生 课程老师 学生授课 选课
好处和优点:并行处理。可扩展性好,良好的Map/Reduce特性。
很多Internet服务的数据就具有可划分性,数据量巨大,适合层次
结构,但是通常都只设置成两层。key-Value对。
NOSQL的由来
学院
信息学院 数学院
课程老师 学生 课程老师 学生授课 选课
在关系模型模型中稍微引入一点点层次数据模型。所以叫不仅仅是
SQL。
在引入层次数据模型上,很谨慎,通常都只设key和Value两层。
而且每个key值只有一个儿子结点,就是value。
NOSQL的由来
Key
KEY1 KEYn
Value1
要求:value1,value2,valuen中的内容,彼此之间最好没有联
系。 万一有,当然应很少发生,则采取复制策略,来维持彼此独
立这一特性。此时可能会出现不一致性问题:可容忍的不一致。
KEY2 KEYi
Value2 Value3 Value4
NOSQL的由来
KEY
KEY1 KEYn
Value1
key与机器的映射,实现并行处理,增大吞吐量,这就是集群
hadoop,spark的由来。
NoSQL本意是集群数据库 vs 分布式数据库。
KEY2 KEYi
Value2 Value3 Value4
电子商务数据库
e-business
Client 支付
最大的数据是交易数据【client,seller,goods,支付,物流】
为了分布式处理:key:client value:交易记录;
key:seller value:交易记录;
在这里,把交易记录复制了一份存储,使得client和seller独立。
理由:频繁的数据访问:客户看他的交易记录,卖家看他的交易
记录;
seller goods 物流 纠纷
电子商务数据库
e-business
Client 支付
最频繁的数据访问是浏览和查询商品数据:
对goods,也可采用key-value key: 类别 value:其它
value中进一步可就价格,厂家等不同视角建立索引,实现快速查
询。
从而实现层次管理,创造然后利用彼此独立,实现并行处理,增
大吞吐量
seller goods 物流 纠纷
NOSQL特性
面向的是巨大的数据量,强调的是查找性能,追求的是吞吐量;
采用key-value 来实现目标。彼此独立,因此就不能做灵活而复
杂的处理:范围查询,模糊查询,联接运算。
只能做等值查询,按照已设计好的层次结构做引导式roll down
查询。
NOSQL
类型 产品代表 特点
列存储Hbase
Hypertable
是按列存储数据。方便做数据压缩,对针对某一列或者某几列的
查询有非常大的IO优势。
文档存储 MongDB用类似Json的格式存储,
Schema不确定,易变。有机会对某些字段建立索引。
key-value存储 Redis可以通过key快速查询到其value。
一般来说,存储不管value的格式,照单全收。
NOSQL
• 数据库的核心理念:减少CPU开销,I/O开销。
• 关系型数据库的核心:在数据正确性上,ACID属性上;
• 有些应用对于性能、吞吐量、高扩展性很高要求,例如微信;
• NoSQL主要将可扩展性放在首位。
• key/value;
NOSQL数据库——Hbase
• Hbase数据模型:Row key, Column Family, Column.
• 列可以动态增加,列值为空就不存储数据, 节省存储空间;
• 查询:仅只支持按照Row key来等值、单表查询.
• 数据类型:仅只支持字符类型。
• 数据操作:HBase只有很简单的插入、查询、删除;
• 表和表之间完全独立、无联系。
• 存储模式:每个列族都有独立的存储单元。基于列的访问频度
Hbase数据模型 VS 关系模型Article
Article_Id {pk} Title Content Keywords Author_id{fk}
1 HBase Introduction
HBase is hdoop database.
HBase;Hdoop;NoSQL 1
AuthorAuthor_id{pk} name nickname
1 Hu dajun Tiger
ArticleRowkey Column Family Column keys
IdArticle
TitleContent
Keywords
Author NameNickname
一行数据的某个列的值可有多个版本
ArticleRowkey
ValueColumn Family
Column keys Column key value Timestamp
1Article
Title
HBase Introduction 20180818 11:30:49:120
Hbase 20170518 17:33:57:120
Hbase Essence 20170218 11:58:11:120
Content Keywords
AuthorName
Nickname
【R】key【C1】【V】Hbase Introduction【TS】20180819【/TS][/V】【V】Hbase 【TS】20180819【/TS][/V】【V】Hbase Essence【TS】20180819【/TS][/V】【/C1】.......【C3】......【/C3]【/R】
MongDB——文档数据库
l 无定型的Schema;文档的数据结构和JSON基本一样。一个
文档一行,由字段组成,字段又可由集合构成;
l 文档是一个键值(key-value)对。MongoDB 的文档不需要设
置相同的字段,并且相同的字段不需要相同的数据类型;
l 可基于任何字段构建索引;
l 用GridFS存放大量的小文件;
l 支持Map/Reduce;
数据库中col表的文档插入, 查找,删除
>db.col.insert( { title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'w3cschool',
url: 'http://www.w3cschool.cn',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100 } )
>db.col.find({"by":"w3cschool"})
>db.col.remove({'title':'MongoDB 教程'}
MongDB的文档键
l MongoDB中存储的文档必须有一个"_id"字段(主键)。这个
键的值可以是任何类型的,默认是个ObjectId对象。
l ObjectId 是一个12字节 BSON 类型数据,有以下格式:
u 前4个字节表示时间戳;
u 接下来的3个字节是机器标识码
u 紧接的两个字节由进程id组成(PID)
u 最后三个字节是随机数。
Redis
l Redis 是完全开源免费的,高性能key-value数据库。
l 其特点是:支持存储的value类型相对更多,包括string(字符
串)、list(链表)、set(集合)、zset(sorted set --有序集合)和
hash(哈希);
l Hash(哈希)类型:一个键值对集合:
> HMSET user:1 username w3cschool.cn password w3cschool.cn points 200
> HGETALL user:1
Redis
l List(列表):string类型的列表,按照插入顺序排序。你可以
添加一个元素到列表的头部(左边)或者尾部(右边)。
>LPUSH w3cschool.cn redis
>LPUSH w3cschool.cn mongodb
>LPUSH w3cschool.cn rabitmq
> LRANGE w3cschool.cn 0 10
Redis
l Set(集合):string类型的无序集合。集合是通过哈希表实
现,添加/删除/查找的复杂度都是O(1)。元素有唯一性。
>SADD w3cschool.cn redis
>SADD w3cschool.cn mongodb
>SADD w3cschool.cn rabitmq
> SMEMBERS w3cschool.cn
l zset(sorted set有序集合):集合中每个元素关联一个double
类型的分数(score)。元素通过(score)分数从小到大排序。
半结构化数据——XML数据
XML 是一种标签(markup)语言,其标签表达了数据的语义;
XML是有关数据交换(语义理解,数据解析)的框架和规范,定下的W3C国际标准。只要Internet上数据的发布者和数据的使用者都遵循该规范,他们就可彼此独立地做自己的工作,又能实现彼此沟通交流;
HTML,JSON 是XML的实例,HTML是有关文档的显示的规定.
标签是可扩展定义的,HTML是大小写不区分的,XML区分大小写;
XML 数据——树形结构数据
一个XML 文档 的组成:
An XML declaration line, 表明其遵循的XML标准的版本.
Elements (or tags) 也叫 markup. 每个元素包括text,
attributes, nested elements. 这三者都是可有可无的。
每个属性(Attribute)采用 name= value 的方式,放在
element中.
每个XML文档有且仅有一个根元素(root Element),
XML文档例子<?xml version = "1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE root SYSTEM "dept.dtd"><root>
<Dept dno = "D1"><Emp eno="E7"><name>R. Davis</name></Emp><Emp eno="E8"><name>J. Jones</name></Emp><student sno="S3"><name>张三</name></student><budget> 5000 </budget>
</Dept><Dept dno = "D2" mgr = "E6">
<Emp eno="E6"><name> L. Chu </name></Emp><Emp eno="E3"><name> A. Lee </name></Emp>
<course cno="C3"><name> Java </name></course></Dept>
</root>
Namespaces 例子
<?xml version = "1.0" encoding="UTF-8" standalone="no"?>
<root xmlns:n1 = "http://www.abc.com"><n1:Dept dno = "D1">
<n1:Emp eno="E7"><name>R. Davis</name></Emp><n1:Emp eno="E8"><name>J. Jones</name></Emp>
</Dept><n1:Dept dno = "D2" mgr = "E7">
<n1:Emp eno="E6"><name>L. Chu</name></Emp><n1:Emp eno="E3"><name>A. Lee</name></Emp><n1:budget>350000</budget>
</Dept></root>
Schema for XML
是理解和解析XML文档的前提,也是验证XML文档是否规范的依
据;
就像数据库中的表的模式,程序就是基于Schema来编写的;
XML文档只不过是它的实例;
XML schema 两种形式:
Document Type Definition (DTD)
XML Schema
XML文档例子:Ueducation<?xml version = "1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE root SYSTEM "dept.dtd"><root>
<Dept dno = "D1"><Emp eno="E7"><name>R. Davis</name></Emp><Emp eno="E8"><name>J. Jones</name></Emp><student sno="S3"><name>张三</name></student><budget> 5000 </budget>
</Dept><Dept dno = "D2" mgr = "E6">
<Emp eno="E6"><name> L. Chu </name></Emp><Emp eno="E3"><name> A. Lee </name></Emp>
<course cno="C3"><name> Java </name></course></Dept>
</root>
Document Type Definitions (DTD) 例子
<!DOCTYPE root [<!ELEMENT root(Dept+)><!ELEMENT Dept(Emp*, budget?,course*, student*)>
<!ATTLIST Dept dno ID #REQUIRED><!ATTLIST Dept mgr IDREF #IMPLIED>
<!ELEMENT budget (#PCDATA)><!ELEMENT Emp (name)>
<!ATTLIST Emp eno ID #REQUIRED><!ELEMENT course (name)>
<!ATTLIST course cno ID #REQUIRED><!ELEMENT name (#PCDATA)>
]> Parsed Character Data (atomic value)
XML Schema
DTDs 并没有指明:
data types
constraints
explicit primary keys and foreign key references.
DTDs 并不遵循XML 语法.
XML Schema 后来定义的国际标准.
XML Schema中的元素的类型
Elements type: simple types,composite type:
任何带有属性或者嵌入有子元素的类型:必须定义为composite type
<xsd:element name = "name" type = "xsd:string" />
<xsd:element name = "budget" type = "xsd:decimal" />
Schema中可指明元素的实例的数量范围
<xsd:element name = "Emp"minOccurs="0" maxOccurs="unbounded">
<xsd:element name = "budget" type = "xsd:decimal"minOccurs="1" maxOccurs="1" />
Constraints in XML Schema
唯一性约束:
<xsd:unique name = "UniqueDno"><xsd:selector xpath = "/root/Dept" /><xsd:field xpath = "@dno" /> </xsd:unique>
主键约束:
<xsd:key name = "EmpKey"><xsd:selector xpath = "/root/Dept/Emp" /><xsd:field xpath = "@eno" /> </xsd:key>
外键约束:
<xsd:keyref name = "DeptMgrFK" refer "EmpKey"><xsd:selector xpath = "Dept" /><xsd:field xpath = "@mgr" /> </xsd:keyref>
XML Schema Example<?xml version = "1.0"><xsd:schema xmlns:xsd = "http://www.w3.org/2000/10/XMLSchema"><xsd:element name = "root"> <xsd:complexType> <xsd:sequence> <xsd:element name = "Dept" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:attribute name = "dno" type = "xsd:string" /> <xsd:attribute name = "mgr" type = "xsd:string" /> <xsd:element name = "Emp" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:element name = "name" type = "xsd:string" /> <xsd:attribute name = "eno" type = "xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="budget" minOccurs="0" type ="xsd:decimal" /> </xsd:complexType> </xsd:element>
XML Schema Example (cont.)
</xsd:sequence> </xsd:complexType></xsd:element><xsd:key name = "DeptKey">
<xsd:selector xpath = "/root/Dept" /><xsd:field xpath = "@dno" />
</xsd:key><xsd:key name = "EmpKey">
<xsd:selector xpath = "/root/Dept/Emp" /><xsd:field xpath = "@eno" />
</xsd:key><xsd:keyref name = "DeptMgrFK" refer "EmpKey">
<xsd:selector xpath = "/root/Dept" /><xsd:field xpath = "@mgr" />
</xsd:keyref></xsd:schema>
XML Schema中通常把结构和约束分开:先结构,后约束
<?xml version = "1.0"><xsd:schema xmlns:xsd = "http://www.w3.org/2000/10/XMLSchema"><xsd:element name = "root" type =”university education”> <xsd:complexType> <xsd:sequence> <xsd:element name = "Dept"> <xsd:complexType> <xsd:element name = "Emp" > <xsd:complexType> <xsd:element name = "name" type = "xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="budget" type ="xsd:decimal" /> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType></xsd:element>
XML Schema结构之后的约束
</xsd:complexType name=”university education”> <xsd:sequence>
<xsd:element ref = "Dept" minOccurs="1" maxOccurs= "unbounded"> <xsd:complexType> <xsd:attribute name = "dno" type = "xsd:string" /> <xsd:attribute name = "mgr" type = "xsd:string" /> </xsd:complexType></xsd:element>.....
</xsd:sequence></xsd:complexType>
<xsd:key name = "DeptKey"><xsd:selector xpath = "/root/Dept" /><xsd:field xpath = "@dno" />
</xsd:key>
XML Schema结构之后的约束
<xsd:key name = "EmpKey"><xsd:selector xpath = "/root/Dept/Emp" /><xsd:field xpath = "@eno" />
</xsd:key><xsd:keyref name = "DeptMgrFK" refer "EmpKey">
<xsd:selector xpath = "/root/Dept" /><xsd:field xpath = "@mgr" />
</xsd:keyref></xsd:schema>
XQuery
使用 FLWR 表达式 (“for-let-where-return") ,与 SQL相似.
XQuery FOR Clause Example
FOR $ename IN /Depts/Dept/Emp/name
RETURN <EmpName>{$ename}</EmpName>
Result:<EmpName>R. Davis</EmpName><EmpName>J. Jones</EmpName><EmpName>L. Chu</EmpName><EmpName>A. Lee</EmpName>
FOR loop variable XPath
XQuery LET Clause Example
LET $en IN /Depts/Dept/Emp/name
RETURN <EmpName>{$en}</EmpName>
Result:
<EmpName>R. Davis, J.Jones, L. Chu, A. Lee </EmpName>
XQuery WHERE Clause Example
FOR $e IN /Depts/Dept/Emp
WHERE $e/name > "I"
RETURN <EmpName>{$e/name}</EmpName>
Result:
<EmpName>R. Davis</EmpName>
<EmpName>J. Jones</EmpName>
<EmpName>L. Chu</EmpName>
XQuery FOR/LET Clause Example
Return all departments with at least 2 employees.<result>
FOR $d IN /Depts/Dept/LET $e = $d/EmpWHERE COUNT($e) >= 2RETURN <DeptName>{$d/name}</DeptName>
</result> Result: <result> <DeptName>Management</DeptName> <DeptName>Consulting</DeptName> </result>
XQuery中的 IDREF
输出每个学院及其院长的名字:
FOR $d IN /Depts/Dept/LET $en = $d/@mgr -> Emp/nameRETURN<DeptName> {$d/name} </DeptName><MgrName> {$en} </MgrName>
Result:<DeptName> Consulting </DeptName><MgrName> R. Davis </MgrName>
XQuery Questions
Write XQuery queries to retrieve:
1) Return the book ISBN and price for each book.
2) Return only those books that have more than 2 authors.
3) Return average price of all books.
4) All titles of books costing < $70 where "Ullman" is an author.
XML Parsers
An XML parser uses one of two common interfaces: DOM
and SAX to processes the content and structure of an
XML document ,according to its DTD or schema.
DOM
XmlDocument doc = new XmlDocument(); doc.Load("test.xml");XmlElement firstCD = (XmlElement)
doc.DocumentElement.FirstChild;XmlElement artist = (XmlElement)
firstCD.GetElementsByTagName("artist")[0];XmlElement title =(XmlElement)
firstCD.GetElementsByTagName("title")[0]; Console.WriteLine("Artist={0}, Title={1}", artist.InnerText,
title.InnerText);
Cursor-based APIs
XmlDocument doc = new XmlDocument(); doc.Load("test.xml");XPathNavigator nav = doc.CreateNavigator(); nav.MoveToFirstChild(); nav.MoveToFirstChild(); nav.MoveToFirstChild();nav.MoveToNext(); string artist = nav.Value;nav.MoveToNext(); string title = nav.Value;Console.WriteLine("Artist={0}, Title={1}", artist, title);
Streaming APIs : SAX
XmlTextReader reader = new XmlTextReader("test.xml");
reader.MoveToContent();
while(reader.Read( ) ) {
if((reader.NodeType == XmlNodeType.Element) &&
reader.Name.Equals("artist")) {
artist = reader.ReadElementString();
title = reader.ReadElementString();
break;
}
}
Console.WriteLine("Artist={0}, Title={1}", artist, title);
XML Query
XPathDocument doc = new XPathDocument("test.xml");XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator iterator = nav.Select("/items/compact-
disc[1]/artist | /items/compact-disc[1]/title");iterator.MoveNext(); Console.WriteLine("Artist={0}", iterator.Current);iterator.MoveNext();Console.WriteLine("Title={0}", iterator.Current);
XML 数据特点
l 用树形结构组织数据;
l 树的结点分为属性结点和元素结点;
l 属性结点为叶节点,元素结点可以有孩子结点;
l 属性的值,有缺省值概念;不给出时,不是说没有,而是说取
缺省值;
l 某个元素类的实例数量可多可少,只能说是在纵向上有伸缩扩
展性;
XML 数据的横向扩展性特点<xsd:element name = "root">
<xsd:complexType> <xsd:sequence> <xsd:element name = "Dept" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:element name = "Emp" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:element name = "name" type = "xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="Proj" minOccurs="0" maxOccurs="unbounded" /> </xsd:complexType> </xsd:element>; </xsd:sequence> </xsd:complexType>
Dept包括Emp和Proj组成,可把Emp和Proj是Dept的横向组成部分,它们彼此独立,因此可看作两个表;
XML 数据的横向扩展性特点
因此,并没有什么新特质,只是把彼此有联系的不同类别的实
例摆放到一起而已;
而关系模型则把它们放到不同的表中;
deptNo name mangerD01 Engineering E01
empNo name deptNoE01 李静 D01
E02 郭嘉 D01
projNo name budget deptNo
P01 大楼 1000 D01P02 花园 2400 D01
Dept Emp
Proj
XML 和关系模型的本质差异
因此,它们并没有本质差异,只是XML把彼此有联系的不同
类别的实例放到一起而已;而关系模型则把它们放到不同
的表中,
deptNo name mangerD01 Engineering E02D02 Accounting E01
empNo name deptNoE01 李静 D02
E02 郭嘉 D01
projNo name budget deptNo
P01 大楼 1000 D01P02 花园 2400 D01
Dept Emp
Proj
XML 和关系模型的本质差异
XML把联系看作第一位;而关系模型则把类看作第一位;
先有类及其实例,然后才有联系,因此关系模型有其道理。
deptNo name mangerD01 Engineering E02
empNo name deptNoE01 李静 D01
E02 郭嘉 D01
projNo name budget deptNo
P01 大楼 1000 D01P02 花园 2400 D01
Dept Emp
Proj
XML的树形结构模型
学院
信息学院 数学院
课程老师 学生 课程老师 学生授课 选课
要求独立性很强:信息学院下面的学生,老师,课程与数学
院下面的课程,老师,学生之间最好是没有关系。
一旦有关系,树形结构就暴露在对象的引用中。
一旦树形结构发生变动,对象引用的一致性就难以维护。
关系数据模型
扁平结构:对等性,平起平坐性的实体。利用联系来表达彼
此之间的关系。在层次模型中,对象引用隐含了层次结构。
在关系模型中,无层次结构,对象引用变得直接。
学院 课程学生 老师 授课 选课
JSON{ "name": "中国", "province": [ { "name": "黑龙江", "cities": { "city": ["哈尔滨", "大庆"] } }, { "name": "广东", "cities": { "city": ["广州", "深圳", "珠海"] } } ]}
XML<?xml version="1.0" encoding="utf-8"?><country> <name>中国</name> <province> <name>黑龙江</name> <cities> <city>哈尔滨</city> <city>大庆</city> </cities> </province> <province> <name>广东</name> <cities> <city>广州</city> <city>深圳</city> <city>珠海</city> </cities> </province></country>
语义网
万维网是一个描述资源和资源之间关系的网络。
RDF(Resource Description Framework)是一种描述资源的方
式:主谓宾三元组:{ 苹果, 是, 公司 }, { 库克, 是, 人 }, { 苹果,
CEO 是, 库克 }
直接说「苹果公司的 CEO 是个叫库克的人」,计算机就凌乱了啊,
因为自然语言包含太多的不确定性。比如这里就有:苹果公司是
一家叫苹果的公司还是这是一家卖苹果的公司?
处理的是三元组本身的歧义:哪天又输入了一条 { 苹果, 是, 水果 },
那怎么办?这和我们之前的苹果不是一个货啊。
语义网
描述的用词本身不能有歧义,有什么唯一表示的方法么?答案就
是用 URI(Universal Resource Identifier)。一旦确定每个东西
都有唯一表述方式,那么 RDF 三元组的形式就是 { URI, URI,
URI } 了。
有了许多这样的三元组以后,我们就可以得到一个知识网。把多
个这样的网放在一起,所有相同 URI 的节点都可以合并到一起,
逐渐组成一张大网——可以说是语义网的雏形。里面所有的内容
都是机器可查询、标准且无歧义的,于是可计算和推理,得到隐
含的新知识。
RDF
Subject Property ObjectBook1 Title Human Machine Transaction
Book2 Title Foundations of Databases
Book1 Type book
Book2 Type book
Book2 hasAuthor Person1Book2 hasAuthor Person2
Person1 Type Author
Person2 Type Author
Person1 IsNamed E. F. Codd
Person2 IsNamed H. G. Holton
查询
SELECT p5.objFROM rdf AS p1, rdf AS p2, rdf AS p3, rdf AS p4, rdf AS p5WHERE p1.prop = ’title’ AND p1.obj LIKE ’%Transaction%’AND p1.subj = p2.subj AND p2.prop = ’type’ AND p2.obj = ’book’ AND p2.subj = p3.subjAND p3.prop = ’ hasAuth’ AND p3.obj = p4.subj AND p4.prop = ’type’ AND p4.obj = ’author’ AND p4.subj = p5.subj AND p5.prop = ’isnamed’ ;
Subj1 Prop1 Obj1 Subj2 Prop2 Obj2Subj3 Prop3 Obj3 Subj 4 Prop4 Obj4 Subj5 Prop5 Obj5
代号书 Title %Transaction%
代号书 Type Book 代号书
HasAuth
代号人 代号人 Type Auth 代号人 IsNamed
特定人名
更高级的连接Schema——正则表达式
Eother20 *
start 12digit
13.
14digit
15E
16+|-
17digit
18other
19
digit digit digit
digitother
21 *
对正则表达式: number → digits (. digits )?( E [+ - ]? digits)?
更高级的Schema——上下文无关文法
E→ E + T | T
T→ T * F | F
F→ (E) | id
l 反映出了树型结构;l 反映出了运算的优先级;l 反映出了运算的交换律;l 具有开放性、灵活性,适应性;l 具有高度抽象性;l 具有全覆盖性;
E
id
+E T
输入串:id + id * id
*T F
F
id
T
F
id
输入串:(((id + id) * id+id)*id+id)*id
分布式数据库
同构系统/ 异构系统,自治系统,邦联系统. 目的:l实现信息资源共享;l提高数据处理性能;l实现容错;l实现数据操作的简单性;
network
分布式数据库管理系统DDBMS
正确性;性能;简单性;
操作系统
Connection;Fragments;Replica;Schema;
增强性能共享,提高可用性;简化复杂性;
SQL
SQL
DatabaseA
DDBMS
正确性;性能;简单性
操作系统
DatabaseB
Network DDB
SQL
Schema A Schema A
分段例子(水平分段)
PROJ
P1P2P3P4P5
InstrumentationP2 Database DevelopCAD/CAMMaintenanceCAD/CAM
150000135000250000310000500000
Montreal
ParisBoston
PNO PNAME BUDGET LOC
PROJ1
P1P2
InstrumentationP2 Database Develop
150000135000
MontrealPNO PNAME BUDGET LOC
PROJ2
P3P4P5
CAD/CAMMaintenanceCAD/CAM
250000310000500000
ParisBoston
PNO PNAME BUDGET LOC
<$200000 >=$200000
分段例子(垂直分段)
PROJ
P1P2P3P4P5
InstrumentationP2 Database DevelopCAD/CAMMaintenanceCAD/CAM
150000135000250000310000500000
Montreal
ParisBoston
PNO PNAME BUDGET LOC
PROJ1 PROJ2
P1P2P3P4P5
InstrumentationP2 Database DevelopCAD/CAMMaintenanceCAD/CAM
150000135000250000310000500000
Montreal
ParisBoston
PNO PNAMEBUDGET LOCP1P2P3P4P5
PNO
DDBMS形式
DDBMS形式 1 DBMS
A
DDBMSDBMS
B
DDBMSDBMS
C
DDBMS
形式2 DBMSA
DBMSB
DBMSC
形式3
DBMSA
DBMSB
DDBMSDBMS
C
DDBMS形式
DBMSA
DBMSB
DBMSC
DDBMS
DDBMS
DDBMS
DBMSA
DBMSB
DBMSC
DBMSA
DBMSB
DBMSC
DDBMS
分布式数据库中的透明问题
• 网络透明(Network Transparency)
• 复制透明(Replication Transparency)
• 分段透明(Fragmentation Transparency)
数据处理的类型
OLTPOn-line Transaction
Processing
OLAPOn-line Analyzing
Processing
处理故障 挖掘和提炼信息
决策支持日常事务工作
基本概念
• 数据分析(Data analysis):对数据进行统计分析,找出规律特征;.
• 数据挖掘(Data mining):从大量的数据中区自动地发现隐藏的特征模式,为决策作支撑;
• 数据仓库(data warehouse ):将来自多个数据源的数据,以统一的模式,集中存储在某个站点上。其特征:历史数据,海量的数据,数据只添加,只读,无修改;.
• 信息提取(Information-Retrieval):对Internet上得无结构的文本数据进行查找.
大数据
• 2013年马云:“大家还没搞清PC时代的时候,移动互联网来了,还没搞清移动互联网的时候,大数据时代又来了。”
• 2014年,若基亚CEO:“我们没有做错什么,但不知为什么,我们出局了。”
比特→字节→文件系统→数据库→NOSQL→数据仓库→
数据集市→大数据
符号01
编码
信息词 句
语义
字节
语法组合单元化
领域
多元性的圆梦新时代
files Linux
DatabaseXML
BigData OLAP
NOSQL
OLTP
RDF
WebservicesAndroid
JSON Eclipse