00:00
好,同学们啊,现在呢,我们先演示一下,在这个Java里面呢,怎么样去用这个英DB的客户端啊,去插入数据,那么我们去创建一个类。啊,就叫right data啊就叫right吧,R w rie啊因为这个呃,像发TB写数据呢,在Java里面有三种方式,这里面呢,给大家挨个讲解一下。好,首先呢,我们接下来的内容呢,就是跟着这个官方的read me read me走啊,我们可以看一下,首先啊,这里给了一个example代码。呃,然后呢,这里面就是各种写数据的方式了啊,它是写在一个类里面的,我们呢,给它单独单独摘出来。呃,首先呢,这些代码母是要复制的啊,它这里生成了一个。等一下啊,我们去打开idea。来把这些粘贴一下啊,它这里呢,呃,放了三个属性,一个是talking,然后一个是org,我们的组织。
01:01
这里呢,我们需要把它换成我们的艾特硅谷,艾特硅谷呃,然后呢,Bucket存储桶呢,这里我们去VIVO UI上呢新建一个。啊,现在呢,我们去新建一个松鼠桶。好呃,点到这个8CASE里面啊,其实呢,在Java里面,我也我们也可以直接在这个idea里面用Java呢,去创建存储桶啊,不过呢,这里我们还是。先把这个注意力呢放在读写上。好,那么这里呢,就叫example Java吧。Java好啊create,那么这个呢,就是我们现在呃,这个事例里面要讲的啊,存储桶了,那么接下来我们。呃,在这个idea里面,把这个存储桶的名字写上,叫example Java。呃,那么我们之前说呢,就是不管是呃你这个呃编程语言里面的客户端库,还是web UI啊,亦或是这个inx命令行工具,它和我们的in Fla DB交互的方式呢,都是通过httvpi啊,所以呢,我们这三类工具呢,它都是通过talking来进行一个权限的管理的。呃,同样呢,我们用Java去连接1DB的时候呢,也需要去指定一个talking,呃,此处呢,还是打开我们的web UI,然后看到我们的API talkings,我们还是使用tonys talking。
02:30
啊,这个呢,是我们初始化石使用的那个talking。呃,然后把它呢粘过来。啊,这个地方呢,它调用了一个字符串对象的to串位方法,它会把这个字符串呢转成字节数组,啊后面呢,我们会给大家讲它为什么要这么做。好,现在呢,我们创建一个慢方法,呃,这样方便我们稍后呢去测试和运行执行程序啊,现在呢,我们去再创建一个叫做客户端对象,那么in Fla DB呢啊,我们这个刚才引的就依赖它给我们提供了一个叫做in Fla DB client factory的类,那么看名字呢,就知道它是一个工厂类,我们点一下呢,看它里面有什么方法。
03:12
哎,可以看到它这里面的主要就是各种create方法啊,那么方法呢,你可以看到这里需要我们传几个参数。呃,那么其中呢,有一些方法呢,它需要你在连接的时候指定啊,等下我这个地方得截个图。把它留住。好,那么可以看到呢,有些这个,呃,客户端在创建的时候呢,呃,他需要去指定我们的这个用户名和password,那么这种方式就是模拟登录的一种授权方式,呃之前呢,我们在讲httppi的时候呢,提过这个事情。呃,另外呢,就是我们还可以看到有的这个操作呢,呃,需要你在这个初始化连接的时候指定bucket,像这种。呃,但是呢,你这个有的这个方法呢,你就创建链接的时候呢,不需要指定bucket啊,那么什么时候需要指定bucket呢?就是你呃这个进行的操作,比如说写数据读数据,那么这个时候需要去哎。
04:12
指定我们要从哪个存储桶里面拿数据,那么这个时候你创建客户端对象的时候呢,哎,可以传进来一个八参数。那么我们现在呃,去往里写数据,我们就调这一个方法的实现啊,调这个方法的实现啊,那么可以看到这里还有一个string URL,实际上是我们呃,In flux DB它的这个所在的地址,呃,刚才呢,我们没有写这个URL啊,没有在这个静态。呃,成员里面去写这个URL,现在呢,我们给它加上呃,Static string,然后URL呢,就是嗯,叫做HTTPO1。啊,HTTP,然后HOST1冒号8086。啊,然后好,那么这样呢,就是我们的URL啊,突然发现这个一还给落了,把它给补上。
05:02
好,那么我们现在呢,就调用这个create的方法啊,传递我们的参数啊,传递我们参数,首先第一个参数呢,就是URL,然后可以看第二个参数呢,就是talking。哎,可以看到我们这里面为什么要声明一个啊,这个talking的变量类型呢,不用字符串,要用这个字节数组呢。啊是因为这个地方它本身就是要求你用一个啊字节数组,你可以看到这个方法呢,它本身就要求你传一个字节数组。啊,这里呢,我们去把ton传进来,然后看第三个参数呢,是传递我们的org,指定我们的组织。啊,这里把它穿进来。呃,还有呢,就是这里就是需要指定我们的存储桶了,存储桶的名字呢,就叫example Java。好,写进来之后呢,把这个变量弄出来,可以看到我们得到一个in Fla DB client对象,那么这个对象呢,我们再去看一下它的点的方法啊。呃,看一下它里面都有什么东西。呃,那么你可以看到呢,这里面有各种get方法,比如说get bucket buckets API,哎,它呢,这个这到这一步,它其实里面是各种API对象,呃,那么我们可以看一下,我们去get一个right API。
06:10
呃,那么你可以看到这里面有right API,但这里的呢,这里的这个API呢,被废弃了,呃,稍后呢,我们会讲一下这里为什么被废弃。呃,首先呢,我们可以看第一个方法叫get right API blocking啊,那么说到这个blocking呢,就牵扯到我们写in Fla DB的两种方式啊,这里呢给大家说一下。啊,第一种方式呢,我们称之为同步鞋哦,这里呢,给大家画张图。哎,所以同步写呢,比如说我现在,呃,有有几行代码啊,我现在这是一行代码。这是两行代码,哎,这是三行代码。然后我用蓝色呢标一下这是呢,这个这行代码呢,是我要写到这个,呃,执行写入操作的一行代码,那像英拉DB写入操作一行代码,然后后面呢是我的其他代码。好,那么这个程序呢,由上到下执行啊,由上到下执行。
07:03
呃,在远程呢,远端呢,是我的一个in Fla DB服务,In DB服务。好,呃,那么我们的这行代码呢,呃,他要去如果是同步写的话呢,我们的这行代码,呃,他去执行一个写入in Fla DB的的操作。好,那么他呢,写入操作呢,其实就是发送一个HTTP请求。那所谓同步写呢,其实就是我要等,哎,我要等这个啊,我们的服务端,哎给他响应。告诉我们写入成功。呃,我的这行代码呢,再往下执行,再往下执行,也就是说它会等待我们的服务端来进行响应,然后再继续往下跑代码,那么这样的一个好处呢,就是你可以避免丢数据啊,你你可以清楚的知道我这个请求呢是成功还是失败了,但是坏处呢,也很明显,假如说呢,你现在网络问题,或者说是因为这个in Fla DB目前呢,处于一个繁忙状态。
08:04
啊,一直不给你响应,或者说因为网络问题,这个呃,英DV的响应呢。啊,在这里面被延迟了,那么如果你从发出请求到收到响应用了五秒时间,那么你的代码呢,也会阻塞在这一步等待五秒。啊,会阻塞在这一步等待五秒啊,那么这就是我们的同步写入啊,除了同步写入之外呢,还有异步写入这里呢,还是再给大家画张图啊,重新画张图。呃,那么老样子,我们先画几行代码,这是一行代码,这是一行代码,然后呢,我这个蓝色这一行是我们要写数据的代码。哎,然后红色这一行呢,就是我们后面代码,哎,等一下变成黑色了。然后撤销一下啊。还是红色好,下面呢又是我们两行代码,哎,后面呢,我们还有一行是继续写数据代码。好的,呃,那么我的代码呢,还是从上到下这个顺序呢去执行。
09:01
从上到下都去执行。啊,去执行。呃,那么现在呢,这个地方呢,还是咱的in Fla DB的server,还是in DB server,那么我们呢,现在这个代码执行到这一步。进行到这一步,他会去立刻发送请求吗?如果是异步写入的话呢,不会啊,异步写入呢,它是通过什么手段来实现的,它呢,一方面有一个线程池啊,这是个线程池,然后里面呢,一般来说只有一个线程。然后呢,还有东西叫做缓冲区。还有东西叫缓冲区。呃,那么当你执行这个写入操作的时候呢?啊,其实你的数据不会真正的进入,不会真正的直接发给英拉斯DB啊,这是英拉斯DB。呃,他会干什么呢?他会把这个数据放到缓冲区里面。那么缓冲区呢,其实是一个集合啊,其实就是集合。哎,它放到这个缓冲区里面之后呢,这个代码就立刻的向下继续执行了,哎,它不会等待这个向in DB写的过程。
10:04
呃,这个代码就继续向上执行。呃,那么这个血是谁来处处理呢?这个血其实有我们的,呃,这个线程后台的这个线程,呃,那么这个守护线程呢,它依据两个规则,一个就是看哎,我们缓冲区里面的数据量的多少。哎,多少,然后这里呢,有一个上限。如果说呢,数据应该默认应该是1000条啊,如果说这个数据呢,超过1000条了,就立刻向in flax d DB里面写一条数据啊,把这个1000条直接一批次全部写过去,呃,那么如果呢,这个呃,另外呢,就是根据时间。默认应该是疫苗。就是它呢,会每隔一秒钟去看一下啊,这个时间有没有到,如果说啊,每每就相当于一个循环啊,每隔一秒呢,把这个缓冲区里的数据拿出来,向我们的in Fla DB里面写一下,呃,那么在创建这个API对象的时候啊,创建API对象的时候,其实呢,可以指定这两个参数,但是呢,并不是啊,不过我们现在这个right API blocking呢,它对应的是我们同步的写的那个API,那不是我们异步写的API啊,这只只不过是给大家讲一下这个异步写的思路。
11:13
呃,所以说一步写呢,实际上它有一个隐视攒批的过程啊,它会把你的这些数据攒成一批一批的。那你比如说我这条我这条代码,我这行代码啊,写把这个数据呢,直接放到缓冲区,然后这个线程呢,他一看还没满足到in Fla DB里面写入的这个两个条件啊后面呢,又执行到我这行代码。那么我这里面呢。就会再把数据放到缓冲区里来。嗯,那么这样的话,我们和in Fla DB的服务之间呢,只产生一次啊,后面这个线程,他发现这个写入条件满足了,他就把这两条数据一块发送给我们的ETB,那么这个时候呢,只产生一次网络请求,但是我们写入了两条数据,那么这种异步写入呢,它有好处也有坏处,好处呢就是可以让我们。
12:04
呃,让我们这个自己写的这些程序呢,它的执行效率更高啊,因为这样的话不用再等待网络了,这个网络的响应了。那么另外一个呢,坏处就是啊,这个展批的过程是隐示实现的啊,就是我们这个无法通过代码来控制这个过程,只能给他设参数。那么这样的话,如果说中间网络,中间网络出现异常,导致写数据失败,呃,那么你处理这个问题,你的编程呢,就会变得比较复杂。另外就是目前的话,我在因为我在这个Java API里面至少是没有看到啊,一旦这个后台线程它失败了之后,怎么样再去获得这个集合里面的数据。啊,那么我认为呢,这个地方是应该有可能是会丢数据的,那么需要大家呢去注意一下,好这一节呢,我们给大家讲了一下这个客户端对象的创建啊,另外呢,就给大家讲了一下啊,同步写和异步写的区别,那么从下一节开始呢,我们就开始带着大家往里面做这个实操代码,直接写数据。
我来说两句