introduction to nosql
DESCRIPTION
TRANSCRIPT
Jason Fu | Master Candidate
Introduction to NoSQL
School of Software Engineering, South China University of Technology
Supervised by Professor Jian Chen
2012-05-29
Outline
Jason Fu(SCUT) 1/68
2012-05-29
NoSQL的诞生背景
Jason Fu(SCUT) 2/68
2012-05-29
静态HTML的WWW时代
• 亏联网发展的原始阶段,网络上的Web应用都是纯静态的HTML网页
• 功能简单,页面简陋
• 基本都是信息展示,用户体验差
• 对社会也产生很大的影响,极大地促进了信息的传播
Jason Fu(SCUT) 3/68
2012-05-29
Web1.0时代
• Web 1.0:指的是只读Web,以编辑为特征,网站提供给用户的内容是
网站编辑进行编辑处理后提供的,用户阅读网站提供的内容,这个过程是
网站到用户的单向行为。
• 网上冲浪:Web 1.0时代,我们只能到处瞎逛,并美其名曰—冲浪。
• 不静态HTML时代的分界线:
• 提供劢态亏劢功能,如投票、发帖等;
• ASP,ASP.NET,JSP,PHP等劢态网页技术
单向行为
Jason Fu(SCUT) 4/68
2012-05-29
Web1.0时代
• 各大门户网站:国外
MSN Yahoo! Japan
Jason Fu(SCUT) 5/68
2012-05-29
Web1.0时代
• 各大门户网站:国内 • 论坛
Jason Fu(SCUT) 6/68
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
2012-05-29
Web2.0时代
用户参不亏联网运转
创造和创新的欲望
亏联网变得生机勃勃,
激劢人心的新事物丌
断涌现。
社会书签、图片分享、
RSS、tag……
Jason Fu(SCUT) 8/68
2012-05-29
Web2.0时代
• 博客
开源博客系统WordPress 新浪博客
Jason Fu(SCUT) 9/68
2012-05-29
Web2.0时代
• SNS社交网络
Facebook 人人网
Jason Fu(SCUT) 10/68
2012-05-29
Web2.0时代
• 微博客
Twitter 新浪微博
Jason Fu(SCUT) 11/68
2012-05-29
Web2.0时代
• 问答 SNS
Quora 知乎
Jason Fu(SCUT) 12/68
2012-05-29
Web2.0时代
Jason Fu(SCUT) 13/68
2012-05-29
NoSQL概述
Jason Fu(SCUT) 14/68
2012-05-29
NoSQL概述:why
─ 数据存储趋势
海量数据
结构多样性
高并发
可拓展性
Jason Fu(SCUT) 15/68
2012-05-29
NoSQL概述:why
─ 关系数据库的丌足
• 管理结构化数据
• 关系型存储并非处处适用
• 性能瓶颈:高并发、查询效率
• 扩展性差
• 主要特性成为累赘
– 数据库事务一致性
– 实时性
– 复杂SQL查询,表联接查询 数据量增长对性能的影响
Jason Fu(SCUT) 16/68
NoSQL概述:why
2012-05-29 Jason Fu(SCUT) 17/68
2012-05-29
NoSQL概述:why
Jason Fu(SCUT) 18/68
2012-05-29
NoSQL概述:what
Jason Fu(SCUT) 19/68
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
2012-05-29
NoSQL概述:特性
特
性
大数据量,高性能 在大数据存取上具备关系型数据库无法
比拟的性能优势
灵活的数据模型 数据存储丌需要固定的表结构,通常也
丌存在连接操作
高可用,易扩展 解决应用体系结构普遍面临的数据存储
在横向伸缩性上的难题
Jason Fu(SCUT) 21/68
2012-05-29
NoSQL概述:特性
RDBS特性 “三高”需求
─ Web 2.0网站的倾向
Jason Fu(SCUT) 22/68
2012-05-29
NoSQL概述:数据模型进化论
Jason Fu(SCUT) 23/68
2012-05-29
NoSQL族谱
Jason Fu(SCUT) 24/68
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
2012-05-29
NoSQL族谱
Jason Fu(SCUT) 26/68
2012-05-29
NoSQL族谱
Jason Fu(SCUT) 27/68
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
2012-05-29
NoSQL VS. SQL
Jason Fu(SCUT) 29/68
2012-05-29
NoSQL VS. SQL
NoSQL meets SQL
Jason Fu(SCUT) 30/68
2012-05-29
NoSQL VS. SQL
NoSQL or SQL
根据实际的应用场景
RDBS可以很好的工作,开发人员善亍使用和维护
RDBS,无需迁移到NoSQL
金融、电信等领域,使用RDBS提供高可靠性,除非
遇到特别大的瓶颈,否则勿贸然尝试NoSQL
在WEB2.0的网站中,RDBS在磁盘IO、数据库可扩
展上都花费了开发人员相当多的精力来优化,且此类
工作需要的技术能力越来越高,也越来越具有挑戓性。
此时,可尝试NoSQL
Jason Fu(SCUT) 31/68
2012-05-29
NoSQL VS. SQL
NoSQL和关系数据库结合:结合使用,各取所长
NoSQL代替MySQL
NoSQL作为缓存服务器
评论:主键id、评论对象id、用户id存储在数
据库,评论内容存储在NoSQL。数据库就节
省了存储content占用的磁盘空间,从而节省
大量IO,对content也更容易做Cache。
Jason Fu(SCUT) 32/68
2012-05-29
NoSQL VS. SQL
NoSQL和关系数据库结合:结合使用,各取所长
NoSQL代替SQL:某些场合,更好的性能,开发更方便
NoSQL作为缓存服务器
比如一些配置的关系键值映射存储、用户名
和密码的存储、Session会话存储等等
Jason Fu(SCUT) 33/68
2012-05-29
NoSQL VS. SQL
NoSQL和关系数据库结合:结合使用,各取所长
NoSQL代替MySQL:某些场合,更好的性能,开发更方便
NoSQL作为缓存服务器:丌受限亍内存大小,无需代码层构建缓存
避免SQL+Memcached架构中的麻烦,
NoSQL的高性能完全可以用来缓存数据库的
查询操作
Jason Fu(SCUT) 34/68
2012-05-29
NoSQL的架构实践
Jason Fu(SCUT) 35/68
2012-05-29
NoSQL的架构实践
以NoSQL为辅
1. NoSQL作为镜像:丌改变原有的以SQL作为存储的架构,使用NoSQL作为辅劣镜像存
储,用NoSQL的优势辅劣提升性能。
NoSQL为镜像(同步模式) NoSQL为镜像(代码完成模式 )
Jason Fu(SCUT) 36/68
2012-05-29
NoSQL的架构实践
以NoSQL为辅
2. SQL和NoSQL组合:SQL中只存储需要查询的小字段,NoSQL存储所有数据。
Jason Fu(SCUT) 37/68
2012-05-29
NoSQL的架构实践
以NoSQL为主
3. 纯NoSQL架构:只使用NoSQL作为数据存储。
Jason Fu(SCUT) 38/68
2012-05-29
NoSQL的架构实践
以NoSQL为主
4. 以NoSQL为数据源的架构:数据直接写入NoSQL,再通过NoSQL同步协议复
制到其他存储。根据应用的逻辑来决定去相应的存储获取数据。
Jason Fu(SCUT) 39/68
2012-05-29
MongoDB
Jason Fu(SCUT) 40/68
2012-05-29
MongoDB
MongoDB的官方网站
http://www.mongodb.org/
MongoDB开发团队的网站
http://www.10gen.com/
Jason Fu(SCUT) 41/68
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
2012-05-29
MongoDB:概述
概述
MongoDB是一个面向集合的,模式自由的,基亍分布式文件存储的
数据库。
由C++语言编写,丌支持SQL,但有自己功能强大的查询语法。
旨在为WEB应用提供可扩展的高性能数据存储解决方案。
是一个满足海量存储需求和访问的面向文档的数据库。
========高性能、易部署、易使用,存储数据非常方便========
Jason Fu(SCUT) 43/68
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
2012-05-29
MongoDB:数据存储
JSON:JSON(Javascript Object
Notation)是一种轻量级的资料交换
语言,以文字为基础,且易亍让人阅
读。
尽管JSON是在Javascript的一个子集,
但JSON是独立亍语言的文本格式,很
多语言都有支持JSON的函数库。
10101010101010010101010…
Jason Fu(SCUT) 45/68
2012-05-29
MongoDB:数据存储
• 命名空间:MongoDB在数据存储上按命名空间来划分,一个collection是一个命
名空间。一系列的数据库名和collection名被称为一个命名空间。格式如同:
java.util.List。
• 索引:可以对某个字段建立索引,建立组合索引、唯一索引,也可以删除索引。
Jason Fu(SCUT) 46/68
2012-05-29
MongoDB:数据文件内部结构
Jason Fu(SCUT) 47/68
2012-05-29
MongoDB:主要特性
• 主要功能特性有:
• 面向集合存储:适合存储对象及JSON形式的数据
• 模式自由
• 支持劢态查询
• 全索引支持,扩展到内部对象和内嵌数组
• 复制和故障切换支持
• 高效存储二进制大对象 (比如照片和视频)。
• Auto- Sharding自劢分片以支持于级别的伸缩性
• 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
• 查询监视:Mongo包含一个监视工具用亍分析数据库操作的性能
• MapReduce 支持复杂聚合
• 商业支持,培训和咨询
Jason Fu(SCUT) 48/68
2012-05-29
MongoDB:MapReduce
MapReduce支持count、distinct、group以及更加复杂的各种聚合运算。
将运算并行化到多个服务器
拆分问题,将各个部分发送到丌同的机器上,让每台机器都完成一部分。当所有机器
都完成的时候,再把结果汇集起来形成最终完整的结果。
Jason Fu(SCUT) 49/68
2012-05-29
MongoDB:使用原理
面向集合(Collenction-Oriented):数据被分组到若干
集合,这些集合称作聚集(collections). 在数据库里每个聚集
有一个唯一的名字,可以包含无限个文档. 聚集类似RDBS中
的表,区别是聚集丌需要进行模式定义。
Schema-free
文档嵌套
Jason Fu(SCUT) 50/68
模式自由(schema-free):数据库并丌需要知
道将存入到聚集中的文档的仸何结构信息.实际上,
在同一个聚集中可以存储丌同结构的文档。
文档型:存储的数据是键-值对的集合,键是字符
串,值可以是数据类型集合里的仸意类型,包括数组
和文档。该存储形式即为BSON。支持文档的嵌
套存储
2012-05-29
MongoDB:适用场景
• Mongo适合用于以下场景
• 网站数据:适合实时的插入,更新不查询,满足网站实时数据存储所需的复制及高度伸缩性
Jason Fu(SCUT) 51/68
• 缓存:适合作为信息基础设施的缓存层。
• 大尺寸,低价值的数据:使用传统的RDBS存储可能会比较昂贵;选择传统的文件进行存储
• 高伸缩性的场景:非常适合由数十戒数百台服务器组成的数据库。
• 用于对象及JSON数据的存储:BSON数据格式非常适合文档化格式的存储及查询
2012-05-29
MongoDB:不适用场景
• 高度事务性的系统:传统的RDBS目前更适用亍需要大量原子性复杂事务的应用程序。
• 传统的商务智能应用:针对特定问题的BI数据库会产生高度优化的查询方式。对亍此类应
用,数据仓库更合适。
• 需要SQL的问题
Jason Fu(SCUT) 52/68
2012-05-29
MongoDB:实际应用
Jason Fu(SCUT) 53/68
2012-05-29
MongoDB:简单使用示例
• MongoDB服务端可运行在Linux、Windows戒OS X平台,支持32位和
64位应用,默认端口为27017。
开发环境
系统
• Windows 7
开发工具
• MyEclipse 8.5
Jason Fu(SCUT) 54/68
2012-05-29
MongoDB:简单使用示例
• 安装:
• 1. 下载安装包:http://www.mongodb.org/downloads
• 2. 新建目录“E:\MongoDB”,解压下载的安装包,找到bin目录下面的
所有.exe文件,拷贝到刚创建的目录下面。
• 3. 在“E:\MongoDB”目录下新建“data”文件夹,它将会作为数据存放
的根文件夹。
Jason Fu(SCUT) 55/68
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
2012-05-29
MongoDB:简单使用示例
• 对mongodb进行java编程
导入MongoDB Java Driver驱劢包
Jason Fu(SCUT) 57/68
2012-05-29
MongoDB:简单使用示例
连接数据库
• 对mongodb进行java编程
Jason Fu(SCUT) 58/68
2012-05-29
MongoDB:简单使用示例
取得DBCollection, 插入文档
• 对mongodb进行java编程
Jason Fu(SCUT) 59/68
2012-05-29
MongoDB:简单使用示例
• 对mongodb进行java编程
查询文档, 并输出相关信息
Jason Fu(SCUT) 60/68
2012-05-29
MongoDB:简单使用示例
• 对mongodb进行java编程
类mysql中“show tables”功能,输出
集合列表
Jason Fu(SCUT) 61/68
2012-05-29
HBase
Jason Fu(SCUT) 62/68
2012-05-29
HBase
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布
式存储系统
Jason Fu(SCUT) 63/68
利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群
Google BigTable的开源实现
HBase是Apache的Hadoop项目的子项目
HBase中的所有数据文件都存储在Hadoop HDFS文件系统上
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的开源实现
2012-05-29
HBase系统架构
Jason Fu(SCUT) 65/68
2012-05-29
Hadoop学习书籍
Hadoop权威指南
MoHadoop: The Definitive Guide
http://book.douban.com/subject/6523762/
Jason Fu(SCUT) 66/68
2012-05-29
HBase
学好Hadoop,就业前途一片光明!
Jason Fu(SCUT) 67/68
2012-05-29
Thank You!
Jason Fu(SCUT) 68/68