00:01
各位同学大家好,咱们下面就开始正式学习RA6,首先第一个内容呢,给大家先介绍一下,关于什么是no so数据库,在这个知识点中呢,咱们主要讲解这个内容,首先第一个给大家讲一下我们的技术的一个发展,通过这个发展引出我们的no so数据库,那下面给各位来详细介绍一下。各位同学可以想象啊,咱们目前的应该是学过很多的技术,比如说最基本的Java SE,就是Java的基本语法,包括JP,包括JBC等等,咱们应该还需框架,比如说spring spring v买VT等等,包括咱们今天要讲这个no circle,这些应该都是我们之前学过的技术,而这些技术呢,在我们诗句中,其实他们都是用来解决不同的问题的,而技术的分类呢,咱们一般可以分成这么三大类,我这里边给大家应该都列出来了,然后咱们看一下。
01:06
首先里边的第一个分类这里写到。就是解决功能性问题的,然后里边的第二个分类,这里写到叫做解决扩展性问题,包括第三个是解决性的问题的,那这三个到底是什么意思,下面给各位来做个说明,大家看第一个啊,就要解决功能性问题,因为各位同学知道我们做一个项目或者实现功能,它无外乎是不是就是增删感良操作,你的项目再复杂,最基础功能是不是就实现这么几个功能,而这些功能如果咱要实现,那我们用这些技术是不是可以做到,比如说用Java基本的语法,用GST Tom KT HTML g bc,用这些咱们是不是就能实现我们的基本功能,比如说咱们随着我们技术学的越来越多,咱做的功能肯定也是越来越多,而这些基本技术咱能实现就是最基本的增删改压操作,这个就叫做解决功能性问题,就是你为了实现某些功能。
02:11
而学的技术,而这些功能,等咱们做到一定程度之后,大家可以想一下啊,这里边会产生什么问题呢?各位同学可以跟我一起来想一下。大家想一下啊,我们做个项目,项目的功能不可能是永远不变的吧,项目功能是不是要随着你的需求的变化,要不断的增加,不断的修改,或者说不断的升级,那这个时候呢,咱就需要修改我们程序的相换功能,那这个时候要强调什么?就叫做程序的可扩展性,也就说我现在要加入功能,要改功能,或者说要删除功能,而这些的话,如果说咱用普通的技术实现,虽然说能做到,但是是不是很麻烦呀?比如说你加一个新的功能,你要改你源码,比这里边你要修改一个内容,你要改你很多地方,而这个时候我们就有了第二门技术叫什么?就是咱们说的一个框架,比如说spring VC my be,而用框架就能解决我们这个扩展性问题,框架为什么能解决呢?大家应该知道,我们写框架的时候呢,写代码并不是随便写的。
03:22
是不是有一定的规范呀,咱就需要按照框架的规范去编写代码,其实无形中就可以实现出一种可扩展性的操作,所以这是我们的第二种技术分类,然后除了这个之外,下面有第三种,大家可以想象啊。当咱把项目的功能做完了,里边也扩展了很多的功能,那这个时候呢,咱们一个项目或者一个软件,或者说一个系统,不可能只有你一个人用吧,是不是会有很多的用户,随着你的用户量的不断增加,那这个时候是不是会就产生性能问题,假现在我这项目一个人进行访问,跟我100个人,1000个人,1万个人,甚至几十万,几千万人访问,它的效果是不是肯定会不一样的,所以这个时候呢,我们就出现了什么,就是解决性能问题的这些技术,比如说咱们今天讲这个no circle,就是用来解决性问题的,其实no circle呢,它是一个比较,就是通俗的说法,它里边有很多no circle的具体技术,比如red就是一种no circle的数据库,另外比如说咱们写这个多线程开发,因为实际中不可能只有一个人,咱要强调这种并发操作,包括咱要用在这种大数据技术,比如说哈多。
04:39
这个体系,以及里边的NGMQ,包括ES搜索等等这个技术,所以这些技术呢,是为了解决性能问题而产生的。而咱们今天学这个no circle就是为了解决性能问题的这么一个技术,而red就是一种典型的no circle数据库,所以这是关于我们对这个技术发展的一个介绍,大家对它有个认识,通过我的介绍,各位先知道no circle是为了解决性能问题而产生一种技术,而我们要学到red就是一种典型的no circle数据库,所这是第一个内容,然后这个说完之后,我们继续往下来看,下面呢,咱就来看一下这里边我们这个web的一个发展过程,包括引出咱们这个no circle,它的优势,包括它的好处,那咱们看一下啊,首先我们看里边的第一张图。
05:35
就是在web1.0时代,也就是比较早期的时代,那个时候呢,网络肯定没有现在发达,而当时我们做一个项目,或者我们做一个网站,肯定是这么一个架构。那这个架构大家看一下啊。在这个架作中,这个效果很明显,首先我们这里边我们有一个就是网页进行访问,或者咱用电脑进行访问,然后访问的话呢,我们在操作中有一台web服务器,包括通过外部服务器去访问我们的数据库,从而实现我们最终的效果,这是比较早期的这种架构,就是一种单体应用,就是一台服务器,一台数据库,然后咱们进行访问。
06:18
当然各位同学可以想一下啊,你说这种架构方式它有什么缺点了。大家可以想一下有什么缺点,各位应该能想到啊,比如说我们现在在早期的时候呢,应该只有这种电脑镜访问,而随着发展,咱们到后来的话,是不是发展到这个手机端访问,也就是到了外网2.0时代,那这个时候呢,用户访问量肯定会急于增加,而当你增加的话,如果说咱们还是用这种架构,一个单体的外部服务器,那它肯定不能撑受住你大量这种访问,比如说你的服务器,就算它的性能再强大,你的访问量比如说有几十万、几百万,甚至上千万,它也是很难承受住的,所以这个时候呢,在B2.0的时候,咱们这种单体架构就出现了问题,什么问题呢?第一个你这台服务器啊,CPU和内存肯定会有巨大压力,另外咱们在访问数据库的时候,因为咱们普通数据库会经过IO操作,而IO操作的话,假如说你的访问量增加,或者说你的数据量增加那里。
07:25
前的IO压力也会继续增加,所以这种时候呢,2.0的时候就产生这个问题。那这个问题怎么解决呢?咱用no so可以做到,然后大家看啊,下面我有两部分,第一部分是解决CPU和内存压力,然后第二部分是解决IO压力,咱先看第一部分解决这个CPU和内存压力,那这个部分怎么做呢?给各位同学,我在里边咱们来画一下这个过程啊,比如我们现在还是一个客户端访问,这客户端可能是一台电脑,也可能是一个手机端,然后咱在访问的时候,那怎么做,我们就需要把服务器做一个集群或者分布式部署,说的通俗点就是咱们不是只有一台服务器,我们可能会有多台服务器,这多台可能是两台,可能是三台。
08:18
然后在服务器前面咱就要加上这么一个东西,我们叫做负载均衡,或者说反向代理。一个服务器我们一般用一个东西叫index,什么叫负载均衡呢?比如现在我请求,那他会把我请求给我平均分担到不同服务器中,理论上比如现在我有四个请求,那每台服务器中就分担两个请求,所以这是一个叫负载均衡,就咱用这种集群或者说分布式架构来解决。但是这个解决过程中,大家注意,咱们最终是不是肯定还要去访问我们的数据库,而访问数据库的时候,那咱肯定还是用到一些相关的处理,那怎么处理,给各位来说一下啊,就是现在比如说我们访问数据库,就假如说我这是那个数据库。
09:09
我们叫DB,然后反数据库呢,它肯定还要经过这个IO的操作,所以咱们一会说明怎么解决IO压力,咱先说目前的这个过程,而这个过程大家看一下啊,大家可以考虑一下,比如说我们目前用分布式,或者说用这种集群方式做架构,那这种方式中它也会产生什么问题呢?大家可以想一下,就什么问题给各位来说明一下哈,其实问题呢,主要就是一个问题,这是最典型问题,就是这个session该如何进行存储,就是塞一个问题。那session各位应该知道是咱们Java外中的基础,比如咱们现在登录,我登录之后我们的用户信息是不是要放到session中啊,假如咱们看这场景啊,比如现在我这第一次操作,第一次操作呢,我访问了服务器一,然后在服务器一中呢,我们进行了登录,而登录之后在服务器一中是不是会产生咱们这个session对象里边会存储咱们的用户信息,也会产生,假如我第二次我再访问,那第二次访问呢,因为咱们用的负载均衡,那他进行请求是不是可能会到我的第二台服务器中。
10:25
但是大家想一下,因为我的30对象是在第一台服务器中,所以我的第二台服务器中是不是就没有我那个30对象了,这30对象在这里边是不是就不存在了,所以你不存在的话,那我们在进行操作,那这里边表示咱目前是不是就不是一个动物状态,所以目前是有这个问题,就是session到底该怎么进行存储。不是,各位是否能听懂,我再说一遍啊,比如说我们现在做这种集群或者分布式操作,当咱们第一次登录,比如说我在第一台服务器中,我登录了,然后把登录信息放到了赛事对象中,然后我第二次访问,这个时候呢,它可能就到了我的第二台服务器,当然也可能到第一台服务器,如果说就到了第二台服务器,那这个时候呢,我的session对象是在第一台服务器,第二台服务器中是没有,那这个时候呢,就不能证明我目前是否登录状态,然后你后面操作就不能进行了。所以目前我们做分布式或集群中会有这个问题,就是塞的共享问题。
11:31
那这问题怎么解决呢?给各位来说一下啊,里边有多种解决方案,首先我们说一下里边的第一种方案。就是你可以把这个信息呢,给它存储到咱们的客户端,或者说是放到我们的cookie中,这是第一种方式,这种方式的好处是什么呢?每次请求都会带着cookie,然后里边都会有咱的用户信息,能保证你这个session共享。但是cookie存储有一个致命缺点,因为它是存到咱的客户端有,所以它的安全性很难做保证,所以这是第一种方式,但是它有缺点。
12:10
然后这里边呢,还有第二种方式,第二种方式是什么呢?那就是session的一个复制,什么叫session复制?比如说我在第一台服务器中登录了,产生了30对象,然后把30对象再同置复制出多本到其他台服务器中,比如说我到第二台,第三台或者第四台,这样的话能保证session是同步的,但是这种方式优缺点,因为你注意啊,咱们叫session是复制了,复制的意思表示session对象中内容是不是一样的,它就造成我们这个空间极大的浪费,每个里边都存储相同对象,到时候你数据的用于,如果说你这个服务器很多,那里边浪费肯定会更大,所以这是第二种方式,但是也有它的缺点,所以除了这个之外,咱们就有第三种方案,第三种方案怎么做呢?给大家写一下,我们这里边呢,就可以用这么一个no circle数据库。
13:09
我写一下这个叫no so数据库,然后咱就可以把这个用户信息给它存储到这个no soq数据库中,比如我第一次登录之后存到里面去,然后第二次访问,那我就看一下no soq中有没有咱的信息,如果有的话就是登录,没有的话就不是登录,用no circle进行这么一个用户信息存储,而no so好处是什么呢?它不需要经过IO操作,它的数据可以完全存到内存中,存到内存中的好处是什么?那肯定就是读的速度更快。所以这是我们做这种就是解决CPU和内存压力的方案,咱们可以通过这个no搜数据库存储你的用户信息,因为它是直接放到了内存中,不需要经过IO,所以无形中缓解了你的CPU和内存压力,所以这是我们也没过程,所以这也就是no circle中的第一个好处。
14:08
然后这个说完之后,我们再看第二个啊,用no circle呢,也能解决IO的压力,那这个压力怎么解决,给大家我来强调一下啊,咱们看一下里边的这张图。给各位同学我来画出来,然后这张图中描述出来是在刚才咱们做那个基础之上做了一个处理,然后大家看里边的就是这个地方。你注意啊,这个地方是什么呢?它就是我们的数据库,比如说我现在我们的项目,随着我日积月累,里边的数据量是不是会急剧增加呀,而急剧增加之后,你的数据量会很多,你再进行操作肯定会特别不方便,效率会降低,那这个时候呢,用原始方案大家可以怎么做?把数据库和表是不可以做拆分呀,比如做水平垂直读写分离等等,这些能解决,但是这种方式有个缺点,因为它要破坏你一定的业务逻辑,比如你做一个分表,做一个分库,应用的逻辑要破坏,所以这种方式并不是最好的方式,那咱怎么做,咱就可以用这种方式加一个什么叫缓存数据库,就是把咱们的no so作为缓存处理,而每次操作,比如说我这里边一些频繁进行查询的数据,可以放到缓存数据库中。
15:28
放完之后,每次从里边查询,查询之后能极大提高你的查询的速度,所以这是一种解决方案,用缓存数据库进行存储,另外里边我们可以把一些特有的东西,比如一些数据进行列式存储,进行文档的存储等等。这两个就会给大家有个自我介绍,就是把你的专门的数据用特定的方式进行存储,这些目的都是为了提高我们数据库访问的一个效率,所以这就是no circle的这么一个作用,我最终在主力点啊,第一个no circle呢,能减少我们的CPU,包括IO的压力,它直接通过内存进行读取,然后第二个这个就是no circle,能够直接作为缓存使用,提高咱们的反问速度,减小IO的读操作。
16:20
所以这些就是关于no一些基本说明,通过我的介绍,大家先知道no一些基本的特点,然后一会儿给大家会详细介绍到no数据库到底有什么特点,以我们的red到底该怎么进行使用。
我来说两句