“每天收获小进步,积累起来就是大进步;每天收获小幸福,积攒起来便成大幸福。"
你好,我是梦阳辰!期待与你相遇!

文章目录

  • 01.NoSQL概述
    • NoSQL数据库分类
  • 为什么要使用NoSQL数据库
    • NoSQL特性
  • 02.分布式数据库CAP原理
    • CAP
    • 经典CAP图
    • BASE
    • 分布式+集群简介
  • 03.当下NoSQL应用场景简介
    • 商品信息的存储方案
    • 总结大型互联网应用(大数据、高并发、多样数据类型)的难点和解决方案
    • NoSQL数据模型简介

01.NoSQL概述

NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。

大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。

NoSQL数据库分类

键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果数据库管理员(DBA)只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。

列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.

文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph。

不同分类特点对比

为什么要使用NoSQL数据库

1.单机MySQL的美好年代
在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。
在那个时候,更多的都是静态网页,动态交互类型的网站不多。

DAL dal是数据访问层的英文缩写,即为数据访问层(Data Access Layer)

上述架构下,我们来看看数据存储的瓶颈是什么?

数据量的总大小一个机器放不下时
数据的索引(B+ Tree)一个机器的内存放不下时
访问量(读写混合)一个实例不能承受

如果满足了上述1or3个,这需要进化…
2.Memcached(缓存)+MySQL+垂直拆分

后来,随着访问量的上升,几乎大部分使用MySQL架构的网站在数据库上都开始出现了性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大的时候,多台web机器通过文件缓存不能共享,大量的小文件缓存也带了了比较高的IO压力。在这个时候,Memcached就自然的成为一个非常时尚的技术产品。

3.Mysql主从读写分离
由于数据库的写入压力增加,Memcached 只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。

4.分表分库+水平拆分+mysql集群
在Memcached的高速缓存,MySQL的主从复制, 读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。

同时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题。也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但性能也不能很好满足互联网的要求,只是在高可靠性上提供了非常大的保证。

5.MySQL的扩展性瓶颈
MySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。比如1000万4KB大小的文本就接近40GB的大小, 如果能把这些数据从MySQL省去,MySQL将变得非常的小。关系数据库很强大,但是它并不能很好的应付所有的应用场景。MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用MySOL的开发人员面临的问题。

6.今天是什么样子?

7.为什么用NoSQL
今天我们可以通过第三方平台( 如: Google,Facebook等) 可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了,NoSQL数据库的发展也却能很好的处理这些大的数据。

NoSQL特性

易扩展
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

大数据量高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。

这得益于它的无关系性,数据库的结构简单。

一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。

而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。

多样灵活的数据模型
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。

而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。

传统RDBMS VS NOSQL

RDBMS

高度组织化结构化数据
结构化查询语言(SQL)
数据和关系都存储在单独的表中
数据操纵语言,数据定义语言
严格的一致性
基础事务

NoSQL

代表着不仅仅是SQL
没有声明性查询语言
没有预定义的模式
键-值对存储,列存储,文档存储,图形数据库
最终一致性,而非ACID属性
非结构化和不可预知的数据:
CAP定理
高性能,高可用性和可伸缩性

有哪些NoSQL

Redis
Memcached
MongDB

怎么使用

KV
Cache
Persistence

大数据时代的3V:

海量Volume
多样Variety
实时Velocity

互联网需求的3高:

高并发
高可括
高性能

02.分布式数据库CAP原理

传统的ACID分别是什么

A (Atomicity) 原子性
C (Consistency) 一致性
I (Isolation) 独立性
D (Durability) 持久性

关系型数据库遵循ACID规则,事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

1、A (Atomicity) 原子性 :原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

2、C (Consistency) 一致性 :一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

3、I (Isolation) 独立性: 所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的.

4、D (Durability) 持久性: 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

CAP

C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错性)

CAP理论就是说在分布式存储系统中,最多只能实现上面的两点

而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点

CA 传统Oracle数据库
AP 大多数网站架构的选择
CP Redis、Mongodb

