(摘錄)朋友圈的設(shè)計及實現(xiàn)

需求

最近項目需求需要模擬微信的朋友圈功能,實現(xiàn)可以發(fā)送圖文消息,好友可以查看,滿足添加新的好友之后,可以在朋友圈中刷新到好友的消息,看了許多文章,琢磨出來一套流程。這里只記錄一下我的實現(xiàn)思路,并不貼上實際的代碼。

數(shù)據(jù)庫設(shè)計

核心結(jié)構(gòu)有三張表:

#消息表

CREATE TABLE `t_friend_circle_message` (

`id` bigint(15) NOT NULL AUTO_INCREMENT COMMENT '主鍵',

`uid` bigint(15) DEFAULT NULL COMMENT '用戶id',

`content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,

`picture` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT '' COMMENT '圖片',

`location` varbinary(100) DEFAULT '' COMMENT '位置',

`create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建日期',

PRIMARY KEY (`id`)

)? ?

消息表很好理解,存儲用戶發(fā)送的內(nèi)容,圖片存地址。?utf8mb4格式可以存儲emoji表情,具體可以參照之前的一篇文章mysql支持emjoy

#時間軸表

CREATE TABLE `t_friend_circle_timeline` (

`id` bigint(15) NOT NULL AUTO_INCREMENT,

`uid` bigint(15) DEFAULT NULL COMMENT '用戶id',

`fcmid` bigint(15) DEFAULT NULL COMMENT '朋友圈信息id',

`is_own` int(1) DEFAULT '0' COMMENT '是否是自己的',

`create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建日期',

PRIMARY KEY (`id`)

)

時間軸表在朋友圈中是最關(guān)鍵的,存儲著所有用的時間軸信息,因為當(dāng)用戶去拉取好友圈的時候,查詢的就是本表,is_own字段用來區(qū)分當(dāng)前數(shù)據(jù)是自己的發(fā)布還是好友發(fā)布的消息。

#評論表

CREATE TABLE `t_friend_circle_comment` (

`id` bigint(15) NOT NULL AUTO_INCREMENT,

`fcmid` bigint(15) DEFAULT NULL COMMENT '朋友圈信息id',

`uid` bigint(15) DEFAULT NULL COMMENT '用戶id',

`content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,

`create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建日期',

`like_count` int(10) DEFAULT '0' COMMENT '點贊數(shù)',

PRIMARY KEY (`id`)

)

評論表,沒有什么好解釋的。。 like_count字段在這里并沒有實現(xiàn)功能,參考點贊功能實現(xiàn)。


好友圈邏輯

發(fā)布朋友圈消息

當(dāng)用戶發(fā)布一條朋友圈消息的時候,后端邏輯的處理(A和B已經(jīng)是好友關(guān)系):

1.用戶A在朋友圈中發(fā)布一條消息,消息表t_friend_circle_message寫入一條數(shù)據(jù)。

2.時間軸表t_friend_circle_timeline中增加一條數(shù)據(jù),uid設(shè)置A,is_own設(shè)置為1,表示在A的時間軸中增加一條自己發(fā)布的消息。

3.查詢用戶A的好友,查到用戶B(如果有還有其他好友D、E等等同樣處理)

4.時間軸表t_friend_circle_timeline中增加一條數(shù)據(jù),uid設(shè)置B,is_own設(shè)置為0,表示在B的時間軸中增加一條好友發(fā)布的消息。

添加好友

當(dāng)用戶A,添加用戶C為好友之后,觸發(fā)同步好友時間軸的操作

INSERT INTO t_friend_circle_timeline (uid,fcmid,is_own,create_time) SELECT #{uid},`id`,0,create_time FROM t_friend_circle_message WHERE uid = #{fid};

·消息表t_friend_circle_message好友C發(fā)布的所有消息添加到自己的時間軸中。

·?再把消息表t_friend_circle_message自己發(fā)布的消息添加到好友C的時間軸中。

·?使用好is_own字段,因為都是互相添加好友的消息到自己的時間軸中,所以都應(yīng)該為false(0)。

總結(jié)

思路參照了微信朋友圈是怎么做的架構(gòu)?。?

做完之后發(fā)現(xiàn)這個應(yīng)該更像QQ空間的心情功能,因為沒有所謂的不是好友不可見評論功能,如果誰有這一塊的更好的思路請留言^_^。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容