五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

開源信創(chuàng)國產(chǎn)即時通訊系統(tǒng)GGTalk源碼剖析之:數(shù)據(jù)庫設(shè)計

2023-08-22 15:56 作者:傲瑞-即時通訊  | 我要投稿

上一篇:開源跨平臺即時通訊GGTalk源碼剖析之:概述

自從《開源即時通訊GGTalk 8.0發(fā)布,增加Linux客戶端,支持在統(tǒng)信UOS、銀河麒麟上運行!》一文在博客園發(fā)布后,有園友聯(lián)系我QQ,說能不能整理個更系統(tǒng)更詳細地介紹GGTalk源碼的文章,現(xiàn)在博客中的介紹比較零散,對于初級程序員而言,面對GGTalk大量的源碼,有點不知所措。想想也是如此,于是,我打算寫一個系列的文章來完整地介紹GGTalk的方方面面,專題的名字就叫做《GGTalk源碼剖析》吧。

一. 概述

這個《GGTalk源碼剖析》系列的文章將基于最新的 GGTalk V8.0 進行。
GGTalk V8.0 服務端支持Windows、Linux,客戶端支持 Windows、Android、iOS、Linux、以及銀河麒麟、統(tǒng)信UOS等國產(chǎn)操作系統(tǒng)。
數(shù)據(jù)庫支持SqlServer、MySql、以及達夢數(shù)據(jù)庫、人大金倉、南大通用等國產(chǎn)數(shù)據(jù)庫。本篇文章以 MySQL 數(shù)據(jù)庫為例來對GGTalk的數(shù)據(jù)庫設(shè)計進行詳細的介紹。
還沒有GGTalk源碼的朋友,可以點擊文章底部鏈接下載。

二. 數(shù)據(jù)表的設(shè)計

最新版本的?GGTalk?數(shù)據(jù)庫一共涉及到九張表,分別為:

  • GGUser:用戶表,所有注冊用戶都保存在該表中。

  • GGGroup:群組表,所有創(chuàng)建的群都保存在該表中。

  • OfflineMessage:離線消息表,當目標用戶不在線時,發(fā)送給他的消息存在該表中。

  • OfflineFileItem:離線文件表,當目標用戶不在線時,發(fā)送給他的文件對應的記錄存在該表中。

  • GroupBan:群禁言表,當群中的用戶被禁言時,對應的記錄將存在該表中。

  • ChatMessageRecord:聊天記錄表,一對一的聊天記錄、群聊天記錄都存在該表中。

  • AddFriendRequest:加好友請求表,所有添加好友的請求消息都存在該表中。

  • AddGroupRequest:入群請求表,所有申請入群的請求消息都存在該表中。

  • GGConfiguration:配置表,用于預留存儲與GGTalk相關(guān)的配置信息。

下面將分別對每一張表的字段進行說明。

1.GGUser(用戶表)

所有注冊用戶都保存在該表中。

補充說明:

  • UserId同時也是?用戶賬號?和?用戶名?。

  • Friends 字段中包含分組信息,每個分組之間以;進行分割。例如:朋友:friend1,friend2;同學:schoolmate1,schoolmate2;

  • CommentNames 字段存儲用戶好友備注列表數(shù)據(jù),以用戶ID?+?:?+?備注為一個好友的備注信息,多個備注信息之間以;分割。例如:10000:張三;10001:李四。

  • HeadImageIndex 字段存儲系統(tǒng)默認頭像索引數(shù)據(jù),當用戶上傳頭像后,HeadImageData 字段會被賦值,且HeadImageIndex 字段值被設(shè)置為-1。

  • Version 字段保存用戶的版本,初始值為0,每當用戶的信息更新,本字段值+1。

2. GGGroup(群組表)

所有創(chuàng)建的群都保存在該表中

補充說明:

  • Version 字段保存群組在版本,初始值為0,每當群組在信息更新,本字段值+1。

  • Members 字段存儲群組成員的用戶ID列表數(shù)據(jù),注意這個字段和?GGUser表?中的Groups 字段間存在聯(lián)動關(guān)系。例如:當一個用戶退出一個群時,這個用戶的Groups中會少一個群組ID,同時這個群組的Members中會少一個用戶ID。

