精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

粉絲關系鏈,10億數據,如何設計?

開發 開發工具 前端
繼續答星球水友提問,大數據量,高并發量,好友關系鏈、粉絲關系鏈要如何設計?關系鏈主要分為兩類,弱好友關系與強好友關系,兩類都有典型的互聯網產品應用。

繼續答星球水友提問,大數據量,高并發量,好友關系鏈、粉絲關系鏈要如何設計?

什么是關系鏈業務?

關系鏈主要分為兩類,弱好友關系與強好友關系,兩類都有典型的互聯網產品應用。

弱好友關系的建立,不需要雙方彼此同意:

  • 用戶A關注用戶B,不需要用戶B同意,此時用戶A與用戶B為弱好友關系,對A而言,暫且理解為“關注”;
  • 用戶B關注用戶A,也不需要用戶A同意,此時用戶A與用戶B也為弱好友關系,對A而言,暫且理解為“粉絲”;

idol與fans這類微博粉絲關系鏈,是一個典型的弱好友關系應用。

強好友關系的建立,需要好友關系雙方彼此同意:

  • 用戶A請求添加用戶B為好友,用戶B同意,此時用戶A與用戶B則互為強好友關系,即A是B的好友,B也是A的好友;

QQ好友關系鏈,是一個典型的強好友關系應用。

好友中心是一個典型的多對多業務:

  • 一個用戶可以添加多個好友
  • 也可以被多個好友添加

其典型架構為:

  • friend-service:好友中心服務,對調用者提供友好的RPC接口
  • db:對好友數據進行存儲

弱好友關系,存儲層應該如何實現?

通過弱好友關系業務分析,很容易了解到,其核心元數據為:

  1. guanzhu(uid, guanzhu_uid); 
  2. fensi(uid, fensi_uid); 

其中:

  • guanzhu表,用戶記錄uid所有關注用戶guanzhu_uid
  • fensi表,用來記錄uid所有粉絲用戶fensi_uid

需要強調的是,一條弱關系的產生,會產生兩條記錄,一條關注記錄,一條粉絲記錄。 例如:用戶A(uid=1)關注了用戶B(uid=2),A多關注了一個用戶,B多了一個粉絲,于是:

  • guanzhu表要插入{1, 2}這一條記錄,1關注了2
  • fensi表要插入{2, 1}這一條記錄,2粉了1

如何查詢一個用戶關注了誰?回答:在guanzhu的uid上建立索引:

  1. select * from guanzhu where uid=1

即可得到結果,1關注了2。 如何查詢一個用戶粉了誰?回答:在fensi的uid上建立索引:

  1. select * from fensi where uid=2

即可得到結果,2粉了1。

強好友關系,存儲層應該如何實現?

方案一

通過強好友關系業務分析,很容易了解到,其核心元數據為:

  1. friend(uid1, uid2); 

其中:

  • uid1,強好友關系中一方的uid
  • uid2,強好友關系中另一方的uid

uid=1的用戶添加了uid=2的用戶,雙方都同意加彼此為好友,這個強好友關系,在數據庫中應該插入記錄{1, 2}還是記錄{2,1}呢?

回答:都可以。為了避免歧義,可以人為約定,插入記錄時uid1的值必須小于uid2。 例如:有uid=1,2,3三個用戶,他們互為強好友關系,那邊數據庫中可能是這樣的三條記錄

  1. {1, 2} 
  2. {2, 3} 
  3. {1, 3} 

如何查詢一個用戶的好友呢?回答:假設要查詢uid=2的所有好友,只需在uid1和uid2上建立索引,然后:

  1. select * from friend where uid1=2 
  2. union 
  3. select * from friend where uid2=2 

即可得到結果。

方案二

強好友關系是弱好友關系的一個特例,A和B必須互為關注關系(也可以說,同時互為粉絲關系),即也可以使用關注表和粉絲表來實現:

  1. guanzhu(uid, guanzhu_uid); 
  2. fensi(uid, fensi_uid); 

例如:用戶A(uid=1)和用戶B(uid=2)為強好友關系,即相互關注:

用戶A(uid=1)關注了用戶B(uid=2),A多關注了一個用戶,B多了一個粉絲,于是:

  • guanzhu表要插入{1, 2}這一條記錄
  • fensi表要插入{2, 1}這一條記錄

