さまざまなアイテムのユーザー評価を格納する mysql テーブルがあります。次のフィールドがあります。
- id (整数、pk)
- ユーザー ID (整数)
- itemId (整数)
- 評価 (フロート)
- タイムスタンプ (整数)
および次のインデックス:
- (userId, rating): 特定のユーザーが評価したすべてのアイテムに関するクエリの場合
- (itemId, rating): 特定のアイテムを評価したすべてのユーザーに関するクエリ用
このテーブルには 1,000 万行を超える行があります。よりスケーラブルにするために、水平分割を実行したいと思います。特に、テーブルを 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 で終わる評価を保存します
itemId でクエリを実行する場合は tbl_rating_by_item_itemId から読み取り、userId でクエリを実行する場合は tbl_rating_by_user_userId から読み取ります。欠点は、評価を挿入または削除するたびに、2 つのテーブルに挿入または削除する必要があることです。
他の解決策はありますか?