3. OfflineMessage(離線消息記錄表)

此表用于存儲離線消息數(shù)據(jù)。

補充說明:

  • 當離線用戶上線時,服務器會把這條消息轉(zhuǎn)發(fā)給該用戶,同時這條消息會從表中刪除。

  • TimeTransfer 字段存儲離線文件的路徑,默認在服務端程序根目錄\bin\Debug\OfflineFiles\接受者的用戶ID作為文件名目錄下。

4. OfflineFileItem(離線文件表)

當目標用戶不在線時,發(fā)送給他的文件對應的記錄存在該表中。

補充說明:
離線文件默認存在服務端的運行目錄下的OfflineFiles文件夾下,RelayFilePath 指明了具體的相對路徑。
當離線用戶上線時,服務器會把這個文件轉(zhuǎn)發(fā)給該用戶,同時這個文件會從表中刪除。

5. GroupBan(群禁言表)

當群中的用戶被禁言時,對應的記錄將存在該表中。

6. ChatMessageRecord(聊天消息記錄表)

此表用于存儲聊天消息數(shù)據(jù)。

補充說明:
該表除了主鍵之外,還建有兩個聯(lián)合索引:
KEY?IX_ChatMessageRecord?(SpeakerID,AudienceID,OccureTime) USING BTREE
KEY?IX_ChatMessageRecord_1?(AudienceID,OccureTime) USING BTREE
這兩個聯(lián)合索引,與客戶端兩種查詢聊天記錄的方式一一對應。
如此,服務端可以快速地從數(shù)據(jù)庫中加載滿足條件的聊天記錄返回給客戶端。

7. AddFriendRequest(加好友請求表)

所有添加好友的請求消息都存在該表中。

8. AddGroupRequest(入群請求表)

所有申請入群的請求消息都存在該表中。

9. GGConfiguration(系統(tǒng)配置表)

用于預留存儲與GGTalk相關(guān)的配置信息。

三. 小結(jié)

GGTalk 的數(shù)據(jù)庫只有9張表,而且都比較簡單。
每個表都有唯一的主鍵。
就實際使用來看,ChatMessageRecord?聊天記錄表的數(shù)據(jù)量將是最大的,所以,ChatMessageRecord 表必須建聯(lián)合索引,以支持快速查詢。
在我們接到的定制項目中,對于那些同時在線用戶量較大的(比如同時在線大于1萬人)使用場景,ChatMessageRecord 我們會采取按月分表的策略來應對,在這種情況下,GGTalk 的服務端代碼需要做相應的調(diào)整。有機會用到這種策略的朋友,可以和我們交流更多關(guān)于該策略的實現(xiàn)方案。
作為《GGTalk源碼剖析》的第一篇,差不多就這樣了。在接下來的一篇我們將介紹GGTalk服務端全局緩存。
敬請期待:《GGTalk 開源即時通訊系統(tǒng)源碼剖析之:服務端全局緩存》

點擊下面鏈接下載GGTalk 8.0版本源碼。

https://zhuanlan.zhihu.com/p/651560820

開源信創(chuàng)國產(chǎn)即時通訊系統(tǒng)GGTalk源碼剖析之:數(shù)據(jù)庫設(shè)計的評論 (共 條)

分享到微博請遵守國家法律
长寿区| 三河市| 昭通市| 普兰店市| 余姚市| 蛟河市| 贡嘎县| 利川市| 太保市| 华安县| 临武县| 西华县| 白城市| 青阳县| 尖扎县| 安塞县| 嵊州市| 诸暨市| 祁阳县| 防城港市| 罗甸县| 江川县| 得荣县| 双峰县| 廉江市| 会同县| 涿鹿县| 张家川| 张北县| 呼图壁县| 班戈县| 仙桃市| 建宁县| 桃江县| 莆田市| 安丘市| 长沙市| 桐乡市| 宝应县| 怀宁县| 泰安市|