我们使用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作为分片键对这两个表进行分片。但是PayrollDetails表非常大,它有超过1亿条记录。所以现在我们计划用PayrollCreatedOn字段重新分片PayrollDetails表,两个表的主分片都应该用代理键,但是payrollDetails表应该用AgencyID和PayrollCreatedOn.How来分片,我们能在Vitess中实现吗?
发布于 2020-04-25 03:51:43
从概念上讲,分片键(主vindex)用于决定行转到哪个分片。因此,不可能有两个分片键,因为它们会指示行的冲突位置。
如果我理解正确的话,您希望在where子句中使用PayrollCreatedOn查询表,您可以创建一个辅助Vindex。这将创建一个指向行所在位置的查找表,Vitess可以利用这一点。这里有一个解释:https://vitess.io/docs/reference/vindexes/。有一个名为CreateLookupVindex的新命令能够回填此查找表。然而,它还没有被记录下来。
Vitess还允许您通过使用不同的主vindex来“具体化”一个表。在这种情况下,第二个表将是第一个表的实时副本,但以不同的方式进行分片。你可以在vitess的首页(向下滚动到视频)上看到这方面的演示。
https://stackoverflow.com/questions/61344529
复制相似问题