注意:分布式架构的时候必须做出取舍。

一致性和可用性之间取一个平衡。大多数web应用,其实并不需要强一致性。因此牺牲C换取P,这是目前分布式数据库产品的方向。

一致性与可用性的决择

对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地。

数据库事务一致性需求

很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低, 有些场合对写一致性要求并不高。允许实现最终一致性。

数据库的写实时性和读实时性需求

对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说在微博发一条消息之后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。

对复杂的SQL查询,特别是多表关联查询的需求

任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角 度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。

经典CAP图

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足AP 原则

BASE

BASE就是为了解决关系数据库强一致性引起的可用性降低而提出的解决方案。

BASE其实是下面三个术语的缩写:

基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)

它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观

为什么这么说呢,缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,要想获得这些指标,我们必须采用另外一种方式来完成,这里BASE就是解决这个问题的办法

分布式+集群简介

分布式系统(distributed system)

由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式系统可以应用在在不同的平台上如:PC、工作站、局域网和广域网上等。

简单来讲:

分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作。集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。

03.当下NoSQL应用场景简介

SQL和NoSQL双剑合璧

第5代

第5代架构使命

和我们相关的,多数据源类型的存储问题

商品信息的存储方案

商品基本信息
名称、价格,出厂日期,生产厂商等
关系型数据库,mysql/oracle目前淘宝在去O化(也即拿掉Oracle),注意,淘宝内部用的Mysql是里面的大牛自己改造过的
为什么去IOE(在IT建设过程中,去除IBM小型机、Oracle数据库及EMC存储设备) 简而意之,可不用穿脚链跳舞。

商品描述、详情、评价信息(多文字类)
多文字信息描述类,IO读写性能变差
文档数据库MongDB

商品的图片
商品图片展现类
分布式的文件系统中
淘宝自家TFS
Google的GFS
Hadoop的HDFS

商品的关键字
淘宝自家
ISearch
商品的波段性的热点高频信息(如,情人节的巧克力)
内存数据库
Tair、Redis、Memcache
商品的交易、价格计算、积分累计
外部系统,外部第3方支付接口
支付宝

总结大型互联网应用(大数据、高并发、多样数据类型)的难点和解决方案

难点

数据类型多样性
数据源多样性和变化重构
数据源改造而数据服务平台不需要大面积重构

解决方法
EAI
UDSL 统一数据平台服务层

是什么

什么样

映射

API

热点缓存

NoSQL数据模型简介

以一个电商客户、订单、订购、地址模型来对比关系型数据库和非关系型数据库

传统关系型数据库如何设计
ER图(1:1、1:N、N:1),索引,主外键等

NOSQL如何设计
BSON ()是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象
两者对比,问题和难点
问题和难点

为什么用聚合模型来处理
高并发的操作是不太建议用关联查询的,互联网公司用冗余数据来避免关联查询

分布式事务是支持不了太多的并发的
聚合模型

KV
BSON
列族
顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一 列或者某几列的查询有非常大的IO优势。


图形

If you find a path with no obstacles, it probably doesn’t lead anywhere.

