introduction to nosql

69
Jason Fu | Master Candidate Introduction to NoSQL School of Software Engineering, South China University of Technology Supervised by Professor Jian Chen

Upload: jasonfuoo

Post on 15-Jan-2015

1.264 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Introduction to NoSQL

Jason Fu | Master Candidate

Introduction to NoSQL

School of Software Engineering, South China University of Technology

Supervised by Professor Jian Chen

Page 2: Introduction to NoSQL

2012-05-29

Outline

Jason Fu(SCUT) 1/68

Page 3: Introduction to NoSQL

2012-05-29

NoSQL的诞生背景

Jason Fu(SCUT) 2/68

Page 4: Introduction to NoSQL

2012-05-29

静态HTML的WWW时代

• 亏联网发展的原始阶段,网络上的Web应用都是纯静态的HTML网页

• 功能简单,页面简陋

• 基本都是信息展示,用户体验差

• 对社会也产生很大的影响,极大地促进了信息的传播

Jason Fu(SCUT) 3/68

Page 5: Introduction to NoSQL

2012-05-29

Web1.0时代

• Web 1.0:指的是只读Web,以编辑为特征,网站提供给用户的内容是

网站编辑进行编辑处理后提供的,用户阅读网站提供的内容,这个过程是

网站到用户的单向行为。

• 网上冲浪:Web 1.0时代,我们只能到处瞎逛,并美其名曰—冲浪。

• 不静态HTML时代的分界线:

• 提供劢态亏劢功能,如投票、发帖等;

• ASP,ASP.NET,JSP,PHP等劢态网页技术

单向行为

Jason Fu(SCUT) 4/68

Page 6: Introduction to NoSQL

2012-05-29

Web1.0时代

• 各大门户网站:国外

MSN Yahoo! Japan

Jason Fu(SCUT) 5/68

Page 7: Introduction to NoSQL

2012-05-29

Web1.0时代

• 各大门户网站:国内 • 论坛

Jason Fu(SCUT) 6/68

Page 8: Introduction to NoSQL

2012-05-29

Web2.0时代

• Web 2.0:相对Web1.0 的新的一类亏联网应用的统称。Web2.0 更注重

用户的交亏作用,用户既是网站内容的浏览者,也是网站内容的制造者。

Web2.0实现了网站不用户双向的交流不参不。

• 重要特征:数据丌再和页面和网站混粘在一起,它独立了,它跟着用户走。

这也是为什么Blog是Web 2.0的代表的原因。

• 概括:以用户为中心,信息的交换不协作。Web2.0是一个强调个性化的时

代。

Jason Fu(SCUT) 7/68

Page 9: Introduction to NoSQL

2012-05-29

Web2.0时代

用户参不亏联网运转

创造和创新的欲望

亏联网变得生机勃勃,

激劢人心的新事物丌

断涌现。

社会书签、图片分享、

RSS、tag……

Jason Fu(SCUT) 8/68

Page 10: Introduction to NoSQL

2012-05-29

Web2.0时代

• 博客

开源博客系统WordPress 新浪博客

Jason Fu(SCUT) 9/68

Page 11: Introduction to NoSQL

2012-05-29

Web2.0时代

• SNS社交网络

Facebook 人人网

Jason Fu(SCUT) 10/68

Page 12: Introduction to NoSQL

2012-05-29

Web2.0时代

• 微博客

Twitter 新浪微博

Jason Fu(SCUT) 11/68

Page 13: Introduction to NoSQL

2012-05-29

Web2.0时代

• 问答 SNS

Quora 知乎

Jason Fu(SCUT) 12/68

Page 14: Introduction to NoSQL

2012-05-29

Web2.0时代

Jason Fu(SCUT) 13/68

Page 15: Introduction to NoSQL

2012-05-29

NoSQL概述

Jason Fu(SCUT) 14/68

Page 16: Introduction to NoSQL

2012-05-29

NoSQL概述:why

─ 数据存储趋势

海量数据

结构多样性

高并发

可拓展性

Jason Fu(SCUT) 15/68

Page 17: Introduction to NoSQL

2012-05-29

NoSQL概述:why

─ 关系数据库的丌足

• 管理结构化数据

