全局序列
在實現分庫分表的情況下,數據庫自增主鍵已無法保證自增主鍵的全局唯一。
爲此, Mycat 提供了全局 sequence,並且提供了包含本地配置和數據庫配置等多種實現方式。
本地文件
此方式 Mycat 將 sequence 配置到文件中,當使用到 sequence 中的配置後, Mycat 會更下classpath 中的 sequence_conf.properties
文件中 sequence 當前的值。
- 優點: 本地加載,讀取速度快
- 缺點: 抗風險能力差,mycat所在主機宕機後,無法讀取本地文件。
數據庫方式
利用數據庫一個表 來進行計數累加。但是並不是每次生成序列都讀寫數據庫,這樣效率太低。
Mycat 會預加載一部分號段到 Mycat
的內存中,這樣大部分讀寫序列都是在內存中完成的
如果內存中的號段用完了 Mycat 會再向數據庫要一次。
**問:**那如果 Mycat 崩潰了 ,那內存中的序列豈不是都沒了?答:
是的。如果是這樣,那麼 Mycat 啓動後會向數據庫申請新的號段,原有號段會棄用。
也就是說如果 Mycat 重啓,那麼損失是當前的號段沒用完的號碼,但是不會因此出現主鍵重複
建立序列腳本
-- dn1 上創建全局序列表
CREATE TABLE MYCAT_SEQUENCE