vitess - 是否可以使用辅助分片密钥对 Visess 进行分片
问题描述
我们正在使用 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 表进行分片,两个表的 Primary Shard 都应该使用 Agency Key 但 payrollDetails 表应该使用 AgencyID 和 PayrollCreatedOn 进行分片。我们如何在 Vitess 中实现它?
解决方案
从概念上讲,分片键(主 vindex)用于决定一行进入哪个分片。因此,不可能有两个分片键,因为它们会指定行的冲突位置。
如果我理解正确,你想PayrollCreatedOn
在 where 子句中查询表,你可以创建一个辅助 Vindex。这将创建一个查找表,指向行所在的位置,Vitess 可以利用它。这里有一个解释:https ://vitess.io/docs/reference/vindexes/ 。有一个名为的新命令CreateLookupVindex
能够回填此查找表。不过,它还没有被记录在案。
Vitess 还允许您通过使用不同的主 vindex 来“实现”表。在这种情况下,第二个表将是第一个表的实时副本,但分片方式不同。您可以在 vitess 首页上看到一个演示(向下滚动到视频)。
推荐阅读
- android - 如何在搜索视图中制作过滤系统
- javascript - React 中的 insertRow() 和 appendChild() 等价物
- java - JMS Queue Resource Leak Suspected - 注入连接、会话和队列
- r - 使用 left_join 合并数据,但仅从一组行中获取一个值
- python - 为什么 stat.filemode 的第一个字母是 `?`?
- xunit - 如何将构造函数参数注入集合夹具?
- powerbi - 如何在 DAX 中将秒转换为 HH:MM:SS 格式时避免出现空白
- uniobjects - 如何将 U2.Data.Client 用于 .NET Core Web API?
- python - 合并偶尔丢失文件的数据框
- c# - 尝试远程访问 API