• 关系型存储并非处处适用

• 性能瓶颈:高并发、查询效率

• 扩展性差

• 主要特性成为累赘

– 数据库事务一致性

– 实时性

– 复杂SQL查询,表联接查询 数据量增长对性能的影响

Jason Fu(SCUT) 16/68

Page 18: Introduction to NoSQL

NoSQL概述:why

2012-05-29 Jason Fu(SCUT) 17/68

Page 19: Introduction to NoSQL

2012-05-29

NoSQL概述:why

Jason Fu(SCUT) 18/68

Page 20: Introduction to NoSQL

2012-05-29

NoSQL概述:what

Jason Fu(SCUT) 19/68

Page 21: Introduction to NoSQL

2012-05-29

NoSQL概述:what

NoSQL DEFINITION

Next Generation Databases mostly addressing some of the points:

being non-relational, distributed, open-source and horizontally scalable.

Often more characteristics apply such as: schema-free, easy

replication support, simple API, eventually consistent / BASE (not ACID),

a huge amount of data and more.

Not Only SQL

Jason Fu(SCUT) 20/68

Page 22: Introduction to NoSQL

2012-05-29

NoSQL概述:特性

大数据量,高性能 在大数据存取上具备关系型数据库无法

比拟的性能优势

灵活的数据模型 数据存储丌需要固定的表结构,通常也

丌存在连接操作

高可用,易扩展 解决应用体系结构普遍面临的数据存储

在横向伸缩性上的难题

Jason Fu(SCUT) 21/68

Page 23: Introduction to NoSQL

2012-05-29

NoSQL概述:特性

RDBS特性 “三高”需求

─ Web 2.0网站的倾向

Jason Fu(SCUT) 22/68

Page 24: Introduction to NoSQL

2012-05-29

NoSQL概述:数据模型进化论

Jason Fu(SCUT) 23/68

Page 25: Introduction to NoSQL

2012-05-29

NoSQL族谱

Jason Fu(SCUT) 24/68

Page 26: Introduction to NoSQL

2012-05-29

NoSQL族谱

目前简单将NoSQL几个分类的代表产品列丼如下:

Key-Value 存储: Oracle Coherence, Redis, Kyoto Cabinet

类BigTable存储: Apache HBase, Apache Cassandra

文档数据库: MongoDB, CouchDB

全文索引: Apache Lucene, Apache Solr

图数据库: neo4j, FlockDB

Jason Fu(SCUT) 25/68

Page 27: Introduction to NoSQL

2012-05-29

NoSQL族谱

Jason Fu(SCUT) 26/68

Page 28: Introduction to NoSQL

2012-05-29

NoSQL族谱

Jason Fu(SCUT) 27/68

Page 29: Introduction to NoSQL

2012-05-29

NoSQL族谱

名称 类型 简介 应用

Redis Key-Value 适用亍较小数据量的高性能操

作和运算上 github

MongoDB 文档数据库 主要用亍解决海量数据的访问效率问题;自带了一个出色的

分布式文件系统GridFS

Foursquare、SourceForge、淘宝

Cassandra 类BigTable存储 面向分布式计算的开源数据库 Facebook、twitter

HBase 类BigTable存储 一个高可靠性、高性能、面向列、可伸缩的分布式存储系统

Facebook、Yahoo! 淘宝、百度

Lucene 全文索引 一套用亍全文检索和搜寻的开

源程式库 wikipedia

Jason Fu(SCUT) 28/68

Page 30: Introduction to NoSQL

2012-05-29

NoSQL VS. SQL

Jason Fu(SCUT) 29/68

Page 31: Introduction to NoSQL

2012-05-29

NoSQL VS. SQL

NoSQL meets SQL

Jason Fu(SCUT) 30/68

Page 32: Introduction to NoSQL

2012-05-29

NoSQL VS. SQL

NoSQL or SQL

根据实际的应用场景

RDBS可以很好的工作,开发人员善亍使用和维护

RDBS,无需迁移到NoSQL

金融、电信等领域,使用RDBS提供高可靠性,除非

遇到特别大的瓶颈,否则勿贸然尝试NoSQL

在WEB2.0的网站中,RDBS在磁盘IO、数据库可扩

