00:00
前面我们测试了给ES中保存一个数据下来我们进行查询,查询呢我们发送get请求,我们要查哪个索引,哪个类型下哪条数据,所以它的语法格式呢,是这样子的,来复制过来还是来到postman里边,我们先来给我们这个虚拟机来发送请求,9200端口,好,那既然是呢查询,我们就要发get请求们查询customer这个索引这个类型下的一号数据,那就是这个数据库这张表下的这个一号数据,那我以后呢就不叫数据库不叫表了,我们来就用专业的说法好点一个。我发送请求以后呢,发现查出了这个数据,那数据的整个响应呢,是这个样子的,首先index,它代表我们这条数据在哪个索引下,确实是在customer,还有哪个类型external,包括这个数据的ID,包括这个数据据的版本version是二,那二呢,就说明我们这个数据啊被更新过,因为新建出来呢,版本11,包括呢,这有一个s seq number,还有这个primary term。
01:11
这两个呢,是来做我们乐观所操作的,只要我们数据有改动,这个ciqu number相当于我们这个序列号就会往上加,包括我们这个封片如果发生了变化,比如我们机器重启了,主封面重新选取了等等,这样我们在集群的时候再说,那这个一也会往上累加,那么后来呢,再来测试一下,用这两个来做乐观锁,还有这个放的处,那就是代表我们找到了这个数据,那这个数据真正的内容是什么?那就在杠source里边,这就是我们查出的这个记录的这些信息,那么最终呢,查出的这些数据,比如我们想要用,那还得提取出这个杰森里边,杠S里边的内容,这才是我们当时保存进来的内容。那接下来呢,我们正好来测试一下这两个字段,一个叫杠CIS number,还有一个叫primary term,那这两个字段呢,我们说它是用来做并发控制的,这个字段也就是用来做我们这个乐观锁操作,每次更新它就会加一,因为这个ES在。
02:12
修改数据的时候呢,它是一个无序的,我们来给ES发起请求来改数据,那为了控制我们这些并发修改,比如A呢,看到这条数据的值是一,BCD看到的也都是一,他们呢同时想要修改,A想把一改成二,而B呢,想把一改成三,他认为只要数据是一的情况下,我再来改三,但有可能B让ES的这个修改请求由于是发rest API,他呢先到达ES,而A呢后到达ES,而A的本意是只想把一改二的,如果人家是别的值,它就算了。那这样呢,我们就可以利用上CIS number来做一个乐观锁,比如同样是AB,那么现在并发进来都要改ES的这条一记录。只要有一个人把这个记录改了,这个记录类似于他的这个版本号,就加一次,当然老板呢用的是版本号,新版的ES都用了这个cience number序列号,只要有人改了这条记录,序列号就加一,那如果A还想要改序列,改这条记录,他就可以带上这个判断,比他第一次看到这条记录序列号是一,如果序列号是一的情况下,我再改,如果序列号别人已经改了,它叠加了一个变成二了,那么就不要再改这条记录了,我们来模拟一下这个操作,那现在来看这个一号操作保存,这是我们这个查询,查询一号数据。
03:34
一号数据查询一号数据,现在一号数据呢是CIS number是我们这个一假设呢,两个人都看到了它,但两个人呢都想修改,第一个人发送请求来改一把,他呢想改成这个name名字为一,第二个人呢,想把它name名字改为二,但如果第一个人改的时候呢,他带上了这个判断,好,我们来模拟并发修改,两个人呢一起来改,都是来改这条数据,我们来发送POS请求,PS一定带上ID,然后呢数据呢是这个杰森。
04:08
我们第一个人呢,想把它改一,而第二个人呢,想把它改二。当然他们想改的前提就是,只要这条数据它原来呢是我们这个样子,那么就给他改,那为了控制并发,我们就可以加上这个cience number,那语法呢,就是这样,我们直接给请求后边加一个问号,哎,这个问号if,那就是判断它等于0IF它什么?当然我们的这个if判断是这样子的,如果两人都带上这个判判断CI number,但现在呢,都查出了这条数据CI number呢,都是一,好,他觉得这个CI number也是一,这个人呢,觉得这个CI number也是一。我们都查出了这条数据,这个人觉得这个CIS number也是一,包括primary term,大家现在呢,查出的这条数据都是一,好,大家现在呢条件都是一样的,想要去修改,来看谁能修改成功,我们先让一号来发送请求,我点击send。
05:09
我发现呢,200是OKOK的,它成功了,但只要他一改成功,我们发现这个CIS number它就加上去了,而我们这个二号呢,我们来看一下。他想要利用这个circle number再来改点一个send,我们就会出现409,意思呢,我们想要说这个CIS number和term这个都是一,但是CIS number呢,我们现在已经变成11了,因为这个人已经改了CIS number往上叠加了。所以如果他想要改他的这次修改就会失败,那他想要成功怎么办呢?他就必须重新得再查一遍新的这个数据,现在他拿到的CI number是11了,那他只有把它变成11再来进行修改,那这呢才是一个修改成功,只要修改成功了,就会叠加为12,而我们这个人想要再来修改。
06:02
其实他修改成功了,上一次他拿到CIS number是11,他觉得这就是最新数据吗?其实不是的,他点个send还是409。也就是说他要想修改还必须拿到最新数据CI number呢现在是12,所以呢,我们必须拿到12,这样呢他才能做一个完整的修改,这就类似于我们在做MYSQL里边的这些乐观所操作。这是我们说到查询,顺便呢,我们在这来也加了这个乐观锁修改,乐观锁修改好来保存一下。
我来说两句