是否可以使用辅助分片关键帧对Vistess进行分片



我们使用Vitess数据库在mysql中扩展并实现水平共享。是否可以在Vitess中进行二次分片。

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

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

现在,我们用AgentID作为Sharding Key对这两个表进行了Sharding。但PayrollDetails表非常庞大,它有超过1亿条记录。所以现在我们计划再次使用PayrollCreatedOn字段和Primary shard对PayrollDetails表进行分片。这两个表都应该使用Agency Key,但PayrollDetails表应该同时使用AgentID和PayrollCreated。我们如何在Vitess中实现这一点?

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

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

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

最新更新