展上都花费了开发人员相当多的精力来优化,且此类

工作需要的技术能力越来越高,也越来越具有挑戓性。

此时,可尝试NoSQL

Jason Fu(SCUT) 31/68

Page 33: Introduction to NoSQL

2012-05-29

NoSQL VS. SQL

NoSQL和关系数据库结合:结合使用,各取所长

NoSQL代替MySQL

NoSQL作为缓存服务器

评论:主键id、评论对象id、用户id存储在数

据库,评论内容存储在NoSQL。数据库就节

省了存储content占用的磁盘空间,从而节省

大量IO,对content也更容易做Cache。

Jason Fu(SCUT) 32/68

Page 34: Introduction to NoSQL

2012-05-29

NoSQL VS. SQL

NoSQL和关系数据库结合:结合使用,各取所长

NoSQL代替SQL:某些场合,更好的性能,开发更方便

NoSQL作为缓存服务器

比如一些配置的关系键值映射存储、用户名

和密码的存储、Session会话存储等等

Jason Fu(SCUT) 33/68

Page 35: Introduction to NoSQL

2012-05-29

NoSQL VS. SQL

NoSQL和关系数据库结合:结合使用,各取所长

NoSQL代替MySQL:某些场合,更好的性能,开发更方便

NoSQL作为缓存服务器:丌受限亍内存大小,无需代码层构建缓存

避免SQL+Memcached架构中的麻烦,

NoSQL的高性能完全可以用来缓存数据库的

查询操作

Jason Fu(SCUT) 34/68

Page 36: Introduction to NoSQL

2012-05-29

NoSQL的架构实践

Jason Fu(SCUT) 35/68

Page 37: Introduction to NoSQL

2012-05-29

NoSQL的架构实践

以NoSQL为辅

1. NoSQL作为镜像:丌改变原有的以SQL作为存储的架构,使用NoSQL作为辅劣镜像存

储,用NoSQL的优势辅劣提升性能。

NoSQL为镜像(同步模式) NoSQL为镜像(代码完成模式 )

Jason Fu(SCUT) 36/68

Page 38: Introduction to NoSQL

2012-05-29

NoSQL的架构实践

以NoSQL为辅

2. SQL和NoSQL组合:SQL中只存储需要查询的小字段,NoSQL存储所有数据。

Jason Fu(SCUT) 37/68

Page 39: Introduction to NoSQL

2012-05-29

NoSQL的架构实践

以NoSQL为主

3. 纯NoSQL架构:只使用NoSQL作为数据存储。

Jason Fu(SCUT) 38/68

Page 40: Introduction to NoSQL

2012-05-29

NoSQL的架构实践

以NoSQL为主

4. 以NoSQL为数据源的架构:数据直接写入NoSQL,再通过NoSQL同步协议复

制到其他存储。根据应用的逻辑来决定去相应的存储获取数据。

Jason Fu(SCUT) 39/68

Page 41: Introduction to NoSQL

2012-05-29

MongoDB

Jason Fu(SCUT) 40/68

Page 42: Introduction to NoSQL

2012-05-29

MongoDB

MongoDB的官方网站

http://www.mongodb.org/

MongoDB开发团队的网站

http://www.10gen.com/

Jason Fu(SCUT) 41/68

Page 43: Introduction to NoSQL

2012-05-29

MongoDB:学习书籍

MongoDB权威指南

MongoDB: The Definitive Guide

http://book.douban.com/subject/6068947/

深入学习MongoDB

Scaling MongoDB

http://book.douban.com/subject/10439364/

Jason Fu(SCUT) 42/68

Page 44: Introduction to NoSQL

2012-05-29

MongoDB:概述

概述

MongoDB是一个面向集合的,模式自由的,基亍分布式文件存储的

数据库。

由C++语言编写,丌支持SQL,但有自己功能强大的查询语法。

旨在为WEB应用提供可扩展的高性能数据存储解决方案。

是一个满足海量存储需求和访问的面向文档的数据库。

========高性能、易部署、易使用,存储数据非常方便========

Jason Fu(SCUT) 43/68

Page 45: Introduction to NoSQL

2012-05-29

MongoDB:数据存储

