微课程 | 第十三课《全局序列视频演示》

 https://v.youku.com/v_show/id...html

上一期咱们介绍了全局序列的原理,接下来咱们经过视频来演示一下全局序列功能。咱们来看一下这两种全局序列是怎么工做的。算法

ppt p23.png

时间戳算法

首先是 snowflake ,也就是所谓时间戳算法。sql

https://v.youku.com/v_show/id...数据库

默认的是直接使用时间戳算法,在实际的使用中先设置一下。在 server.xml 里面有一个叫 sequnceHandlerType 的属性。值为 2 表示时间戳类型,其它数值在文档中有详细介绍。咱们去配置一个有全局序列的表。tb_hash_sharding_er2 表里面的 autoIncrement 属性为 true。target 是用来配置的全局序列的。而后 snowflake 算法还有一个工做节点,它标识了机器的 ID 。在配置文件当中分别有两行配置。这两行是一个联合主键,只要在不一样机器上,联合值就不同,那么就实现了标识。登陆一个 dble 的流量端口。查看刚刚建的表是空的。再看一下这张表的结构,一共是三行。第一行数据类型是 bigint ,由于 snowflake 是一个 64 位的整数。64 位的整数超过了通常 int 的长度,因此咱们选用 bigint 存储,这里咱们须要注意。而后咱们插入一条数据,看到已经生成了一个意向的序列号。而后咱们再插入另一个值。能够看到生成了一个彻底不同的序列号。假如我同时插入多个值,由于这张表实际上是按照1024求模,而后按照 0 到 512 范围的查询算法。咱们写了一个 512 这样一个值插入,能够看到其中的一个全局序列彻底不同。因此这是一个按时间戳拆分的一个全局序列的算法。值得注意的是,若是一个系统已经肯定了全局序列的算法,是不能更改的。由于方式 A 和方式 B 的全局序列同时设置,颇有可能会有数据冲突。因此咱们展现完这个类型就要删掉。学习

offset-setup 类型

接下来是第二种 offset-setup 类型全局序列的配置和生成的演示。优化

https://v.youku.com/v_show/id...spa

首先要看一下全局序列的方式。刚才咱们属性值是 2,选择 offset-setup 这里要改为 1,固然须要重启才能生效。改好配置后,使用 testdb 库中的 tb_hash_sharding_er2 表,在 sequence_db 配置文件中添加一行。如今咱们知道这个全局序列的粒度是到表的,因此不一样表之间是能够不同的。须要配置出这样一个库表,来标识咱们的表要使用全局序列。后面的值表示个人载体放在哪里,发号器要放在哪个地方。咱们把它放到 dn1(数据库的一个实例节点)上。db1 指向 datahost1,可在 33061 端口登陆。我已经准备好了 dbseq.sql,里面是建表语句和存储过程。建的表就是发号器存放的地方,存储过程就是这个发号器。表很是简单,就三行。存储过程细节能够到文档中查看。发号器就是个为了控制不一样请求不冲突的东西。发号器经过锁来变动一张表的记录,而后把记录返回回去。当有其它请求发过来的时候不会冲突,而后去 33061 端口的 dn1 里面把建表语句和存储过程执行一下。咱们经过 source 命令去把这个表创建起来,存储过程也创建起来。
这时我去看就有这张表了。表的数据如今是空的,须要咱们显式的加一条数据。发号器的一个起始值和一批次的长度。其实这个起始值为 0 更合适,1 到 1000 也没有问题。这样的话,发号器里面就有一条记录了,以后的发号都会从这里面去申请。修改全局序列类型后,须要重启 dble。咱们去 log 里面验证一下是成功的!经过 8066 端口来演示这种全局序列生成的过程。将表清空,从新插入多条数据。观察在表中最终出现的形式。另外第一行能够不用 bigint 了。能够看到咱们插入数据的时候是指定后面两列,第一位是自动生成的,从 2 开始。在插入两个数据之后,就自动 2,3…… 递增。递增效果由 DBLE 内部控制。举个例子,好比说我 DBLE 忽然挂了,重启之后会发生什么?其实发号器已经发过 1 到 1000 的号了,可是我还没用,DBLE 就重启了。实际上会再去申请,因此序列有多是会有间断的。在 1 到 1000 的使用过程当中挂了,那我就废弃再去取,保证惟一性。以上,这就是 DBLE 全局序列功能,咱们今天先介绍到这里。3d

图文稿为了方便阅读,在不影响学习的状况下优化了一些口语化词汇,文稿与视频会尽可能保持一致。
相关文章
相关标签/搜索