1

mysql のみを使用する activity_feed システムを作成したいと考えています。アクティビティは、アクティビティを作成したユーザーのフォロワーに表示されます。アクティビティ自体は、別のキャッシュ テーブルに書き込まれます (「投稿」など、他の DB への問い合わせの後)。

**ACTIVITY_FEED** <- fixed/length
-----------------
AID - INT, PRIMARY KEY, A_I <- *id of activity*
UID - INT <- *id of user* 
TYPE - ENUM(post,comment,like,etc) <- *type of activity*
RID - INT <- *id relative to activity type (for example "posts" table id)*
TIMESTAMP - DATETIME

**ACTIVITY_FEED_INDEX** <- fixed/length
------------------
UID - INT <- *id of the user that request the activity feed. (the follower)*
AID - INT <- *ID of the activity that the follower will seen*
TIMESTAMP - DATETIME <- *same timestamp of activity*
PRIMARY KEY uid,aid

**ACTIVITY_FEED_CACHE**
------------------
AID - INT <- *if of activity*
CACHE_DATA - TEXT <- *json string of activity parameters* //no search needed

アイデアは、ACTIVITY_FEED_INDEX に 1 つの行を挿入して、アクティビティを作成したユーザーを全員がフォローしていることです。(プッシュモード)

次に、次のようなクエリを使用します。

SELECT cache.cache FROM activity_feed_index as index INNER JOIN activity_feed_cache AS cache ON cache.aid = index.aid WHERE index.uid = 'USER_ID' 

ユーザーは、フォローしているユーザーのすべてのアクティビティを取得します。

それはスケーラブルですか?それは正規化されていますか?大丈夫ですか?

PS: 現時点では REDIS やその他の NoSQL システムを使用できません。したがって、MYSQLのみです。

PS: 下手な英語でごめんなさい :O

4

0 に答える 0