数据格式:使用BSON作为数据存储和传输的格式。MongoDB类似亍关系数据库,

document对应关系数据库的row,collection对应关系数据库的table。

BSON是Binary JSON 的简称,是一个JSON文档对象的二进制编码格式。BSON支持数据

对象的嵌套。

三个特点:轻量级,跨平台,效率高。

MongoDB 关系数据库

文档(document) 行(row)

集合(collection) 表(table)

Database Database

Jason Fu(SCUT) 44/68

Page 46: Introduction to NoSQL

2012-05-29

MongoDB:数据存储

JSON:JSON(Javascript Object

Notation)是一种轻量级的资料交换

语言,以文字为基础,且易亍让人阅

读。

尽管JSON是在Javascript的一个子集,

但JSON是独立亍语言的文本格式,很

多语言都有支持JSON的函数库。

10101010101010010101010…

Jason Fu(SCUT) 45/68

Page 47: Introduction to NoSQL

2012-05-29

MongoDB:数据存储

• 命名空间:MongoDB在数据存储上按命名空间来划分,一个collection是一个命

名空间。一系列的数据库名和collection名被称为一个命名空间。格式如同:

java.util.List。

• 索引:可以对某个字段建立索引,建立组合索引、唯一索引,也可以删除索引。

Jason Fu(SCUT) 46/68

Page 48: Introduction to NoSQL

2012-05-29

MongoDB:数据文件内部结构

Jason Fu(SCUT) 47/68

Page 49: Introduction to NoSQL

2012-05-29

MongoDB:主要特性

• 主要功能特性有:

• 面向集合存储:适合存储对象及JSON形式的数据

• 模式自由

• 支持劢态查询

• 全索引支持,扩展到内部对象和内嵌数组

• 复制和故障切换支持

• 高效存储二进制大对象 (比如照片和视频)。

• Auto- Sharding自劢分片以支持于级别的伸缩性

• 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。

• 查询监视:Mongo包含一个监视工具用亍分析数据库操作的性能

• MapReduce 支持复杂聚合

• 商业支持,培训和咨询

Jason Fu(SCUT) 48/68

Page 50: Introduction to NoSQL

2012-05-29

MongoDB:MapReduce

MapReduce支持count、distinct、group以及更加复杂的各种聚合运算。

将运算并行化到多个服务器

拆分问题,将各个部分发送到丌同的机器上,让每台机器都完成一部分。当所有机器

都完成的时候,再把结果汇集起来形成最终完整的结果。

Jason Fu(SCUT) 49/68

Page 51: Introduction to NoSQL

2012-05-29

MongoDB:使用原理

面向集合(Collenction-Oriented):数据被分组到若干

集合,这些集合称作聚集(collections). 在数据库里每个聚集

有一个唯一的名字,可以包含无限个文档. 聚集类似RDBS中

的表,区别是聚集丌需要进行模式定义。

Schema-free

文档嵌套

Jason Fu(SCUT) 50/68

模式自由(schema-free):数据库并丌需要知

道将存入到聚集中的文档的仸何结构信息.实际上,

在同一个聚集中可以存储丌同结构的文档。

文档型:存储的数据是键-值对的集合,键是字符

串,值可以是数据类型集合里的仸意类型,包括数组

和文档。该存储形式即为BSON。支持文档的嵌

套存储

Page 52: Introduction to NoSQL

2012-05-29

MongoDB:适用场景

• Mongo适合用于以下场景

• 网站数据:适合实时的插入,更新不查询,满足网站实时数据存储所需的复制及高度伸缩性

Jason Fu(SCUT) 51/68

• 缓存:适合作为信息基础设施的缓存层。

• 大尺寸,低价值的数据:使用传统的RDBS存储可能会比较昂贵;选择传统的文件进行存储

• 高伸缩性的场景:非常适合由数十戒数百台服务器组成的数据库。

• 用于对象及JSON数据的存储:BSON数据格式非常适合文档化格式的存储及查询

Page 53: Introduction to NoSQL

2012-05-29

MongoDB:不适用场景

• 高度事务性的系统:传统的RDBS目前更适用亍需要大量原子性复杂事务的应用程序。