同時,用戶B(uid=2)也關注了用戶A(uid=1),B多關注了一個用戶,A多了一個粉絲,于是:

  • guanzhu表要插入{2, 1}這一條記錄
  • fensi表要插入{1, 2}這一條記錄

兩種實現,各有什么優缺點?

對于強好友關系的兩類實現:

  • friend(uid1, uid2)表
  • 數據冗余guanzhu表與fensi表(后文稱正表T1與反表T2)

在數據量小時,看似無差異,但數據量大時,數據冗余的優勢就體現出來了:

  • friend表,數據量大時,如果使用uid1來分庫,那么uid2上的查詢就需要遍歷多庫
  • 正表T1與反表T2通過數據冗余來實現好友關系,{1,2}{2,1}分別存在于兩表中,故兩個表都使用uid來分庫,均只需要進行一次查詢,就能找到對應的關注與粉絲,而不需要多個庫掃描

畫外音:假如有10億關系鏈,必須水平切分。

數據冗余,是多對多關系,在數據量大時,數據水平切分的常用實踐。

如何進行數據冗余?

接下來的問題轉化為,好友中心服務如何來進行數據冗余,常見有三種方法。

方法一:服務同步冗余

顧名思義,由好友中心服務同步寫冗余數據,如上圖1-4流程:

  • 業務方調用服務,新增數據
  • 服務先插入T1數據
  • 服務再插入T2數據
  • 服務返回業務方新增數據成功

優點:

  • 不復雜,服務層由單次寫,變兩次寫
  • 數據一致性相對較高(因為雙寫成功才返回)

缺點:

  • 請求的處理時間增加(要插入次,時間加倍)
  • 數據仍可能不一致,例如第二步寫入T1完成后服務重啟,則數據不會寫入T2

如果系統對處理時間比較敏感,引出常用的第二種方案。

方法二:服務異步冗余

數據的雙寫并不再由好友中心服務來完成,服務層異步發出一個消息,通過消息總線發送給一個專門的數據復制服務來寫入冗余數據,如上圖1-6流程:

  • 業務方調用服務,新增數據
  • 服務先插入T1數據
  • 服務向消息總線發送一個異步消息(發出即可,不用等返回,通常很快就能完成)
  • 服務返回業務方新增數據成功
  • 消息總線將消息投遞給數據同步中心
  • 數據同步中心插入T2數據

優點:

  • 請求處理時間短(只插入1次)

缺點:

  • 系統的復雜性增加了,多引入了一個組件(消息總線)和一個服務(專用的數據復制服務)
  • 因為返回業務線數據插入成功時,數據還不一定插入到T2中,因此數據有一個不一致時間窗口(這個窗口很短,最終是一致的)
  • 在消息總線丟失消息時,冗余表數據會不一致

如果想解除“數據冗余”對系統的耦合,引出常用的第三種方案。

方法三:線下異步冗余

數據的雙寫不再由好友中心服務來完成,而是由線下的一個服務或者任務來完成,如上圖1-6流程:

  • 業務方調用服務,新增數據
  • 服務先插入T1數據
  • 服務返回業務方新增數據成功
  • 數據會被寫入到數據庫的log中
  • 線下服務或者任務讀取數據庫的log
  • 線下服務或者任務插入T2數據

優點:

  • 數據雙寫與業務完全解耦
  • 請求處理時間短(只插入1次)

缺點:

  • 返回業務線數據插入成功時,數據還不一定插入到T2中,因此數據有一個不一致時間窗口(這個窗口很短,最終是一致的)
  • 數據的一致性依賴于線下服務或者任務的可靠性

上述三種方案各有優缺點,可以結合實際情況選取。 數據冗余固然能夠解決多對多關系的數據庫水平切分問題,但又帶來了新的問題,如何保證正表T1與反表T2的數據一致性呢?

從上面的討論可以看到,不管哪種方案,因為兩步操作不能保證原子性,總有出現數據不一致的可能,高吞吐分布式事務是業內尚未解決的難題,此時的架構優化方向:最終一致性。并不是完全保證數據的實時一致,而是盡早的發現不一致,并修復不一致。 最終一致性,是高吞吐互聯網業務一致性的常用實踐。更具體的,保證數據最終一致性的常見方案有三種。

