是否可以使用辅助分片密钥对 Vistess 进行分片

is it possible to shard Vistess with the secondary sharding Key

我们正在使用 Vitess 数据库在 mysql 中扩展和实现水平分片。是否可以在Vitess中做二级分片

例如: Table 1 - Agency ( AgencyID INT, CreatedOn DATETIME )

Table 2 - PayrollDetails ( AgencyID INT FOREIGN KEY TO Agency Table, PayrollID INT, PayrollCreatedOn DATETIME )

现在我们使用 AgencyID 作为分片键对 table 进行分片。但是 PayrollDetails table 非常庞大,它有超过 1 亿条记录。所以现在我们计划再次使用 PayrollCreatedOn 字段和主分片对 PayrollDetails table 进行分片,因为 tables 应该使用 Agency Key 但 payrollDetails table 应该使用 AgencyID 和PayrollCreatedOn.How我们可以在Vitess中实现吗?

从概念上讲,分片键(主 vindex)用于决定一行转到哪个分片。因此,不可能有两个分片键,因为它们会指示行的冲突位置。

如果我没理解错的话,你想在where子句中使用PayrollCreatedOn查询table,你可以创建一个辅助Vindex。这将创建一个指向行所在位置的查找 table,Vitess 可以利用它。这里有一个解释:https://vitess.io/docs/reference/vindexes/。有一个名为 CreateLookupVindex 的新命令能够回填此查找 table。不过,它还没有被记录下来。

Vitess 还允许您通过使用不同的主 vindex "materialize" table。在这种情况下,第二个 table 将是第一个 table 的实时副本,但分片方式不同。你可以在 vitess 的首页看到一个演示(向下滚动到视频)。