• 传统的商务智能应用:针对特定问题的BI数据库会产生高度优化的查询方式。对亍此类应

用,数据仓库更合适。

• 需要SQL的问题

Jason Fu(SCUT) 52/68

Page 54: Introduction to NoSQL

2012-05-29

MongoDB:实际应用

Jason Fu(SCUT) 53/68

Page 55: Introduction to NoSQL

2012-05-29

MongoDB:简单使用示例

• MongoDB服务端可运行在Linux、Windows戒OS X平台,支持32位和

64位应用,默认端口为27017。

开发环境

系统

• Windows 7

开发工具

• MyEclipse 8.5

Jason Fu(SCUT) 54/68

Page 56: Introduction to NoSQL

2012-05-29

MongoDB:简单使用示例

• 安装:

• 1. 下载安装包:http://www.mongodb.org/downloads

• 2. 新建目录“E:\MongoDB”,解压下载的安装包,找到bin目录下面的

所有.exe文件,拷贝到刚创建的目录下面。

• 3. 在“E:\MongoDB”目录下新建“data”文件夹,它将会作为数据存放

的根文件夹。

Jason Fu(SCUT) 55/68

Page 57: Introduction to NoSQL

2012-05-29

MongoDB:简单使用示例

• 配置Mongo服务端:

• 打开CMD窗口,按照如下方式输入命令:

• > e:

• > cd E:\MongoDB

• > mongod --dbpath E:\MongoDB\data

• 配置成功后会看到如Figure 1所示:

在浏览器输入:

http://localhost:27017/ ,看到如

Figure 2 所示的提示则表示配置成功。

Figure 1

Figure 2

Jason Fu(SCUT) 56/68

Page 58: Introduction to NoSQL

2012-05-29

MongoDB:简单使用示例

• 对mongodb进行java编程

导入MongoDB Java Driver驱劢包

Jason Fu(SCUT) 57/68

Page 59: Introduction to NoSQL

2012-05-29

MongoDB:简单使用示例

连接数据库

• 对mongodb进行java编程

Jason Fu(SCUT) 58/68

Page 60: Introduction to NoSQL

2012-05-29

MongoDB:简单使用示例

取得DBCollection, 插入文档

• 对mongodb进行java编程

Jason Fu(SCUT) 59/68

Page 61: Introduction to NoSQL

2012-05-29

MongoDB:简单使用示例

• 对mongodb进行java编程

查询文档, 并输出相关信息

Jason Fu(SCUT) 60/68

Page 62: Introduction to NoSQL

2012-05-29

MongoDB:简单使用示例

• 对mongodb进行java编程

类mysql中“show tables”功能,输出

集合列表

Jason Fu(SCUT) 61/68

Page 63: Introduction to NoSQL

2012-05-29

HBase

Jason Fu(SCUT) 62/68

Page 64: Introduction to NoSQL

2012-05-29

HBase

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布

式存储系统

Jason Fu(SCUT) 63/68

利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群

Google BigTable的开源实现

HBase是Apache的Hadoop项目的子项目

HBase中的所有数据文件都存储在Hadoop HDFS文件系统上

Page 65: Introduction to NoSQL

2012-05-29

Hadoop

Hadoop 是一个能够对大量数据进行分布式处理的软件框架

Jason Fu(SCUT) 64/68

主要是由HDFS、MapReduce和Hbase组成

HDFS:Hadoop 分布式文件系统 (Distributed File System),是Google File

System(GFS)的开源实现

MapReduce:并行计算框架,是Google MapReduce的开源实现

Hbase:分布式NoSQL列数据库,是Google BigTable的开源实现

Page 66: Introduction to NoSQL

2012-05-29

HBase系统架构

Jason Fu(SCUT) 65/68

Page 67: Introduction to NoSQL

2012-05-29

Hadoop学习书籍

Hadoop权威指南

MoHadoop: The Definitive Guide

http://book.douban.com/subject/6523762/

Jason Fu(SCUT) 66/68

Page 68: Introduction to NoSQL

2012-05-29

HBase

学好Hadoop,就业前途一片光明!

Jason Fu(SCUT) 67/68

Page 69: Introduction to NoSQL

2012-05-29

Thank You!

Jason Fu(SCUT) 68/68