方法一:線下掃面正反冗余表全部數據

如上圖所示,線下啟動一個離線的掃描工具,不停的比對正表T1和反表T2,如果發現數據不一致,就進行補償修復。

優點:

  • 比較簡單,開發代價小
  • 線上服務無需修改,修復工具與線上服務解耦

缺點:

  • 掃描效率低,會掃描大量的“已經能夠保證一致”的數據
  • 由于掃描的數據量大,掃描一輪的時間比較長,即數據如果不一致,不一致的時間窗口比較長

有沒有只掃描“可能存在不一致可能性”的數據,而不是每次掃描全部數據,以提高效率的優化方法呢?

方法二:線下掃描增量數據

每次只掃描增量的日志數據,就能夠極大提高效率,縮短數據不一致的時間窗口,如上圖1-4流程所示:

  • 寫入正表T1
  • 第一步成功后,寫入日志log1
  • 寫入反表T2
  • 第二步成功后,寫入日志log2

當然,我們還是需要一個離線的掃描工具,不停的比對日志log1和日志log2,如果發現數據不一致,就進行補償修復

優點:

  • 雖比方法一復雜,但仍然是比較簡單的
  • 數據掃描效率高,只掃描增量數據

缺點:

  • 線上服務略有修改(代價不高,多寫了2條日志)
  • 雖然比方法一更實時,但時效性還是不高,不一致窗口取決于掃描的周期

有沒有實時檢測一致性并進行修復的方法呢?

方法三:實時線上“消息對”檢測

這次不是寫日志了,而是向消息總線發送消息,如上圖1-4流程所示:

  • 寫入正表T1
  • 第一步成功后,發送消息msg1
  • 寫入反表T2
  • 第二步成功后,發送消息msg2

這次不是需要一個周期掃描的離線工具了,而是一個實時訂閱消息的服務不停的收消息。假設正常情況下,msg1和msg2的接收時間應該在3s以內,如果檢測服務在收到msg1后沒有收到msg2,就嘗試檢測數據的一致性,不一致時進行補償修復

優點:

  • 效率高
  • 實時性高

缺點:

  • 方案比較復雜,上線引入了消息總線這個組件
  • 線下多了一個訂閱總線的檢測服務

however,技術方案本身就是一個投入產出比的折衷,可以根據業務對一致性的需求程度決定使用哪一種方法。

總結

(1) 關系鏈業務是一個典型的多對多關系,又分為強好友與弱好友

(2) 數據冗余是一個常見的多對多業務數據水平切分實踐

(3) 冗余數據的常見方案有三種

  • 服務同步冗余
  • 服務異步冗余
  • 線下異步冗余

(4) 數據冗余會帶來一致性問題,高吞吐互聯網業務,要想完全保證事務一致性很難,常見的實踐是最終一致性

(5) 最終一致性的常見實踐是,盡快找到不一致,并修復數據,常見方案有三種

  • 線下全量掃描法
  • 線下增量掃描法
  • 線上實時檢測法

希望大家有所啟示,思路比結論重要。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2025-11-10 09:52:26

架構數據冗余關系鏈

2023-06-06 14:01:05

關系鏈架構數據庫

2025-02-21 08:20:33

2024-07-04 13:42:12

2019-07-29 14:40:26

架構存儲檢索

2019-05-05 09:28:59

架構數據查詢

2020-07-29 09:54:35

帖子中心數據架構

2024-06-03 06:45:18

2024-02-19 11:49:23

JavaBitMap類型

2025-05-12 01:55:00

MySQL存儲數據

2024-03-06 09:22:23

C#數據庫判重

2025-06-26 08:22:03

2015-07-30 13:49:32

Windows 10粉絲

2019-03-05 10:16:54

數據分區表SQLserver

2020-06-16 14:02:51

數據BitMap代碼

2021-02-05 10:58:28

數據存儲架構

2012-11-23 09:32:20

新浪微博微信

2025-09-28 01:50:00

2025-01-23 00:00:00

JMMJava

2025-07-03 08:21:16

點贊
收藏

