第5章 NoSQL数据库 (PPT版本号:2017年2月版本)

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

1 Java 语言程序设计 计算机系 鲍金玲. 2 引子 甲骨文 甲骨文是全球最大的信息管理软件及服务供应商,成立于 1977 年,公司总部 设在美国加利福尼亚州的红木城( Redwood Shores ),全球员工达 名, 包括 名开发人员、 7500 多名技术支持人员和.
EpiC elastic power-aware data intensive Cloud. LOGO epiC 大规模数据处理的难点 Page  2 如何查询处 理海量数据? 如何存储 海量数 据? 如何降低硬件成 本? 如何取得一劳 永逸的解决方案?
Java语言的特点 Java开发环境的搭建
课程介绍 (PPT版本号:2016年1月24日版本) 温馨提示:编辑幻灯片母版,可以修改每页PPT的厦大校徽和底部文字 林子雨
数据库原理 彭煜玮 计算机学院 珞珈图腾数据库实验室.
分布式系统 Distributed Systems 第 13 讲 NoSQL Lecture 13 NoSQL
数据库原理及应用(ORACLE)实用教程
電子商務:數位時代商機‧梁定澎總編輯‧前程文化 出版
《计算机应用基础》 第七章 计算机网络基础与应用
分布式系统 Distributed Systems 第 12 讲 “大型”网站架构设计 Lecture 12 Large Scale Website Architecture 王晓阳、张 奇 复旦大学 计算机科学技术学院.
DATE: 14/10/2009 陳威宇 格網技術組 雲端運算相關應用 (Based on Hadoop)
Big Data Ecosystem – Hadoop Distribution
数据库系统原理及应用 Database Theory and Application
第八讲 基于Hadoop的数据仓库Hive (PPT版本号:2016年4月6日版本)
Java程序设计教程 第一讲 Java概述.
MongoDB技术交流 主讲:刘天斯.
穆公(朱金清 微博:淘穆公 阿里HBase业务设计实践 穆公(朱金清 微博:淘穆公
資料庫系統 曾俊雄.
管理資訊系統 David Kroenke 資料庫處理 第4章.
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
巨量資料平台: Hadoop的生態系.
MySQL資料庫安全管理.
第 八 章 資料庫安全 本投影片(下稱教用資源)僅授權給採用教用資源相關之旗標書籍為教科書之授課老師(下稱老師)專用,老師為教學使用之目的,得摘錄、編輯、重製教用資源(但使用量不得超過各該教用資源內容之80%)以製作為輔助教學之教學投影片,並於授課時搭配旗標書籍公開播放,但不得為網際網路公開傳輸之遠距教學、網路教學等之使用;除此之外,老師不得再授權予任何第三人使用,並不得將依此授權所製作之教學投影片之相關著作物移作他用。
《大数据技术原理与应用》 课程介绍 (2016春季学期)
《计算机应用基础》 第六章 Access数据库管理系统
数据库系统概论 第 三 版 主 讲: 李明东. 数据库系统概论 第 三 版 主 讲: 李明东.
为教师开展大数据课程教学提供全方位、一站式服务
Google App Engine Google 應用服務引擎.
第4章 数据库技术及应用 软件开发技术基础 计算机教学实验中心 2006.
Introduction to database
NoSQL分布式数据库.
Alibaba 数据库高可用架构 Alibaba
厦门大学数据库实验室NoSQL系列学习之
第3章 分布式文件系统HDFS (PPT版本号:2017年2月版本)
分布式系统中的关键概念及Hadoop的起源、架构、搭建
第2章 大数据处理架构Hadoop (PPT版本号:2017年2月版本)
Mongodb初中级实战教程 讲师:涂宗勋 讲师的CSDN博客地址
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
基于Hadoop的数据仓库Hive.
《大数据技术原理与应用》 第七章 MapReduce (2016春季学期) 林子雨 厦门大学计算机科学系 主页:
胡鹏 王慧锋 TEL: 数据库系统原理课程设计 实验环节1 胡鹏 王慧锋 TEL:
Microsoft SQL Server 2000 李金双.
精通redis数据库开发、管理与优化 第1讲 什么是redis 讲师:黄锡峰.
彰化縣政府補助辦理網頁設計資料庫應用班 資料庫簡介 建國技術學院資管系 饒瑞佶.
第九讲 Hadoop架构再探讨 (2016春季学期)
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
Hadoop平台與應用規劃實作 報告者:劉育維.
《大数据技术原理与应用》 第十二讲 图计算 (2016春季学期)
Spring & mongodb java实战mongodb 曹巍 2013年9月22日.
基于大数据的物流资源整合 福建师范大学协和学院 沈庆琼.
Java基础入门 第1章 Java开发入门 · Java语言的特点 · Java开发环境的搭建 · 环境变量的配置 · Java的运行机制.
《Spark编程基础》 《 Spark编程基础》课程介绍 (PPT版本号:2018年2月)
——网鸟老兵系列课程之10天掌握MongoDB
C/C++/Java 哪些值不是头等程序对象
Python联合服务器的使用.
基于大数据平台数据管理研究 何家乐 2013年7月 中国科学院高能物理研究所.
CH03 行銷資訊系統資料庫模組--資料庫概論
認識資料庫 MySQL 資料庫新增 MySQL 資料表新增 認識欄位資料表 資料新增、刪除、修改、瀏灠 資料表清空與刪除
認識資料庫 MySQL 資料庫新增 MySQL 資料表新增 認識欄位資料表 資料新增、刪除、修改、瀏灠 資料表清空與刪除
江西财经大学《数据库应用》精品课程组 2011年 Comments are welcome!
第一章 数 据 库 概 述 第一节 引言 第二节 数据库基本概念 第三节 数据库系统结构 第四节 数据模型 第五节 数据库管理系统
資料庫管理系統 緒 論.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
主编:钟元生 赵圣鲁.
第8章 Spark MLlib (PPT版本号: 2019年春季学期)
《大数据导论(通识课版)》 第4章 大数据应用 (PPT版本号:2019年秋季学期)
《大数据导论(通识课版)》 第6章 大数据思维 (PPT版本号:2019年秋季学期)
《大数据导论(通识课版)》 教材官网: 第5章 大数据安全 (PPT版本号:2019年秋季学期)
Presentation transcript:

第5章 NoSQL数据库 (PPT版本号:2017年2月版本) 《大数据技术原理与应用(第2版)》 http://dblab.xmu.edu.cn/post/bigdata 第5章 NoSQL数据库 (PPT版本号:2017年2月版本) 温馨提示:编辑幻灯片母版,可以修改每页PPT的厦大校徽和底部文字 林子雨 厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 主页:http://www.cs.xmu.edu.cn/linziyu 厦门大学计算机科学系 2017年2月版本

《大数据技术原理与应用(第2版)》 《第5章 NoSQL数据库》在线视频观看地址 本章配套教学视频 《大数据技术原理与应用(第2版)》 《第5章 NoSQL数据库》在线视频观看地址 http://dblab.xmu.edu.cn/post/bigdata-online-course/#lesson5

提纲 5.1 NoSQL简介 5.2 NoSQL兴起的原因 5.3 NoSQL与关系数据库的比较 5.4 NoSQL的四大类型 5.6 从NoSQL到NewSQL数据库 5.7 文档数据库MongoDB 本PPT是如下教材的配套讲义: 《大数据技术原理与应用 ——概念、存储、处理、分析与应用》 (2017年2月第2版) ISBN:978-7-115-44330-4 厦门大学 林子雨 编著,人民邮电出版社 欢迎访问《大数据技术原理与应用》教材官方网站: http://dblab.xmu.edu.cn/post/bigdata

5.1 NoSQL简介 通常,NoSQL数据库具有以下几个特点: (1)灵活的可扩展性 (2)灵活的数据模型 (3)与云计算紧密融合

5.1 NoSQL简介 现在已经有很多公司使用了NoSQL数据库: Google Facebook Mozilla Adobe Foursquare LinkedIn Digg McGraw-Hill Education Vermont Public Radio 百度、腾讯、阿里、新浪、华为……

5.2 NoSQL兴起的原因 1、关系数据库已经无法满足Web2.0的需求。主要表现在以下几个方面: (1)无法满足海量数据的管理需求 (2)无法满足数据高并发的需求 (3)无法满足高可扩展性和高可用性的需求

5.2 NoSQL兴起的原因 MySQL集群是否可以完全解决问题? 复杂性:部署、管理、配置很复杂 扩容问题:如果系统压力过大需要增加新的机器,这个过程涉及数据重新划分,整个过程比较复杂,且容易出错 动态数据迁移问题:如果某个数据库组压力过大,需要将其中部分数据迁移出去,迁移过程需要总控节点整体协调,以及数据库节点的配合。这个过程很难做到自动化

5.2 NoSQL兴起的原因 2、“One size fits all”模式很难适用于截然不同的业务场景 关系模型作为统一的数据模型既被用于数据分析,也被用于在线业务。但这两者一个强调高吞吐,一个强调低延时,已经演化出完全不同的架构。用同一套模型来抽象显然是不合适的 Hadoop就是针对数据分析 MongoDB、Redis等是针对在线业务,两者都抛弃了关系模型

5.2 NoSQL兴起的原因 3、关系数据库的关键特性包括完善的事务机制和高效的查询机制。但是,关系数据库引以为傲的两个关键特性,到了Web2.0时代却成了鸡肋,主要表现在以下几个方面: (1)Web2.0网站系统通常不要求严格的数据库事务 (2)Web2.0并不要求严格的读写实时性 (3)Web2.0通常不包含大量复杂的SQL查询(去结构化,存储空间换取更好的查询性能)

5.3 NoSQL与关系数据库的比较 表5-1 NoSQL和关系数据库的简单比较 比较标准 RDBMS NoSQL 备注 数据库原理 完全支持 部分支持 RDBMS有关系代数理论作为基础 NoSQL没有统一的理论基础 数据规模 大 超大 RDBMS很难实现横向扩展,纵向扩展的空间也比较有限,性能会随着数据规模的增大而降低 NoSQL可以很容易通过添加更多设备来支持更大规模的数据 数据库模式 固定 灵活 RDBMS需要定义数据库模式,严格遵守数据定义和相关约束条件 NoSQL不存在数据库模式,可以自由灵活定义并存储各种不同类型的数据 查询效率 快 可以实现高效的简单查询,但是不具备高度结构化查询等特性,复杂查询的性能不尽人意 RDBMS借助于索引机制可以实现快速查询(包括记录查询和范围查询) 很多NoSQL数据库没有面向复杂查询的索引,虽然NoSQL可以使用MapReduce来加速查询,但是,在复杂查询方面的性能仍然不如RDBMS

5.3 NoSQL与关系数据库的比较 表5-1 NoSQL和关系数据库的简单比较(续) 比较标准 RDBMS NoSQL 备注 一致性 强一致性 弱一致性 RDBMS严格遵守事务ACID模型,可以保证事务强一致性 很多NoSQL数据库放松了对事务ACID四性的要求,而是遵守BASE模型,只能保证最终一致性 数据完整性 容易实现 很难实现 任何一个RDBMS都可以很容易实现数据完整性,比如通过主键或者非空约束来实现实体完整性,通过主键、外键来实现参照完整性,通过约束或者触发器来实现用户自定义完整性 但是,在NoSQL数据库却无法实现 扩展性 一般 好 RDBMS很难实现横向扩展,纵向扩展的空间也比较有限 NoSQL在设计之初就充分考虑了横向扩展的需求,可以很容易通过添加廉价设备实现扩展 可用性 很好 RDBMS在任何时候都以保证数据一致性为优先目标,其次才是优化系统性能,随着数据规模的增大,RDBMS为了保证严格的一致性,只能提供相对较弱的可用性 大多数NoSQL都能提供较高的可用性

5.3 NoSQL与关系数据库的比较 表5-1 NoSQL和关系数据库的简单比较(续) 比较标准 RDBMS NoSQL 备注 标准化 是 否 RDBMS已经标准化(SQL) NoSQL还没有行业标准,不同的NoSQL数据库都有自己的查询语言,很难规范应用程序接口 StoneBraker认为:NoSQL缺乏统一查询语言,将会拖慢NoSQL发展 技术支持 高 低 RDBMS经过几十年的发展,已经非常成熟,Oracle等大型厂商都可以提供很好的技术支持 NoSQL在技术支持方面仍然处于起步阶段,还不成熟,缺乏有力的技术支持 可维护性 复杂 RDBMS需要专门的数据库管理员(DBA)维护 NoSQL数据库虽然没有DBMS复杂,也难以维护

5.3 NoSQL与关系数据库的比较 总结 (1)关系数据库 优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持 劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板、无法较好支持Web2.0应用,事务机制影响了系统的整体性能等 (2)NoSQL数据库 优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0应用,具有强大的横向扩展能力等 劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等

5.3 NoSQL与关系数据库的比较 总结 关系数据库和NoSQL数据库各有优缺点,彼此无法取代 关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证强事务一致性 NoSQL数据库应用场景:互联网企业、传统企业的非关键业务(比如数据分析) 采用混合架构 案例:亚马逊公司就使用不同类型的数据库来支撑它的电子商务应用 对于“购物篮”这种临时性数据,采用键值存储会更加高效 当前的产品和订单信息则适合存放在关系数据库中 大量的历史订单信息则适合保存在类似MongoDB的文档数据库中

5.4 NoSQL的四大类型 NoSQL数据库虽然数量众多,但是,归结起来,典型的NoSQL数据库通常包括键值数据库、列族数据库、文档数据库和图形数据库

5.4 NoSQL的四大类型

5.4 NoSQL的四大类型 文档数据库 图数据库 键值数据库 列族数据库

Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached 5.4.1 键值数据库 相关产品 Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached 数据模型 键/值对 键是一个字符串对象 值可以是任意类型的数据,比如整型、字符型、数组、列表、集合等 典型应用 涉及频繁读写、拥有简单数据模型的应用 内容缓存,比如会话、配置文件、参数、购物车等 存储配置和用户数据信息的移动应用 优点 扩展性好,灵活性好,大量写操作时性能高 缺点 无法存储结构化信息,条件查询效率较低 不适用情形 不是通过键而是通过值来查:键值数据库根本没有通过值查询的途径 需要存储数据之间的关系:在键值数据库中,不能通过两个或两个以上的键来关联数据 需要事务的支持:在一些键值数据库中,产生故障时,不可以回滚 使用者 百度云数据库(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Redis和Memcached)、StackOverFlow(Redis)、Instagram (Redis)、Youtube(Memcached)、Wikipedia(Memcached)

5.4.1 键值数据库 键值数据库成为理想的缓冲层解决方案 Redis有时候会被人们称为“强化版的Memcached” 5.4.1 键值数据库 键值数据库成为理想的缓冲层解决方案 Redis有时候会被人们称为“强化版的Memcached” 支持持久化、数据恢复、更多数据类型

5.4.2 列族数据库 相关产品 BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS 5.4.2 列族数据库 相关产品 BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS 数据模型 列族 典型应用 分布式数据存储与管理 数据在地理上分布于多个数据中心的应用程序 可以容忍副本中存在短期不一致情况的应用程序 拥有动态字段的应用程序 拥有潜在大量数据的应用程序,大到几百TB的数据 优点 查找速度快,可扩展性强,容易进行分布式扩展,复杂性低 缺点 功能较少,大都不支持强事务一致性 不适用情形 需要ACID事务支持的情形,Cassandra等产品就不适用 使用者 Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、Twitter(Cassandra and HBase)、Facebook(HBase)、Yahoo!(HBase)

5.4.3 文档数据库 “文档”其实是一个数据记录,这个记录能够对包含的数据类型和内容进行“自我描述”。XML文档、HTML文档和JSON 文档就属于这一类。SequoiaDB就是使用JSON格式的文档数据库,它的存储的数据是这样的: 一个XML文档: <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> </configuration> 关系数据库: 必须有schema信息才能理解数据的含义 学生(学号,姓名,性别,年龄,系,年级) (1001,张三,男,20,计算机,2002)

5.4.3 文档数据库 数据是不规则的,每一条记录包含了所有的有关“SequoiaDB”的信息而没有任何外部的引用,这条记录就是“自包含”的 5.4.3 文档数据库 数据是不规则的,每一条记录包含了所有的有关“SequoiaDB”的信息而没有任何外部的引用,这条记录就是“自包含”的 这使得记录很容易完全移动到其他服务器,因为这条记录的所有信息都包含在里面了,不需要考虑还有信息在别的表没有一起迁移走 同时,因为在移动过程中,只有被移动的那一条记录(文档)需要操作,而不像关系型中每个有关联的表都需要锁住来保证一致性,这样一来ACID的保证就会变得更快速,读写的速度也会有很大的提升

5.4.3 文档数据库 相关产品 MongoDB、CouchDB、Terrastore、ThruDB、RavenDB、SisoDB、RaptorDB、CloudKit、Perservere、Jackrabbit 数据模型 键/值 值(value)是版本化的文档 典型应用 存储、索引并管理面向文档的数据或者类似的半结构化数据 比如,用于后台具有大量读写操作的网站、使用JSON数据结构的应用、使用嵌套结构等非规范化数据的应用程序 优点 性能好(高并发),灵活性高,复杂性低,数据结构灵活 提供嵌入式文档功能,将经常查询的数据存储在同一个文档中 既可以根据键来构建索引,也可以根据内容构建索引 缺点 缺乏统一的查询语法 不适用情形 在不同的文档上添加事务。文档数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案 使用者 百度云数据库(MongoDB)、SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC News (RavenDB)

5.4.4 图形数据库 相关产品 Neo4J、OrientDB、InfoGrid、Infinite Graph、GraphDB 数据模型 5.4.4 图形数据库 相关产品 Neo4J、OrientDB、InfoGrid、Infinite Graph、GraphDB 数据模型 图结构 典型应用 专门用于处理具有高度相互关联关系的数据,比较适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻找等问题 优点 灵活性高,支持复杂的图形算法,可用于构建复杂的关系图谱 缺点 复杂性高,只能支持一定的数据规模 使用者 Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)

5.4.5 不同类型数据库比较分析 MySQL产生年代较早,而且随着LAMP大潮得以成熟。尽管其没有什么大的改进,但是新兴的互联网使用的最多的数据库 MongoDB是个新生事物,提供更灵活的数据模型、异步提交、地理位置索引等五花十色的功能 HBase是个“仗势欺人”的大象兵。依仗着Hadoop的生态环境,可以有很好的扩展性。但是就像象兵一样,使用者需要养一头大象(Hadoop),才能驱使他 Redis是键值存储的代表,功能最简单。提供随机数据存储。就像一根棒子一样,没有多余的构造。但是也正是因此,它的伸缩性特别好。就像悟空手里的金箍棒,大可捅破天,小能成缩成针

5.5 NoSQL的三大基石 NoSQL CAP BASE 最终一致性

5.5.1 CAP 所谓的CAP指的是: C(Consistency):一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的,或者说,所有节点在同一时间具有相同的数据 A:(Availability):可用性,是指快速获取数据,可以在确定的时间内返回操作结果,保证每个请求不管成功或者失败都有响应; P(Tolerance of Network Partition):分区容忍性,是指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能够正常运行,也就是说,系统中任意信息的丢失或失败不会影响系统的继续运作。

5.5.1 CAP CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足其中两个,正所谓“鱼和熊掌不可兼得”。

5.5.1 CAP 一个牺牲一致性来换取可用性的实例 (a)初始状态

5.5.1 CAP 一个牺牲一致性来换取可用性的实例 (b)正常执行过程

5.5.1 CAP 一个牺牲一致性来换取可用性的实例 (c) 更新传播失败时的执行过程

5.5.1 CAP 当处理CAP的问题时,可以有几个明显的选择: CA:也就是强调一致性(C)和可用性(A),放弃分区容忍性(P),最简单的做法是把所有与事务相关的内容都放到同一台机器上。很显然,这种做法会严重影响系统的可扩展性。传统的关系数据库(MySQL、SQL Server和PostgreSQL),都采用了这种设计原则,因此,扩展性都比较差 CP:也就是强调一致性(C)和分区容忍性(P),放弃可用性(A),当出现网络分区的情况时,受影响的服务需要等待数据一致,因此在等待期间就无法对外提供服务 AP:也就是强调可用性(A)和分区容忍性(P),放弃一致性(C),允许系统返回不一致的数据

5.5.1 CAP 图5-5 不同产品在CAP理论下的不同设计原则

5.5.2 BASE 说起BASE(Basically Availble, Soft-state, Eventual consistency),不得不谈到ACID。 ACID BASE 原子性(Atomicity) 基本可用(Basically Available) 一致性(Consistency) 软状态/柔性事务(Soft state) 隔离性(Isolation) 最终一致性 (Eventual consistency) 持久性 (Durable)  

5.5.2 BASE 一个数据库事务具有ACID四性: A(Atomicity):原子性,是指事务必须是原子工作单元,对于其数据修改,要么全都执行,要么全都不执行 C(Consistency):一致性,是指事务在完成时,必须使所有的数据都保持一致状态 I(Isolation):隔离性,是指由并发事务所做的修改必须与任何其它并发事务所做的修改隔离 D(Durability):持久性,是指事务完成之后,它对于系统的影响是永久性的,该修改即使出现致命的系统故障也将一直保持

5.5.2 BASE BASE的基本含义是基本可用(Basically Availble)、软状态(Soft-state)和最终一致性(Eventual consistency): 基本可用 基本可用,是指一个分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,也就是允许分区失败的情形出现 软状态 “软状态(soft-state)”是与“硬状态(hard-state)”相对应的一种提法。数据库保存的数据是“硬状态”时,可以保证数据一致性,即保证数据一直是正确的。“软状态”是指状态可以有一段时间不同步,具有一定的滞后性

5.5.2 BASE BASE的基本含义是基本可用(Basically Availble)、软状态(Soft-state)和最终一致性(Eventual consistency): 最终一致性 一致性的类型包括强一致性和弱一致性,二者的主要区别在于高并发的数据访问操作下,后续操作是否能够获取最新的数据。对于强一致性而言,当执行完一次更新操作后,后续的其他读操作就可以保证读到更新后的最新数据;反之,如果不能保证后续访问读到的都是更新后的最新数据,那么就是弱一致性。而最终一致性只不过是弱一致性的一种特例,允许后续的访问操作可以暂时读不到更新后的数据,但是经过一段时间之后,必须最终读到更新后的数据。 最常见的实现最终一致性的系统是DNS(域名系统)。一个域名更新操作根据配置的形式被分发出去,并结合有过期机制的缓存;最终所有的客户端可以看到最新的值。

5.5.3 最终一致性 最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为: 5.5.3 最终一致性 最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为: 因果一致性:如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将获得A写入的最新值。而与进程A无因果关系的进程C的访问,仍然遵守一般的最终一致性规则 “读己之所写”一致性:可以视为因果一致性的一个特例。当进程A自己执行一个更新操作之后,它自己总是可以访问到更新过的值,绝不会看到旧值 单调读一致性:如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值

5.5.3 最终一致性 最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为: 5.5.3 最终一致性 最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为: 会话一致性:它把访问存储系统的进程放到会话(session)的上下文中,只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统保证不会延续到新的会话 单调写一致性:系统保证来自同一个进程的写操作顺序执行。系统必须保证这种程度的一致性,否则就非常难以编程了

5.5.3 最终一致性 如何实现各种类型的一致性? 对于分布式数据系统: N — 数据复制的份数 W — 更新数据是需要保证写完成的节点数 5.5.3 最终一致性 如何实现各种类型的一致性? 对于分布式数据系统: N — 数据复制的份数 W — 更新数据是需要保证写完成的节点数 R — 读取数据的时候需要读取的节点数 如果W+R>N,写的节点和读的节点重叠,则是强一致性。例如对于典型的一主一备同步复制的关系型数据库,N=2,W=2,R=1,则不管读的是主库还是备库的数据,都是一致的。一般设定是R+W = N+1,这是保证强一致性的最小设定 如果W+R<=N,则是弱一致性。例如对于一主一备异步复制的关系型数据库,N=2,W=1,R=1,则如果读的是备库,就可能无法读取主库已经更新过的数据,所以是弱一致性。

5.5.3 最终一致性 对于分布式系统,为了保证高可用性,一般设置N>=3。不同的N,W,R组合,是在可用性和一致性之间取一个平衡,以适应不同的应用场景。 如果N=W,R=1,任何一个写节点失效,都会导致写失败,因此可用性会降低,但是由于数据分布的N个节点是同步写入的,因此可以保证强一致性。 实例:HBase是借助其底层的HDFS来实现其数据冗余备份的。HDFS采用的就是强一致性保证。在数据没有完全同步到N个节点前,写操作是不会返回成功的。也就是说它的W=N,而读操作只需要读到一个值即可,也就是说它R=1。 像Voldemort,Cassandra和Riak这些类Dynamo的系统,通常都允许用户按需要设置N,R,W三个值,即使是设置成W+R<= N也是可以的。也就是说他允许用户在强一致性和最终一致性之间自由选择。而在用户选择了最终一致性,或者是W<N的强一致性时,则总会出现一段“各个节点数据不同步导致系统处理不一致的时间”。为了提供最终一致性的支持,这些系统会提供一些工具来使数据更新被最终同步到所有相关节点。

5.6 从NoSQL到NewSQL数据库 图5-6 大数据引发数据处理架构变革

5.6 从NoSQL到NewSQL数据库 图5-7 关系数据库、NoSQL和NewSQL数据库产品分类图

5.7 文档数据库MongoDB 5.7.1 MongoDB简介 5.7.2 MongoDB概念解析 5.7.3 安装MongoDB 具体请参考网络教程:http://www.runoob.com/mongodb/mongodb-tutorial.html 或者参考厦门大学数据库实验室建设的中国高校大数据课程公共服务平台的技术文章:http://dblab.xmu.edu.cn/blog/115/

5.7.1 MongoDB简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

5.7.1 MongoDB简介 提供了一个面向文档存储,操作起来比较简单和容易 可以设置任何属性的索引来实现更快的排序 主要特点 提供了一个面向文档存储,操作起来比较简单和容易 可以设置任何属性的索引来实现更快的排序 具有较好的水平可扩展性 支持丰富的查询表达式,可轻易查询文档中内嵌的对象及数组 可以实现替换完成的文档(数据)或者一些指定的数据字段 MongoDB中的Map/Reduce主要是用来对数据进行批量处理和聚合操作 支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等语言 MongoDB安装简单

5.7.2 MongoDB概念解析 在mongodb中基本的概念是文档、集合、数据库 SQL术语/概念 MongoDB术语/概念 解释/说明 database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index 索引 table joins   表连接,MongoDB不支持 primary key 主键,MongoDB自动将_id字段设置为主键

5.7.2 MongoDB概念解析 通过下图实例,我们也可以更直观的的了解MongoDB中的一些概念: id user_name email age city 1 Mark Hanks mark@abc.com 25 Los Angeles 2 Richard Peter richard@abc.com 31 Dallas { "_id": ObjectId("5146bb52d8524270060001f3"), "age": 25, "city": "Los Angeles", "email": "mark@abc.com", "user_name": "Mark Hanks " } { "_id": ObjectId("5146bb52d8524270060001f2"), "age": 31, "city": "Dallas", "email": "richard@abc.com", "user_name": "Richard Peter "

5.7.2 MongoDB概念解析 举例2:在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票)会被打散在多张数据表中。在文档数据库MongoDB中,能用一个文档来表示一篇博客, 评论与投票作为文档数组,放在正文主文档中。这样数据更易于管理,消除了传统关系型数据库中影响性能和水平扩展性的“JOIN”操作。 author: blogposts: comments:

5.7.2 MongoDB概念解析 { “id”:1, “author”:”Jane”, “blogposts”:{ “tile”:”MyFirstPost”, “comment”:{ “by”:”Ada”,”text”:”Good post” }

5.7.2 MongoDB概念解析 数据库 一个mongodb中可以建立多个数据库。 MongoDB的默认数据库为"db",该数据库存储在data目录中。 MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。 文档 文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。 一个简单的文档例子如下: {“site”:“dblab.xmu.edu.cn”, “name”:“厦门大学数据库实验室"}

5.7.2 MongoDB概念解析 下表列出了 RDBMS 与 MongoDB 对应的术语: RDBMS MongoDB 数据库 表格 集合 行 文档 列 字段 表联合 嵌入文档 主键 主键 (MongoDB 提供了 key 为 _id ) 数据库服务和客户端 Mysqld/Oracle mongod mysql/sqlplus mongo

5.7.2 MongoDB概念解析 集合 集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。 集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。 比如,我们可以将以下不同数据结构的文档插入到集合中: {"site":"www.baidu.com"} {“site”:“dblab.xmu.edu.cn”, “name”:“厦门大学数据库实验室"} {"site":"www.runoob.com","name":"菜鸟教程","num":5}

5.7.2 MongoDB概念解析 MongoDB 数据类型 数据类型 描述 String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 Boolean 布尔值。用于存储布尔值(真/假)。 Double 双精度浮点值。用于存储浮点值。 Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 Arrays 用于将数组或列表或多个值存储为一个键。 Timestamp 时间戳。记录文档修改或添加的具体时间。 Object 用于内嵌文档。 Null 用于创建空值。 Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 Object ID 对象 ID。用于创建文档的 ID。 Binary Data 二进制数据。用于存储二进制数据。 Code 代码类型。用于在文档中存储 JavaScript 代码。 Regular expression 正则表达式类型。用于存储正则表达式。

5.7.3 安装MongoDB Window平台安装 MongoDB Linux平台安装MongoDB MongoDB提供了可用于32位和64位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB预编译二进制包下载地址:http://www.mongodb.org/downloads 注意:在 MongoDB2.2 版本后已经不再支持 Windows XP 系统。 Linux平台安装MongoDB MongoDB提供了linux平台上32位和64位的安装包,你可以在官网下载安装包。 下载地址:http://www.mongodb.org/downloads 启动 MongoDB服务 只需要在MongoDB安装目录的bin目录下执行'mongod'即可

5.7.4 访问MongoDB 5.7.4.1 使用 MongoDB shell访问MongoDB 5.7.4.2 使用Java程序访问 MongoDB

5.7.4.1 使用 MongoDB shell访问MongoDB mongodb://localhost 使用用户名和密码连接登陆到指定数据库: mongodb://admin:123456@localhost/test

5.7.4.1 使用 MongoDB shell访问MongoDB use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库。 如果你想查看所有数据库,可以使用 show dbs 命令 创建集合 MongoDB没有单独创建集合名的shell命令,在插入数据的时候,MongoDB会自动创建对应的集合。

5.7.4.1 使用 MongoDB shell访问MongoDB 文档的数据结构和JSON基本一样。 所有存储在集合中的数据都是BSON格式。 BSON是一种类JSON的一种二进制形式的存储格式,简称Binary JSON。 MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下: db.COLLECTION_NAME.insert(document) 实例 >db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: ‘厦门大学数据库实验室', url: 'http://dblab.xmu.edu.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })

5.7.4.2 使用Java程序访问 MongoDB MongoDB Java 环境配置 在Java程序中如果要使用MongoDB,需要确保已经安装了Java环境及MongoDB JDBC 驱动。 首先必须下载mongo jar包,下载地址:https://github.com/mongodb/mongo-java-driver/downloads, 请确保下载最新版本。 需要将mongo.jar包含在你的 classpath 中

5.7.4.2 使用Java程序访问 MongoDB (1)连接数据库 import com.mongodb.MongoClient; ……//这里省略其他需要导入的包 public class MongoDBJDBC{ public static void main( String args[] ){ try{ // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // 连接到数据库 DB db = mongoClient.getDB( "test" ); System.out.println("Connect to database successfully"); boolean auth = db.authenticate(myUserName, myPassword); System.out.println("Authentication: "+auth); }catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); }

5.7.4.2 使用Java程序访问 MongoDB (2)创建集合 可以使用com.mongodb.DB类中的createCollection()来创建集合 public class MongoDBJDBC{ public static void main( String args[] ){ try{ // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // 连接到数据库 DB db = mongoClient.getDB( "test" ); System.out.println("Connect to database successfully"); boolean auth = db.authenticate(myUserName, myPassword); System.out.println("Authentication: "+auth); DBCollection coll = db.createCollection("mycol"); System.out.println("Collection created successfully"); }catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); }

5.7.4.2 使用Java程序访问 MongoDB (3)插入文档 可以使用com.mongodb.DBCollection类的 insert() 方法来插入一个文档 public class MongoDBJDBC{ public static void main( String args[] ){ try{ // 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // 连接到数据库 DB db = mongoClient.getDB( "test" ); System.out.println("Connect to database successfully"); boolean auth = db.authenticate(myUserName, myPassword); System.out.println("Authentication: "+auth); DBCollection coll = db.getCollection("mycol"); System.out.println("Collection mycol selected successfully"); BasicDBObject doc = new BasicDBObject("title", "MongoDB"). append("description", "database"). append("likes", 100). append("url", "http://www.w3cschool.cc/mongodb/"). append("by", "w3cschool.cc"); coll.insert(doc); System.out.println("Document inserted successfully"); }catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); }

本章小结 本章介绍了NoSQL数据库的相关知识 NoSQL数据库较好地满足了大数据时代的各种非结构化数据的存储需求,开始得到越来越广泛的应用。但是,需要指出的是,传统的关系数据库和NoSQL数据库各有所长,彼此都有各自的市场空间,不存在一方完全取代另一方的问题,在很长的一段时期内,二者都会共同存在,满足不同应用的差异化需求 NoSQL数据库主要包括键值数据库、列族数据库、文档型数据库和图形数据库等四种类型,不同产品都有各自的应用场合。CAP、BASE和最终一致性是NoSQL数据库的三大理论基石,是理解NoSQL数据库的基础 介绍了融合传统关系数据库和NoSQL优点的NewSQL数据库 本章最后介绍了具有代表性的NoSQL数据库——文档数据库MongoDB

附录:主讲教师林子雨简介 主讲教师:林子雨 单位:厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 个人网页:http://www.cs.xmu.edu.cn/linziyu 数据库实验室网站:http://dblab.xmu.edu.cn 扫一扫访问个人主页 林子雨,男,1978年出生,博士(毕业于北京大学),现为厦门大学计算机科学系助理教授(讲师),曾任厦门大学信息科学与技术学院院长助理、晋江市发展和改革局副局长。中国计算机学会数据库专业委员会委员,中国计算机学会信息系统专业委员会委员,荣获“2016中国大数据创新百人”称号。中国高校首个“数字教师”提出者和建设者,厦门大学数据库实验室负责人,厦门大学云计算与大数据研究中心主要建设者和骨干成员,2013年度厦门大学奖教金获得者。主要研究方向为数据库、数据仓库、数据挖掘、大数据、云计算和物联网,并以第一作者身份在《软件学报》《计算机学报》和《计算机研究与发展》等国家重点期刊以及国际学术会议上发表多篇学术论文。作为项目负责人主持的科研项目包括1项国家自然科学青年基金项目(No.61303004)、1项福建省自然科学青年基金项目(No.2013J05099)和1项中央高校基本科研业务费项目(No.2011121049),同时,作为课题负责人完成了国家发改委城市信息化重大课题、国家物联网重大应用示范工程区域试点泉州市工作方案、2015泉州市互联网经济调研等课题。中国高校首个“数字教师”提出者和建设者,2009年至今,“数字教师”大平台累计向网络免费发布超过100万字高价值的研究和教学资料,累计网络访问量超过100万次。打造了中国高校大数据教学知名品牌,编著出版了中国高校第一本系统介绍大数据知识的专业教材《大数据技术原理与应用》,并成为京东、当当网等网店畅销书籍;建设了国内高校首个大数据课程公共服务平台,为教师教学和学生学习大数据课程提供全方位、一站式服务,年访问量超过50万次。具有丰富的政府和企业信息化培训经验,厦门大学管理学院EDP中心、浙江大学管理学院EDP中心、厦门大学继续教育学院、泉州市科技培训中心特邀培训讲师,曾给中国移动通信集团公司、福州马尾区政府、福建龙岩卷烟厂、福建省物联网科学研究院、石狮市物流协会、厦门市物流协会、浙江省中小企业家、四川泸州企业家、江苏沛县企业家等开展信息化培训,累计培训人数达3000人以上。

附录:《大数据技术原理与应用》教材 《大数据技术原理与应用——概念、存储、处理、分析与应用(第2版)》,由厦门大学计算机科学系林子雨博士编著,是中国高校第一本系统介绍大数据知识的专业教材。 全书共有15章,系统地论述了大数据的基本概念、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据 库HBase、NoSQL数据库、云数据库、分布式并行编程模型MapReduce、Spark、流计算、图计算、数据可视化以及大数据在互联网、生物医学和物流等各个领域的应用。在Hadoop、HDFS、HBase和MapReduce等重要章节,安排了入门级的实践操作,让读者更好地学习和掌握大数据关键技术。 本书可以作为高等院校计算机专业、信息管理等相关专业的大数据课程教材,也可供相关技术人员参考、学习、培训之用。 扫一扫访问教材官网 欢迎访问《大数据技术原理与应用——概念、存储、处理、分析与应用》教材官方网站:http://dblab.xmu.edu.cn/post/bigdata

附录:中国高校大数据课程公共服务平台 http://dblab.xmu.edu.cn/post/bigdata-teaching-platform/ 扫一扫访问平台主页 扫一扫观看3分钟FLASH动画宣传片

Department of Computer Science, Xiamen University, 2017