00:00
啊,那我们来做一个这个测试,做一个测试,然后呢,我们来插入一点数据先,因为现在这张表的数据已经被我们干什么清光了,对吧,啊不的。然后呢,用一个100还是IN1。Name。还是张三,还是张三,OK,就是然后再布的一个。李四对吧,啊,李四OK啊,然后呢,我再来一个1007,等会呢,反正还要测那个。com这种方式对吧,107来一个什么in for1。也来一个张三吧,李四,我五啊,就不一样。然后在周六对吧。嗯,这个暂时暂时测试够了啊先呢,我们看一下它。这是一个版本的数据吧,啊一个版本数据,现在我干的时候数据应该是什么样的。
01:10
李四和赵六,没问题吧?啊,这个是正常的,OK,那我们来添加一下什么列信息,就是best.who best,把这个CF给它连进去,逗号叫best.To Best。把谁扔进去CN,对吧?啊,CN给他扔进去啊,给它进去OK,那这个就搞定了,搞定之后呢,我们来测一下。一对吧,我们用的一,然后这个地方列是不是用的内嘛,对吧?啊,这个是1006,我们拿1006来测试啊,1006来测试,OK,走一下。好,走完了,走完之后呢,我们来扫一下。1006的数据没了,多个版本都没了吧?啊,多个版本都没了,这个是我们看到了,就是你不指定时间桌,他删除的是所有的数据啊,所有版本的数据是这意思,好,我们看一下呃,指定列一种方式,它添加的那个什么。
02:16
标记是什么?还记得标记是什么,我拿一下这个点。看一下。Delete column对吧,Delete column,而且这个时间呢,你看其实差不多,因为我的温度是跟这个什么出单时间也差不多啊,差不多对啊,在这块OK delete的column啊,它是delete column,好,那接下来我们采用什么。另外一种方式就是不加S的在这吧,啊把这个直接删掉是不就行。不加不加,来看一下。
03:01
我应该改成什么,1007,因为106已经被删了,对吧,已经没了,OK 1007,走一下,看一下他是什么情况。什么情况,猜一下我直接扫描了。注意我当年那个这张表示一个版本有印象。对吧,我现在删除的是不加S这种方式。他是不是指的是删除三个版本对吧。管我出来了,这个就是我们所说的一个点。是不是有问题啊,大家感觉到。问题出在哪了?什么他的这个时间应该比这个。首先照六的时间轴比他大吧,那既然那个删除标记能删除照六,那那个时间戳肯定比保姆大,这个没问题吧,就是说那个标记打的对黄糊不起作用,这个时候就有问题了,就是我们所说的,既然at想用时间出做这个事,那一定他避免不了这个问题啊,这个也是生产文件当中,大家要慎用这种方式,问题出在哪了?大家想一想。
04:21
那有同学可能在想,你表表示的是删除单个版本,那我删除了周六我五出来很正常啊。但是你要想一个问题。这个问题如果发生在生长环境当中,这个都很诡异。发生在什么时候会出问题啊?想能想明白这个问题吗?我当前sto是不是一个版本,我住在了王五,王五已经改名叫周六了。对吧,就是说这个数据我已经把覆盖掉了,是不是王五这个数据应该对于客户来说不存在了。
05:00
对吧,但是你把。你用的是什么?单个版本删除的这种操作的时候。你把赵六删了,王五又出来了。我出来了,这个很奇怪吧。能不能get到这个奇怪的点?来举个例子,如果说当前我们是不是操作很快呀?出完王五put完照六,然后再什么删除的照六,这个时候王五能出来,那你告诉我。王五负责进去,照六负责进去,过了一个小时,这个时候没有操作,已经刷写了,我再执行删除操作,你告诉我王五还能出来吗?没没听懂我刚才所说的意思吗?就是刚才我是这样的,不的网五,不的照六,然后再去删除照六,是不是最大版本,我删除的就是赵六对吧,王五能出来,但是你看另外一种情况,五六,然后过了一个小时没有操作,然后再去删除赵六。
06:04
出来王五还有吗?出不来,由于你写的API调用的问题,导致在刷新前后,刷写前后,王五公王完了,结果不一样。一个能出来,一个不能算,想想是不是这个问题。前面刚才我们看到王五是不是确确实实出来了。对吧,但是如果说我做这个事他就干什么,出不来不的。1008,哎,应该是什么。S1008,然后是in four1对吧,还是张三李四五六,然后呢。朱期是吧,朱期天气,然后再来一个什么叫什么吧,王八吗?不是王五吗?确定是王八吗?啊,那王八好吧。
07:02
走,然后这个时候干什么,我flash好,然后我再去干什么,删除零这个name。对吧,走一下。零有东西吗?没东西,这个就是我们所说的,你看零七跟零八这两个数据。插入的时候差距在哪了?一个执行的flash,一个没执行flash吗?但是其他操作是不是都一样,但是flash是你主动做的吗?当然这块是我主动做的,对吧?但是生产环境当中是你主动的说的没事就flash一下嘛,是不是生产环境根据自己的情况去flash,好假设刚好你插入一条数据。刚好触发了什么,128兆触发了他这个刷写是不是你刚干的时候。什么数据都没有,你删除了之后,什么数据都没有了。假如说是这种情况,你不得不。
08:05
人家刚才才经过flash,你之后才刷写的,是不是这个时候还经过很长时间才会才会去flash,对吧,那这个时候你一查发现又出来了,是不是很诡异啊,对吧?也就是说这个API就是艾特康这个API在生长环境当中要去干什么,慎用,也不是禁用。慎用啊,这种呢就太诡异了,就刚才我们所说的,你明明把那个数据覆盖掉了,你是不是删除掉他啊,这个就是因为h base它用的是时间戳来控制这个版本的,所以没办法避免这个问题,如果想避免这个问题,他只能这么做。不是手动刷写的问题,他系统应该怎么做,就是必须要现场去改改原来的数据,就是说执行覆盖操作,你就把那条数据删了,是不是就不会有问题,像传统的一样,如果说我现在put保姆在put照六,我在put照六的时候,我把保姆那条数据删了,它还会有这种问题吗?不可能出现这种问题吧,但是这种就会怎么样。
09:04
慢是不是就会特别慢嘛,你整个查询有那么快吗?改的操作的时候,你说你出的去修改数据会有这么快吗。不可能吧啊,他没有这么快的,所以他为了追求快,引入了一个时间多,但是又引入了什么。另一个问题吧,啊,用另另一个问题,所以这块尽量的建议大家用什么加S的这种方式能听懂啊加S这种方式,这也是他S从老版本默认的创建表的时候是三个版本,但是现在我们创建的时候什么。一个版本的吧,因为老版本当中啊,它默认的就是0.98级之前默认的,你创建表出来,那个表里边所有的列默认的是三个版本,老版本当中啊,老的h base版本当中是三个版本,给你存三个版本,这个就很容易出问题,现在呢,他就默认的就一个版本。对吧,然后让你删除的时候尽量的用什么。加S这种方式筛,那我只有一个版本,我用加S的方式筛会出问题吗?
10:05
根本不会,假如说你这个里面是存的多个版本对吧,是互相覆盖关系,我又加S方式,是不是老的也出不来啊,对吧,啊都出不来是这个意思,所以呢,官方的个调整我们也能看出来他一些点。啊光分量好,那接下来还有一个问题,我们要去测一下,测一下什么内容呢?大家看一下啊。呃,当前这个1007啊,他有还剩这点数据对吧,我现在把这个时间戳给他拿过来。来。这个加S的添加时间中我就不看了。这个。加个L。啊,印了该到了加载啊,OK,那这个地方它是不是五五跟我们刚才这个数据一样啊,我要改成什么。
11:03
5050不行吧,应该改成五九。改成五九,那它也添加了一个删除标记,那我们要看一下是否能把这个数据删掉。来验证一下,我们当时不是说了两种情况嘛,对吧,一个是删除指定版本,一个是删除指定版本,如果说指定版本没有的话,取这个比它小的最大的那个值,对吧?啊,我们举的这个意思,那现在我们只要看我们执行完代码之后,这条数据还在不在,是不是就能分析出来它到底怎么现的,对吧?来走一下。还在吧啊,他删除的是什么五九那一个版本,你再插入数据。五九这条不生效,其他的都干什么还可以能听懂啊,但是如果说你查出数据比他小,还是比它覆盖了一个关系吧,啊,它只删除五九这一个,那我们要关心一下,那它的一个删除标记应该是什么样子的,对不对?
12:09
对吧,干一下。SQ。然后我们要拿一下什么。找一下。哎,不对,刚才我说做错了实验吗?为什么这个没改对吧,那我有什么关系啊,对吧。这个没改,应该把这个改成七吧,改成七。其实其实就是为了看这个标记,其实大家也能看出这个是什么标记。标记。1007王五还在吧,对吧,啊,尽管是现在注意要我已经改成什么。1007了,而且这个时间桌还是什么。
13:01
九吧,啊,实际上他只是删除什么来看这。叫delete标记,是不是又多了一种标记啊?那delete的标记呢?表示只删除。当前这一个时间,桌底下的一个。那你呢?啊如如果刚才我们王五是不是为这个实验数小啊,还能出来吧啊,所以呢,我们对这个删除要做一个总结啊,删除呢是挺复杂的,不像之前有的框架当中,我们说删除是最简单的,但这个删除呢,还挺麻烦的,还挺麻烦的啊对当年这块做一个总结,总结之前呢,我们其实还有一个东西要测一下,对吧,就是什么。这个指定到。列吧,还有一个什么。列足在命令行里边,我们是不是删除不了啊,对吧,我们来看这能不能删除啊,把这个注释掉,然后2.2,然后叫设置什么。
14:06
删除。指定的。列足啊,列足第立的点,这有个什么。叫family啊,同样有这个API吗?有这个API啊,那我们就用它,那这个地方呢,就best.To Best。CF人进来啊,CF进来啊,这块呢,我们用1009做实验。我们删除一模1NAME是不是随便写,反正没用对吧?啊来做一个什么。S109,然后什么。一那。张三啊,然后呢,把这个音一底下呀,我再来一个什么。两个列吧,啊,如果说单个列,我们不用非得指定列不就上了叫。
15:04
没有,现在呢,是干这个表。这个没问题吧,啊,幺零九两个列两个列,那我们来把这个直接测一下吧,走。走完了。这个删掉了吧,我们之前说了这个呢,在API当中是可以的啊,是可以的,OK,那应该是封装这个命令行的时候出了问题啊,调到API有问题正常的,要不然如果说他要不然会报错,如果说不能执行的话,应该会报错吧,如果能执行,但是我们看到的结果是他执行没报错,但是在命令行里面干什么。没有删除掉对吧?啊没有删掉,但是在代码里边是不是只指定到了哪呀。我只指定了列组吧,啊,这个列足是不是也可以删啊,啊也可以删,OK,那我们看一下它打的是什么。标记对吧,走。我们删的是1009吧。
16:01
删除的是什么?列足的一个标记啊,列足一个标记啊,这个内容也就是说这个命令行跟API还是很有差别的,然后我们总结一下,就关于删除这块。删除啊,删除操作。首先你可以指定到rookie的这种方式去选。对吧,他打的是什么标价。Delete family对吧,你要有多个列组,每一个列组都打一个什么delete family,而且呢,它是删除。VERSION4多个版本,所有版本全部删掉,对吧,它这里面没有说。单个版本跟多个版本没有这种区别啊,没有好,那除了rookie,还可以指定的rookie加。CF,但是在命令行里边不行,对吧?啊执行不报错,但是一直删不掉,一直删不掉,这种打了标记还是什么。是不是DF?Delete delete family吧啊delete family这种标记好这种标记同样的也是什么删除多个版本啊,就是你如果说可以传时间桌,它也可以传时间桌,你传了时间戳,就是时间戳小于等于它的全部传量啊跟那个一样。
17:15
那这个地方也一样好,接下来还可以怎么做?指定到列指定到列是不是分为两种啊,一种是at column。一种是加S的,一种是什么不加S的对吧,加S的这种。怎么下呢?删除指定列所有的什么。版本对吧,如果说你传了时间戳,传了时间戳,那就删除比这个时间戳小于等于它的对吧,所有版本是这个东西,它添加的标记呢。是不是delete的column这个标记啊,啊,无论你是指定时间中还是不指定时间,它都是delete column这个标记,好,那还有一个是。
18:10
这个叫不加S,直接at column。他是删除的什么单个版本对吧,你不传时间戳。删除的是什么?最新的那个数据,他先去获取一下,然后把它删掉吧,如果传了时间中呢。就是指定当前这个时间中了,对吧,它不会跟其他时间轴有任何关联,对吧,我们都做过测试的好,它添加的标记呢。就是简单那个什么d delete的标记,也就是说D类的标记,你一旦看到这个标记,它只会影响什么。这一个时间戳的数据对吧,其他的跟他没关系,哪怕比你大或者比你小,如果说只有一条的话都能返回,对吧,因为它只是删除这一个,如果恰好有一个数据跟这个时间轴一样,不好意思,你返回不了,你肯定出不来了,对吧,你这个东西就要被删掉了。
19:03
好,那除了这个标题之外,什么?D delete column delay family delay。Family对吧?这种标记底下如果但凡有个时间戳,那么其他的数据里边时间桌比这个小的,或者跟它相等的都是什么?被删除了对吧?啊,整个的删除当中呢,还有这些点啊,最后呢,我发现这个。问题比较大是不是啊?它的问题是不是比较大呀,因为就像我们所说的,你一个版本的时候,我明明把它覆盖掉了,然后我把最高版本删掉,你老的版本还没出来,那这个如果生产环境当中发生这种问题就很奇怪了。所以呢,这种。不加S这种API啊,尽量的干什么少用,除非你的一个环整个的情况比较特殊啊,比较特殊,你可以去用一用啊可以用,但是呢,建议大家还是干什么。少用,而且呢,建表的时候尽量的也一个版本,对吧,尽量的也一个版本,或者说是这样的,如果说你建表的时候非得要用到多个版本,这个也OK啊,这个也OK,那你要保证将来的数据呢,尽量的没有删除操作。
20:13
能听懂,如果说你用了多个版本,尽量的,如果说你这个表将来不会有什么数据去删,就只有覆盖这种操作,是不是你用多个版本也没问题啊,对吧?如或者说你用多个版本的时候这样。但凡删这个列的时候,所有的数据都删掉,这种情况也可以用多个版本嘛,你不要多个版本里边去跟这个结合着用。能听懂吗?也就是说还是跟他有关系吧,这种删除单个版本的,虽然它有这种功能,但是呢,还是建议大家去少用,因为它容易出问题,容易出问题给客户端就带来不很不好的用户体验。因为在两个时间段不同的时候去查询这个数据不一样。对吧?啊,一个是我等待它flash完了之后去删除再查数据没了,如果说我在flash之前去查对吧,去删掉去查数据,老的数据出来了,这个数据是不是很奇怪呀,对吧?也就是说你正常的操作,而只是在操作的时间点不同,返回的数据不一样,有没有做多余的操作,那这个问题就严重了,对吧?啊所以呢,这种要慎用啊,这种要慎用,这是整个的删除操作一些点啊,删除操作一个点,呃,这一系列是不是在API里边都可以啊。
21:26
对吧,啊,命令行里边呢,如果你能把它忘了那更好,因为容易混,因为命令行里边很多事做不了,对吧,你而且还有特别是这种更诡异的是看着好像成功了,最后没删掉。对吧,所以说他命令好封装的时候也有bug啊,也有bug,因为整个的每一次版本更新的时候,是不是要修复很多bug呀,啊,它有问题在里面啊,在问题里边还有一个点,像这个这个。这种情况是不是连命令行都没有封装啊,根本就实现不了对吧?滴的一删是不是只是上面那种情况啊,就在最开始的时候,我们有见过滴的这种标题吗?在选民令行的时没有吧,但这两种都见过啊,一个d delete的family,一个d delete的com,这两种都有,因为这个操作和这个操作在命令行里边是可以的,所以这两个标记大家见过的啊,大家是见过的,所以呢,总共有三种标记要注意一下啊,所作为的范围也都不一样。
22:17
啊,这是我们所说的删除的一个操作还是蛮复杂的,看着代码啊,就就一点对吧,但是由于他自己在封装的时候啊,还是蛮复杂的啊蛮复杂的。
我来说两句