NOSQL学习总结

一、MySQL:
1.MySQL时代
早年,一般网站访问量都不会太大,基本上单个简单的数据库就能解决一般的数据反问问题。那时基本更多的网站都是以静态网页的样子存在,数据动态交互的网站不是太多。

以下为这种方式的通用架构(图片来源为尚硅谷Redis教程,下同):
NOSQL学习总结
在上图结构下,在数据存储上会出现那些瓶颈呢?

1.一台机器无法满足网站数据的总大小。

2.一台机器无定法存下数据的索引(B+ Tree)时。

3.访问量(读写混合)一个实例不能承受。

2 Memcached(缓存)+MySQL+垂直拆分
伴随国内互联网市场的成熟,用户也开始增加,相应的访问量也开始上升,在之前采用MySQL架构的网站几乎大部分在数据库处理反面出现了性能问题,web程序不单单专注于功能上,同时也开始去追求程序性能。这时便开始大量采用缓存的技术来缓解数据库方面的压力,优化数据库的结构和索引。最初一般公司比较流行通过文件缓存来缓解数据库压力,但伴随着访问量持续增加,多台web机器通过文件缓存不能共享,其中机器大量缓存文件也带来了比较高的IO压力。这时,Memcached就以救世主的姿态出现成为一时非常流行的技术产品。

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
NOSQL学习总结
3 Mysql主从复制读写分离
由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了
NOSQL学习总结
对于一个数据库,写的操作我们都将其放在主库,读的操作在从库上去对
4分表分库+水平拆分+mysql集群
在Memcached(或Redis)的高速缓存,MySQL的主从复制,读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM引擎使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。

同时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题。也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但性能也不能很好满足互联网的要求,只是在高可靠性上提供了非常大的保证。
NOSQL学习总结
5 MySQL的扩展性瓶颈
MySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。比如1000万4KB大小的文本就接近40GB的大小,如果能把这些数据从MySQL省去,MySQL将变得非常的小。关系数据库很强大,但是它并不能很好的应付所有的应用场景。MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用MySQL的开发人员面临的问题。
企业级常用设计
NOSQL学习总结
二NoSQL:
1.为什么用NoSQL
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了,NoSQL数据库的发展也却能很好的处理这些大的数据。

传统的关系型数据库(就像一个Excel表格一样一行一列)在现如今不足以支撑复杂的关系网络了,如果用网状的的环形社交使用NoSql这类方式就很好解决。

2.什么是NoSQL
NoSQL(NoSQL= Not Only SQL ),意即“不仅仅是SQL”,

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

(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

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

3.2大数据量高性能
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用QueryCache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。

3.3多样灵活的数据模型
NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。

4.常用的NoSql工具
Redis;memcache;Mongodb 等

5.3V+3高
大数据时代的3V:海量Volume;多样Variety;实时Velocity。
互联网需求的3高:高并发;高可扩(横向扩展);高性能。

三NoSQL数据模型简介:
1.nosql如何设计?
几乎所有的NoSql数据库都没有表(table)的概念,取而代之的是文档(document)。文档是个什么东西?Mongodb的解释,文档是一个使用类似JSON格式以key-value方式存储数据的结构。其被称为BSON,BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。

2NoSQL数据库的四大分类(四个维度)
聚合模型:2.1KV键值 2.2bson 2.3列族 2.4图形

四、在分布式数据库中CAP原理CAP+BASE:
1.传统的ACID数据库:
关系型数据库遵循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)持久性

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

2.CAP:
1、C:Consistency(强一致性)

2、A:Availability(可用性)

3、P:Partition tolerance(分区容错性)

3.CAP的3进2(NOSQL不能全部满足3个,只能二选一)
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。

CA:传统Oracle数据库

AP:大多数网站架构的选择

CP: Redis、Mongodb