NoSql入门概述
1.入门概述
1.为什么使用NoSql
使用传统关系型数据库存储,存在较大的瓶颈
庞大的数据量导致一个机器无法放置
数据的索引(B + Tree)一个机器内存放不下
访问量一个实例不能承受
Memcached(缓存) + MySql
随着访问量的上升,使用MySql已经无法满足性能要求,程序开始使用
缓存
技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大时,多台web机器的缓存文件无法共享,大量的小文件缓存也带来了比较高的IO压力。这时,Memcached自然成为一个流行的技术产品
Memcached 作为一个独立的分布式的缓存服务器,为多个web服务器通过了一个共享的高性能缓存服务,在Mwmcached服务器上,又发展了根据hash
算法来进行多台Memcached服务器的扩展,然后又出现了一致性hash
来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端MySql主从复制/读写分离
由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,后续开始使用
主从复制
技术来达到读写分离
,以提高读写性能和读库的可扩展性。
MySql 的 master-slave模式成为这个时候的技术标配分库分表
在主从分离的基础上,数据库的写压力出现瓶颈,而数据量的猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发应用开始使用
InnoDB
引擎代替MyISAM。
同时开始流行使用分库分表来缓解写压力和数据增长的扩展问题,此时,MySql推出表分区。MySql扩展性的瓶颈
MySql常存储一些大文字字段,导致数据库表非常大,在做数据库恢复的时候导致非常慢,不容易快速恢复数据库,扩展性差。
NoSql
NoSQL数据库的出现,弥补了关系数据(比如MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。
2.NoSql
NoSql Not Only SQL 不仅仅是SQL
泛指非关系型数据库,其本身就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。如谷歌等网站每天收集的用户信息数据,这些类型的数据存储不需要固定的模式,无需多余的操作就可以横向扩展
3.特性
易扩展
NoSql数据库种类繁多,但都具有一个共同特点:
数据之间无关系
,这样提高了数据的扩展性。大数据量高性能
NoSql数据库都具有非常高的读写性能,尤其是大数据量下,这得益于其数据无关性,数据库的结构简单。
一般MySql使用Query Cache,每次表的更新Cache就失效,是一个大粒度的Cache,在web2.0中,其性能不高,而NoSql的Cache是记录级的,是一种细粒度的Cache,所以NoSql的性能要高的多
多样灵活的数据模式
NoSql无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而关系型数据库中,增删字段都是一件非常麻烦的。
传统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
- A Atomicity 原子性 - 全 与 关系,必须全部成功才成功,否则全部回滚
- C Consistency 一致性 - 数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束
- I Isolation 独立性 - 即事务与事务之间不会互相影响
- D Durability 持久性 - 事务一旦提交后,数据的操作将永久保存,即使出现宕机也不会丢失
2.CAP
- C Consistency 强一致性
- A Availability 可用性
- 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入门