NoSQL数据库教程相关推荐

  1. 进入hbase shell速度很慢_HBase——大数据平台之分布式NoSQL数据库教程

    1.1 HBase下载:CDH(网站不显示,可以直接下载) http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.9.0.tar.gz 1.2 ...

  2. Redis数据库教程——系统详解学习Redis全过程

    Redis数据库教程--系统详解学习Redis全过程 Redis快速入门:Key-Value存储系统简介 Key-Value存储系统:     Key-Value Store是当下比较流行的话题,尤其 ...

  3. NoSQL数据库程序员应该在2019年学习的5大知识

    尽管Java或Web开发人员学习NoSQL数据库不是强制性的,但世界正朝着这个方向发展,Java和Web开发人员都应该熟悉NoSQL数据库. 如果您想知道NoSQL数据库是什么意思,那么这里是快速概述 ...

  4. 什么是 NoSQL 数据库、NoSQL 与 SQL 的区别

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. NoSQL 数据库是针对可扩展性能和无架构数据模型进行了优化的非关系数据库. NoSQL 数据库也因 ...

  5. NoSql数据库简介及Redis学习

    NO-Sql数据库:Not Only不仅仅是SQL 定义:非关系型数据库:NoSQL用于超大规模数据的存储.(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据).这些类型的数据存储不需要固 ...

  6. Couchbase评论:智能NoSQL数据库

    每个大中型企业都需要一个数据库. 大型跨国企业通常需要全球分布的数据库,并且当将其数据库用于财务或库存应用程序时,它们需要高度的一致性. 很少有数据库可以满足这两种需求. 信息世界 Couchbase ...

  7. couchbase_Couchbase评论:智能NoSQL数据库

    couchbase 每个大中型企业都需要一个数据库. 大型跨国企业通常需要全球分布的数据库,并且当将其数据库用于财务或库存应用程序时,它们需要高度的一致性. 很少有数据库可以满足这两种需求. 信息世界 ...

  8. 读书笔记:NOSQL 菜鸟教程

    读书笔记:NOSQL 菜鸟教程 定义 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". NoSQL用于超大规模数据的存储.(例如谷歌或Facebo ...

  9. 排名前十的sql和nosql数据库

    本排名根据DB Engines的排行榜得来,该排行榜从人气上分析了市场上200个不同的数据库,这里一览Top 10. 无可争议的Top 3 Oracle.MySQL及Microsoft SQL Ser ...

  10. 数据库入门:如何选择SQL和NoSQL数据库

    数据是数据科学所有子领域的基础.无论您要建造的产品用途如何,都需要获取和分析数据.通常,您需要的这些数据存储在DBMS(数据库管理系统)中. 本文来自<数据黑客>,登录官网可精彩资讯和文章 ...

最新文章

  1. 图像的上采样和下采样
  2. zookeeper同一台服务器创建伪集群
  3. Linux echo输出文本改变颜色
  4. win10开始不显示python_Win 10 使用 Python遇到奇怪的问题
  5. java面向对象之父类的引用指向子类的对象
  6. 用java有理数类包含加减乘除_用java具体代码实现分数(即有理数)四则运算
  7. 一款基于jQuery可放大预览的图片滑块插件
  8. 小菜找实习——阿里3月27日场笔试第一题
  9. Android Studio 依赖Moudle
  10. 企业快速寄件打单教程
  11. 【渝粤教育】电大中专学前儿童社会教育_1作业 题库
  12. 用8266学习单片机-13-HC-SR04超声波模块测距示例-Ultrasonic-US-015
  13. 多行文字显示不完用省略号表示
  14. 圣诞节送朋友哪款蓝牙耳机好?高颜值蓝牙耳机推荐
  15. 视频分辨率转码(ffmpeg)
  16. linux如何解压.z文件,linux文件解压缩命令(史上最全教程)
  17. 一款规范大方的主界面源码,会用的狐友都说好
  18. PostgreSQL安全指南 - Postgres2015全国用户大会--重磅嘉宾佳作分享(周正中)
  19. 如何拆分定界字符串以便访问单个项目?
  20. 这个应该狠狠打击了,淘宝拟禁止好评返现引导买家刷好评

热门文章

  1. gimp中文版教程_GIMP中文教程.pdf
  2. LaTeX的常用命令
  3. 系统建模与计算机仿真内容,系统建模与计算机仿真
  4. DODAF2.0之能力视角如何落地
  5. IEC103通讯规约学习心得
  6. matlab遗传算法工具箱介绍和详细使用方法【matlab优化算法工具箱】
  7. day09 CDN绕过漏洞回链接口探针全网扫描反向邮件
  8. Python 实例教程
  9. Scala 深入浅出实战经典 第9讲:Scala的内部类实战详解
  10. 刹车盘的噪音测试软件,某车型盘式制动器尖叫噪声分析及改进