本节详细描述如何生成文档id以及如何解释它们。X DevAPI依赖于基于服务器的文档ID生成,这是MySQL版本8.0.11中添加的,它会在所有客户机上依次增加文档ID。InnoDB
使用文档ID作为主键,从而实现高效的页面分割和树重组。
介绍自动生成的文档id的属性和格式。
的_id
在查询过程中,文档的字段与文档的任何其他字段的行为相同,只是在将其插入集合后不能更改其值。的_id
字段用作集合的主键。可以通过在插入的文档中手动包含一个ID来覆盖文档ID的自动生成。
X Plugin不知道插入到集合中的数据,包括您使用的任何手动文档id。在使用手动文档id时,必须确保它们不会与服务器可能自动生成的任何id冲突(参见文档ID生成有关详细信息),以避免由于主键重复而产生的任何错误。
每当一个_id
字段值没有出现在插入的文档中,则服务器生成_id
价值。生成的_id
函数的一部分返回给客户机结果
(结果
对象的连接器/J)add ()
操作。如果你在InnoDB集群上使用X DevAPI,会自动生成_id
在整个集群中必须是唯一的。通过设置mysqlx_document_id_unique_prefix
到每个集群实例的唯一值,您可以确保文档id在所有实例中都是唯一的。
的_id
字段必须是顺序的(总是递增的),以获得最佳的InnoDB插入性能(至少在单个服务器中)。的顺序性质_id
值在服务器重新启动时维护。
在多主的Group Replication或InnoDB Cluster环境中,生成的_id
表的值在实例之间是唯一的,以避免主键冲突并最小化事务认证。
本节描述如何格式化文档id。
自动生成的文档ID格式为:
unique_prefix | start_timestamp | 串行 |
---|---|---|
4个字节 | 8个字节 | 16字节 |
地点:
unique_prefix
是InnoDB集群分配给实例的一个值,用于使文档ID在同一集群的所有实例中是唯一的。的范围unique_prefix
从0到2启用,这是十六进制编码。默认值为0,如果不是由InnoDB Cluster和mysqlx_document_id_unique_prefix
系统变量。start_timestamp
是服务器实例启动时间的时间戳,采用十六进制编码。的价值串行
溢出,start_timestamp
加1和串行
值,然后在0处重新启动。串行
是否每个实例自动递增的整数序列号值(采用十六进制编码,范围为0到2)64 - 1.的初值串行
设置为auto_increment_offset
系统变量,该值的增量由auto_increment_increment
系统变量。
这种文档ID格式确保:
对于来自单个服务器实例的插入,主键值会单调递增,尽管表中值之间的间隔并不一致。
当使用多主组复制或InnoDB集群时,不同实例对同一个表的插入不会有冲突的主键值,只要实例有
auto_increment_offset
和auto_increment_increment
正确配置的系统变量(详见变量描述)。