https://v.youku.com/v_show/id...html
上一期咱們介紹了全局序列的原理,接下來咱們經過視頻來演示一下全局序列功能。咱們來看一下這兩種全局序列是怎麼工做的。算法
首先是 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 類型全局序列的配置和生成的演示。優化
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
圖文稿爲了方便閱讀,在不影響學習的狀況下優化了一些口語化詞彙,文稿與視頻會盡可能保持一致。