5.3了解文档id

本节详细描述如何生成文档id以及如何解释它们。X DevAPI依赖于基于服务器的文档ID生成,这是MySQL版本8.0.11中添加的,它会在所有客户机上依次增加文档ID。InnoDB使用文档ID作为主键,从而实现高效的页面分割和树重组。

介绍自动生成的文档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。

自动生成的文档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_offsetauto_increment_increment正确配置的系统变量(详见变量描述)。