业务分表方案咨询
大家好,目前在考虑分库分表方案:
问题场景描述:
视频(子)和专辑(父)关系,一个专辑对应多个视频,一个视频只属于一个专辑;
总数据量在千万级以上,一部分是有专辑的视频,另外一部分是无专辑的视频;
注意点:视频所属专辑会变更的 (父子关系会变化)。每个视频还会有对应的关联子表。
分表方案设计:
1)同一个专辑中的所有视频放在一个表中,便于上层应用查询。问题就是如果视频变更到新的专辑,就需要迁移原专辑视频到新专辑所在表中,这里会涉及事务操作。有的专辑下视频上千条,个别会上万条,所以同步在一个事务中执行,效率很低。
另外的一个想法就是避免上述的迁移数据问题,直接将分片后表名记录到路由中间表,然后在原专辑所在表中直接更新下所属专辑(即关联的专辑ID)。
2)没有专辑的单视频单独可以单独做分片,对外接口(有缓存,如果缓存没有回查DB)有通过批量id查询需求,涉及跨表join。
以上方案如果使用sharding-jdbc能否直接支持呢,第1)个方案是否需要自己实现分片算法呢?
以上请教大家!