NoSql入门


NoSql入门概述

1.入门概述

1.为什么使用NoSql

  1. 使用传统关系型数据库存储,存在较大的瓶颈

    庞大的数据量导致一个机器无法放置

    数据的索引(B + Tree)一个机器内存放不下

    访问量一个实例不能承受

  2. Memcached(缓存) + MySql

    随着访问量的上升,使用MySql已经无法满足性能要求,程序开始使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大时,多台web机器的缓存文件无法共享,大量的小文件缓存也带来了比较高的IO压力。这时,Memcached自然成为一个流行的技术产品
    Memcached 作为一个独立的分布式的缓存服务器,为多个web服务器通过了一个共享的高性能缓存服务,在Mwmcached服务器上,又发展了根据hash算法来进行多台Memcached服务器的扩展,然后又出现了一致性 hash来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端

  3. MySql主从复制/读写分离

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

  4. 分库分表

    在主从分离的基础上,数据库的写压力出现瓶颈,而数据量的猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发应用开始使用InnoDB引擎代替MyISAM。
    同时开始流行使用分库分表来缓解写压力和数据增长的扩展问题,此时,MySql推出表分区。

  5. MySql扩展性的瓶颈

    MySql常存储一些大文字字段,导致数据库表非常大,在做数据库恢复的时候导致非常慢,不容易快速恢复数据库,扩展性差。

  6. NoSql

    NoSQL数据库的出现,弥补了关系数据(比如MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。

2.NoSql

NoSql Not Only SQL 不仅仅是SQL

泛指非关系型数据库,其本身就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。如谷歌等网站每天收集的用户信息数据,这些类型的数据存储不需要固定的模式,无需多余的操作就可以横向扩展

3.特性

  1. 易扩展

    NoSql数据库种类繁多,但都具有一个共同特点:数据之间无关系,这样提高了数据的扩展性。

  2. 大数据量高性能

    NoSql数据库都具有非常高的读写性能,尤其是大数据量下,这得益于其数据无关性,数据库的结构简单。

    一般MySql使用Query Cache,每次表的更新Cache就失效,是一个大粒度的Cache,在web2.0中,其性能不高,而NoSql的Cache是记录级的,是一种细粒度的Cache,所以NoSql的性能要高的多

  3. 多样灵活的数据模式

    NoSql无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而关系型数据库中,增删字段都是一件非常麻烦的。

  4. 传统RDBMS VS NoSql

    RDBMS

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

    NoSql

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

2.3V + 3高

1.大数据时代的3V

  • 海量 Volume
  • 多样 Variety
  • 实时 Velocity

2.互联网需求的3高

  • 高并发
  • 高可用
  • 高性能

3.NoSql数据模型简介

1.以一个电商客户、订单、订购、地址模型对比

  • NoSql使用BSON模型
    • BSON 是一种类 json 的二进制存储格式,简称Binary JSON,其内嵌文档对象和数组对对象
    • 使用此类型处理数据
    • 高并发操作不太建议又关联查询
    • 互联网公司使用冗余数据来避免关联查询
    • 分布式事务无法支持太多的并发
{
 "customer":{
   "id":1136,
   "name":"Z3",
   "billingAddress":[{"city":"beijing"}],
   "orders":[
    {
      "id":17,
      "customerId":1136,
      "orderItems":[{"productId":27,"price":77.5,"productName":"thinking in java"}],
      "shippingAddress":[{"city":"beijing"}]
      "orderPayment":[{"ccinfo":"111-222-333","txnid":"asdfadcd334","billingAddress":{"city":"beijing"}}],
      }
    ]
  }
}
  • 而传统关系型数据库多为1:1、1:N、N:N,关联查询太多

2.聚合模型

  • K - V
  • BSON
  • 列族
    • 按列存储数据,方便存储结构化和半结构化数据,方便数据压缩,针对某一列或几列的查询又非常大的IO优势
  • 图形

4.NoSql数据库的四大分类

1.KV键值

  • 新浪:BerkeleyDB + Redis
  • 美团:Redis + Tair
  • 阿里:Memcache + Redis

2.文档型数据库(BSON格式较多)

  • MongoDB
  • CouchDB

3.列存储数据库

  • Cassandre
  • HBase

4.图关系数据库

  • 并不出存放图形的,而是关系图,专注于构建关系图谱。如:朋友圈社交网络关系、广告推荐系统。

5.在分布式数据库中 CAP原理 CAP+BASE

1.传统的ACID

  1. A Atomicity 原子性 - 全 与 关系,必须全部成功才成功,否则全部回滚
  2. C Consistency 一致性 - 数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束
  3. I Isolation 独立性 - 即事务与事务之间不会互相影响
  4. D Durability 持久性 - 事务一旦提交后,数据的操作将永久保存,即使出现宕机也不会丢失

2.CAP

  1. C Consistency 强一致性
  2. A Availability 可用性
  3. P Partition tolerance 分区容错性

3.CAP的3进2

CAP理论即在分布式存储系统中,最多只能实现CAP其中两点。而由于当前网络的硬件肯定会出现丢包延迟问题,所以分区容错性是必须实现的,所以只能在 一致性 和 可用性 之间选择,NoSql系统无法同时满足三点

  • CA 传统 Oracle 数据库 - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大
  • AP 大多数网站架构的选择 - 满足一致性,分区容忍性的系统,通常性能不是特别高
  • CP Redis、MongoDB - 满足可用性,分区容忍性的系统,同城可能对一致性要求低一些

4.BASE

BASE就是为了解决关系型数据库强一致性引起的问题而引起的可用性降低而提出的解决方案
BASE:基本可用 - Basically Available 软状态 - Soft State 最终一致 - Eventually Consistent
其思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观

5.分布式 + 集群简介

分布式:由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。
简单说,分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作。

集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问


学习知识源:尚**Redis入门

第一部分  NoSQL入门 第1章  NoSQL的概念及适用范围 2 1.1  定义和介绍 3 1.1.1  背景与历史 3 1.1.2  大数据 5 1.1.3  可扩展性 7 1.1.4  MapReduce 8 1.2  面向列的有序存储 9 1.3  键/值存储 11 1.4  文档数据库 14 1.5  图形数据库 15 1.6  小结 16 第2章  NoSQL上手初体验 17 2.1  第一印象——两个简单的例子 17 2.1.1  简单的位置偏好数据集 17 2.1.2  存储汽车品牌和型号数据 22 2.2  使用多种语言 30 2.2.1  MongoDB驱动 30 2.2.2  初识Thrift 33 2.3  小结 34 第3章  NoSQL接口与交互 36 3.1  没了SQL还剩什么 36 3.1.1  存储和访问数据 37 3.1.2  MongoDB数据存储与访问 37 3.1.3  MongoDB数据查询 41 3.1.4  Redis数据存储与访问 43 3.1.5  Redis数据查询 47 3.1.6  HBase数据存储与访问 50 3.1.7  HBase数据查询 52 3.1.8  Apache Cassandra数据存储与访问 54 3.1.9  Apache Cassandra数据查询 55 3.2  NoSQL数据存储的语言绑定 56 3.2.1  Thrift 56 3.2.2  Java 56 3.2.3  Python 58 3.2.4  Ruby 59 3.2.5  PHP 59 3.3  小结 60 第二部分  NoSQL基础 第4章  理解存储架构 62 4.1  使用面向列的数据库 63 4.1.1  使用关系型数据库中的表格和列 63 4.1.2  列数据库对比RDBMS 65 4.1.3  列数据库当做键/值对的嵌套映射表 67 4.1.4  Webtable布局 70 4.2  HBase分布式存储架构 71 4.3  文档存储内部机制 73 4.3.1  用内存映射文件存储数据 74 4.3.2  MongoDB集合和索引使用指南 75 4.3.3  MongoDB的可靠性和耐久性 75 4.3.4  水平扩展 76 4.4  键/值存储Memcached和Redis 78 4.4.1  Memcached的内部结构 78 4.4.2  Redis的内部结构 79 4.5  最终一致性非关系型数据库 80 4.5.1  一致性哈希 81 4.5.2  对象版本 82 4.5.3  闲话协议和提示移交 83 4.6  小结 83 第5章  执行CRUD操作 84 5.1  创建记录 84 5.1.1  在以文档为中心的数据库中创建记录 85 5.1.2  面向列数据库的创建操作 91 5.1.3  键/值映射表的创建操作 93 5.2  访问数据 96 5.2.1  用MongoDB访问文档 96 5.2.2  用HBase访问数据 97 5.2.3  查询Redis 98 5.3  更新和删除数据 98 5.3.1  使用MongoDB、HBase和Redis更新及修改数据 98 5.3.2  有限原子性和事务完整性 99 5.4  小结 100 第6章  查询NoSQL存储 101 6.1  SQL与MongoDB查询功能的相似点 101 6.1.1  加载MovieLens数据 103 6.1.2  MongoDB中的MapReduce 108 6.2  访问HBase等面向列数据库中的数据 111 6.3  查询Redis数据存储 113 6.4  小结 116 第7章  修改数据存储及管理演进 117 7.1  修改文档数据库 117 7.1.1  弱schema的灵活性 120 7.1.2  MongoDB的数据导入与导出 121 7.2  面向列数据库中数据schema的演进 124 7.3  HBase数据导入与导出 125 7.4  键/值存储中的数据演变 126 7.5  小结 126 第8章  数据索引与排序 127 8.1  数据库索引的基本概念 127 8.2  MongoDB的索引与排序 128 8.3  MongoDB里创建和使用索引 131 8.3.1  组合与嵌套键 136 8.3.2  创建唯一索引和稀疏索引 138 8.3.3  基于关键字的搜索和多重键 139 8.4  CouchDB的索引与排序 140 8.5  Apache Cassandra的索引与排序 141 8.6  小结 143 第9章  事务和数据完整性的管理 144 9.1  RDBMS和ACID 144 9.2  分布式ACID系统 147 9.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值