51CTO技術棧公眾號

欧美一区二区三区系列电影| 国产精品人人做人人爽人人添| 91av在线看| 在线视频第一页| 国产亚洲观看| 欧美性猛交视频| 综合一区中文字幕| 青草久久伊人| 国产精品一区二区黑丝| 欧美洲成人男女午夜视频| 亚洲综合久久av一区二区三区| av在线亚洲色图| 欧美手机在线视频| 2019日韩中文字幕mv| 色网站在线看| 久久影院视频免费| 3d精品h动漫啪啪一区二区| 好看的av在线| 91综合视频| 亚洲视频在线观看| 国产精品熟妇一区二区三区四区| 国产成人a视频高清在线观看| 亚洲一区在线观看免费 | 久久动漫网址| 欧美日韩极品在线观看一区| 女人喷潮完整视频| 毛片网站在线看| 最新热久久免费视频| 六月婷婷久久| 日本激情一区二区三区| 九九**精品视频免费播放| 日韩美女av在线免费观看| 日本午夜精品理论片a级app发布| 日韩一区三区| 伊人伊成久久人综合网站| 国产精品成人无码专区| 日韩高清在线观看一区二区| 欧美疯狂性受xxxxx喷水图片| 无遮挡又爽又刺激的视频| 91福利区在线观看| 亚洲成av人片在线观看无码| av 日韩 人妻 黑人 综合 无码| 日本亚洲精品| 国产欧美一区二区在线观看| 欧美h视频在线| 色就是色亚洲色图| 久久蜜桃一区二区| 欧美精品v日韩精品v国产精品| 三级视频在线看| 成人aa视频在线观看| 99视频免费观看| 亚洲精品一区二区三区区别 | 欧美体内谢she精2性欧美| 日韩视频在线视频| 99色在线观看| 日韩欧美国产中文字幕| 免费毛片小视频| 英国三级经典在线观看| 懂色av一区二区三区| 精品中文字幕av| 香蕉视频亚洲一级| 欧美亚洲精品一区| 污污网站在线观看视频| 伊人国产精品| 日韩精品一区国产麻豆| 日本50路肥熟bbw| 日韩激情网站| 国产一区二区三区精品久久久| 亚洲黄色小说视频| 四季av一区二区凹凸精品| 北条麻妃久久精品| 加勒比av在线播放| 亚洲永久网站| 国产日韩欧美日韩大片| 性网爆门事件集合av| 成人动漫一区二区在线| 欧美在线一二三区| 国产在线观看a| 婷婷中文字幕综合| 五月婷婷狠狠操| 麻豆一区在线| 亚洲精品电影在线| 手机毛片在线观看| 欧美二区不卡| 国产福利精品在线| 国产高清精品软件丝瓜软件| 99久久久精品| 一本久久a久久精品vr综合| 性欧美1819sex性高清大胸| 午夜精品久久久久久久99樱桃| 情侣黄网站免费看| 美女国产精品久久久| 亚洲美女性视频| 可以直接看的黄色网址| 男人的天堂亚洲| 96pao国产成视频永久免费| 黄色av网站免费在线观看| 国产欧美一区在线| 亚洲国产精品无码av| 91国内外精品自在线播放| 欧美videos大乳护士334| 成人性生交大片免费看无遮挡aⅴ| 欧美性久久久| 国产精品久久久久99| 你懂的网站在线| 中文字幕一区二区三区视频| 奇米影视亚洲色图| 91成人小视频| 国产亚洲欧洲在线| 日韩欧美亚洲国产| 国产真实精品久久二三区| 免费99视频| 国产乱妇乱子在线播视频播放网站| 在线观看日产精品| 7788色淫网站小说| 女同性一区二区三区人了人一| 国产精品高清在线观看| 亚洲精品免费在线观看视频| 亚洲婷婷在线视频| 无码人妻精品一区二区三区66| 国产精品毛片视频| 欧美猛男性生活免费| 中文字幕一区二区三区波野结 | 色大师av一区二区三区| 国产探花视频在线观看| 欧美日韩aaaaaa| 日韩一级av毛片| 亚洲自啪免费| 国产一区二区三区高清| 青草影视电视剧免费播放在线观看| 欧美日本在线观看| 丁香激情五月少妇| 欧美资源在线| 蜜桃欧美视频| 日韩伦理三区| 亚洲免费av电影| 国产精品久久久免费视频| 国产suv一区二区三区88区| 大桥未久一区二区| 国产麻豆精品| 久久久精品一区二区| 夜夜嗨av禁果av粉嫩avhd| 国产欧美一区二区精品性| 无码日韩人妻精品久久蜜桃| 九一精品国产| 国产成人亚洲综合青青| 免费在线黄色网址| 在线视频欧美区| 人与嘼交av免费| 六月丁香婷婷久久| 中文字幕中文字幕在线中心一区| yy6080久久伦理一区二区| 中文字幕日韩视频| 亚洲一区二区激情| 一区在线播放视频| 操人视频免费看| 国产精品草草| 久久国产精品一区二区三区| 亚洲女同志freevdieo| 精品中文字幕久久久久久| 免费黄色网址在线| 国产日韩欧美不卡| 女同激情久久av久久| 欧美阿v一级看视频| 国产精品视频在线免费观看 | 国产欧美一区二区白浆黑人| 日本精品一区二区三区在线播放| 欧美日韩激情在线| 麻豆视频在线观看| 99国内精品久久| 黄色av免费在线播放| 久久免费av| 91久久大香伊蕉在人线| segui88久久综合9999| 亚洲欧美日韩精品| 亚洲天堂网在线观看视频| 亚洲色图第一区| 99久久免费看精品国产一区| 日韩精品一区第一页| 中文字幕在线亚洲三区| 国产乱人伦丫前精品视频| 日韩av电影在线播放| 毛片av在线| 日韩av一区在线| 中文字幕在线2018| 亚洲一区二区在线视频| 免费观看av网站| 国产伦精品一区二区三区视频青涩| 日韩一级特黄毛片| 国内成人自拍| 国产一区二区三区四区hd| 成人涩涩视频| 国语自产精品视频在线看一大j8| 高h视频在线| 欧美精品一区男女天堂| 在线观看毛片视频| 亚洲超丰满肉感bbw| 亚洲欧美卡通动漫| 91免费视频网址| 波多野吉衣在线视频| 青青草视频一区| 国产免费黄视频| 国内精品亚洲| 中文字幕av导航| 九一国产精品| 精品伦精品一区二区三区视频| 四虎影视成人精品国库在线观看| 51色欧美片视频在线观看| 综合久久2o19| xxxx欧美18另类的高清| 女人偷人在线视频| 精品国产伦一区二区三区免费 | 久久夜夜操妹子| 国产做受高潮69| 成年人黄视频在线观看| 一本色道久久综合狠狠躁篇怎么玩 | 国产主播在线观看| 中文字幕在线免费不卡| www.av天天| 99久久99久久精品国产片果冻| 熟妇无码乱子成人精品| 精品一区二区三区久久久| 成年人网站大全| 亚洲免费婷婷| www婷婷av久久久影片| 91精品蜜臀一区二区三区在线| 日韩免费电影一区二区| 妖精视频一区二区三区| 精品视频一区在线| 国产精品一线| 国产精品日韩高清| 中文字幕一区日韩精品| 亚洲bt天天射| 精品一区二区三区亚洲| 91久久精品美女| 日韩成人在线一区| 国产狼人综合免费视频| 国产69精品久久| 国产精品pans私拍| 色尼玛亚洲综合影院| 国产999精品久久久| 蜜臀国产一区| 国产成人91久久精品| 欧美成人精品一区二区男人小说| 免费视频观看成人| 色偷偷9999www| p色视频免费在线观看| 国产一区二区美女视频| 888av在线| 精品国内自产拍在线观看| 在线免费观看黄色av| www.日韩.com| 在线观看免费视频你懂的| 色综合久久天天综线观看| 97影院秋霞午夜在线观看| 欧美巨大黑人极品精男| caoporn-草棚在线视频最| 97在线视频国产| 日韩大片欧美大片| 国产综合色香蕉精品| 精品一区91| 精品无码久久久久国产| 欧美男gay| 一区二区免费电影| 综合久久十次| 国产免费黄色小视频| 久久久777| 一二三av在线| 波波电影院一区二区三区| 国产美女精品久久| 国产精品色眯眯| 国产成人无码aa精品一区| 亚洲成人免费视频| 波多野结衣啪啪| 欧美二区在线观看| 免费国产羞羞网站视频| 国产亚洲欧美视频| 尤物视频在线看| 日本欧美国产在线| 91精品麻豆| 狠狠色噜噜狠狠狠狠色吗综合| 国产一区二区三区站长工具| 神马午夜伦理影院| 国产韩日精品| 午夜伊人狠狠久久| 久久久美女视频| 色综合天天做天天爱| 一区二区三区免费观看视频| 精品日韩一区二区三区| 国产片在线观看| 色综合男人天堂| 欧美日韩视频网站| 97在线电影| 国产欧美日韩免费观看| 国产内射老熟女aaaa| 日韩中文字幕区一区有砖一区 | 99久久婷婷国产综合精品电影| 蜜桃av乱码一区二区三区| 一二三区精品视频| 亚洲一区中文字幕在线| 亚洲国产欧美精品| a级片国产精品自在拍在线播放| 欧美一区二区影院| 试看120秒一区二区三区| 日韩午夜视频在线观看| 国产精品观看| 福利片一区二区三区| 91女厕偷拍女厕偷拍高清| 久久久一二三区| 7777精品伊人久久久大香线蕉经典版下载 | 波多野结衣中文在线| 国产中文字幕日韩| 亚洲第一福利专区| 国产美女在线一区| 国产传媒欧美日韩成人| 九九九视频在线观看| 精品福利在线观看| 亚洲精品一区二区三区新线路 | 91久热免费在线视频| 日韩高清在线免费观看| 9色porny| 国产精品自拍毛片| 欧美xxxooo| 欧美亚洲综合一区| 国产美女视频一区二区三区| 国外成人免费在线播放| 国产劲爆久久| www.国产亚洲| 国产综合久久久久影院| 国产精品av久久久久久无| 色就色 综合激情| 日本在线视频1区| 欧美一级片在线播放| 久久动漫网址| 日本中文字幕网址| 成人aa视频在线观看| 日本最新中文字幕| 亚洲福利影片在线| 91破解版在线观看| 久久国产主播精品| 国产亚洲福利| 大地资源二中文在线影视观看| 亚洲成人一区二区在线观看| 少妇荡乳情欲办公室456视频| 久久久久久久亚洲精品| 91久久精品无嫩草影院| 日韩精品一区二区在线视频| 国产精品一区免费在线观看| 波多野结衣不卡视频| 日韩一级视频免费观看在线| dj大片免费在线观看| 91亚色免费| 99精品福利视频| 日本丰满少妇裸体自慰| 日韩欧美a级成人黄色| 国产一区二区三区不卡在线| 国产精品久久久久秋霞鲁丝| 成人毛片免费看| 日本特黄在线观看| 一区二区高清免费观看影视大全| 成人午夜免费福利| 91精品国产一区| 美女少妇全过程你懂的久久| 亚欧在线免费观看| |精品福利一区二区三区| 精品国产av鲁一鲁一区| 久久久久久亚洲精品不卡| 欧美精品中文| 久久久久久久久久久久91| 亚洲欧洲中文日韩久久av乱码| 成人精品在线播放| 国产91在线播放精品91| 欧美成人milf| 亚洲一区二区在线免费| 91福利社在线观看| a视频在线免费看| 精品国产一区二区三区四区vr | 偷拍夫妻性生活| 欧美人妖巨大在线| 久久久123| 色一情一乱一伦一区二区三欧美| 久久国产福利国产秒拍| 欧美成人片在线观看| 九九视频在线观看| 一本大道久久a久久精品综合| 国产高清视频免费最新在线| 91天堂在线观看| 国产午夜精品一区二区三区欧美 | 国产99久久| 国产黑丝在线视频| 色欧美日韩亚洲| 日本孕妇大胆孕交无码| 日本一区二区精品视频| 国产激情一区二区三区桃花岛亚洲| www.国产高清| 麻豆一区二区在线观看| 亚洲人成伊人成综合图片| 欧美又黄又嫩大片a级| 日韩欧美在线网址| 污污影院在线观看|