1.7 全局序列

在分库分表的情况下,数据库自增主键无法保证自增主键的全局唯一。为此,dble提供了全局序列,并且针对不同应用场景提供了多种实现方式。
要应用全局序列,首先需要在server.xml 中配置(参见 1.3 server.xml):

<system>
    <property name="sequnceHandlerType">1</property>
</system>

根据sequnceHandlerType的类型配置具体的实现:

其次,使用全局序列的表要在schema.xml中配置表格table标签对应autoIncrement属性为true,并且指定其自增列(参见1.2 schemal.xml)。
自增列的指定逻辑: 没有显式声明自增列的,默认primaryKey(主键)为自增列,有显式声明的以incrementColumn中的指定为准 注意: 若主键和自增列都没有声明的,autoIncrement="true"会报配置错误
自增列的配置可以有以下两种的形式:

//默认情况下主键id是自增列
<table name="table1" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2" rule="two_node_hash"/>  
//有显式指定incrementColumn=pid,则pid作为自增列
<table name="table1" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2" rule="two_node_hash" incrementColumn="pid"/>

配置之后的使用示例:

/*id为主键,配置为自增长*/
insert into table1(name) values('test');
insert into table1 set name = 'test';

每一个全局序列的具体实现配置将在各个小节进行详细说明;其功能将在2.2 全局序列进行详细描述。

与MYSQL差异
在MySQL中要求自增列必须含有唯一键,在dble中对于表格的自增列的唯一属性不做要求,但是在dble进行插入数据操作的时候不允许用户手动插入自增列的数值,自增列只能由dble自己生成的ID进行填充
并且存在以下情形和mysql的行为不一致

table1拥有列aid,bid,cid,did 其中bid为在dble中的自增列
insert into table1 values(1,2,3)
和以下sql的效果相等
insert into table1 set aid = 1,cid = 2,did = 3

特别提醒 在dble中全局序列只在生成的时候确保其唯一性,在之后的过程中用户被允许使用update或者replace语句进行更新自增字段(特例:自增字段同时也是分片字段是除外)。 这给予用户提供了充足的修改空间但同时要求用户在更新自增字段的时候有足够的谨慎和了解

results matching ""

    No results matching ""