我有一个 mysql 表,用于存储不同项目的用户评分。它具有以下字段:
- id (int, pk)
- 用户 ID(整数)
- itemId (int)
- 评级(浮动)
- 时间戳(整数)
和以下指数:
- (userId, rating):用于查询特定用户已评分的所有项目
- (itemId, rating):用于查询所有对特定项目进行评分的用户
该表有超过 1000 万行。为了使其更具可扩展性,我想执行水平分区。特别是,我计划将表分区为 20 个表:
- tbl_rating_by_item_0:存储itemId以0结尾的评分
- tbl_rating_by_item_1:存储itemId以1结尾的评分
- ……
- tbl_rating_by_item_9:存储itemId以9结尾的评分
和
- tbl_rating_by_user_0:存储userId以0结尾的评分
- tbl_rating_by_user_1:存储userId以1结尾的评分
- ……
- tbl_rating_by_user_9:存储userId以9结尾的评分
这个想法是,当我们从 tbl_rating_by_item_itemId 中读取 itemId 查询时,我们从 tbl_rating_by_user_userId 中读取 userId 查询。缺点是每当我想插入或删除评分时,我都需要在两个表中插入或删除。
还有其他解决方案吗?