国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

帖子中心,1億數據,架構如何設計?

開發 開發工具 架構
隨著數據量的逐步增大,并發量的逐步增大,帖子中心這種“1對多”業務,架構應該如何設計,有哪些因素需要考慮,是本文將要系統性討論的問題。

帖子中心,是互聯網業務中,一類典型的“1對多”業務,即:一個用戶能發布多個帖子,一個帖子只有一個發布者。

隨著數據量的逐步增大,并發量的逐步增大,帖子中心這種“1對多”業務,架構應該如何設計,有哪些因素需要考慮,是本文將要系統性討論的問題。

[[335476]]

什么是x對x?

所謂的“1對1”,“1對多”,“多對多”,來自數據庫設計中的“實體-關系”ER模型,用來描述實體之間的映射關系。

什么是“1對1”業務?

用戶中心,一個用戶只有一個登錄名,一個登錄名只對應一個用戶,這是典型的1對1業務。

什么是“1對多”業務?

帖子中心,一個用戶可以發多條微博,一條微博只有一個發送者,這是典型的1對多業務。

什么是“多對多”業務?

feed關注,一個用戶可以關注多個用戶,一個用戶也可以被多個用戶關注,這是典型的多對多業務。

帖子中心是個什么業務,有什么典型的業務需求?

帖子中心是一個典型的1對多業務。

一個用戶可以發布多個帖子,一個帖子只對應一個發布者。

任何脫離業務的架構設計都是耍流氓,先來看看帖子中心對應的業務需求。

帖子中心,是一個提供帖子發布,修改,刪除,查看,搜索的服務。

帖子中心,有什么寫操作?

  • 發布(insert)帖子;
  • 修改(update)帖子;
  • 刪除(delete)帖子;

帖子中心,有什么讀操作?

  • 通過tid查詢(select)帖子實體,單行查詢;
  • 通過uid查詢(select)用戶發布過的帖子,列表查詢;
  • 帖子檢索(search),例如通過時間、標題、內容搜索符合條件的帖子;

在數據量較大,并發量較大的時候,架構如何設計?

典型的,通常通過元數據與索引數據分離的架構設計方法。

架構中的幾個關鍵點,如上圖所示:

  • tiezi-center:帖子服務;
  • tiezi-db:提供元數據存儲;
  • tiezi-search:帖子搜索服務;
  • tiezi-index:提供索引數據存儲;
  • MQ:tiezi-center與tiezi-search通訊媒介,一般不直接使用RPC調用,而是通過MQ對兩個子系統解耦。

此時,讀需求怎么滿足?

tiezi-center和tiezi-search分別滿足兩類不同的讀需求。

如上圖所示:

  • tid和uid上的查詢需求,可以由tiezi-center從元數據讀取并返回;
  • 其他類檢索需求,可以由tiezi-search從索引數據檢索并返回;

寫需求怎么辦呢?

至于寫需求,如上圖所示:

  • 增加,修改,刪除的操作都會從tiezi-center發起;
  • tiezi-center修改元數據;
  • tiezi-center將信息修改通知發送給MQ;
  • tiezi-search從MQ接受修改信息;
  • tiezi-search修改索引數據;

tiezi-search,搜索架構不是本文的重點,不再展開,后文將重點描述帖子中心元數據水平切分設計。

帖子中心,數據庫元數據如何設計?

帖子中心業務,很容易了解到,其核心元數據為:

  1. t_tiezi(tid, uid, time, title, content, …); 

其中:

  • tid為帖子ID,主鍵;
  • uid為用戶ID,發帖人;
  • time, title, content …等為帖子屬性;

數據庫設計上,在業務初期,單庫就能滿足元數據存儲要求。

  • tiezi-center:帖子中心服務,對調用者提供友好的RPC接口;
  • tiezi-db:對帖子數據進行存儲;

在相關字段上建立索引,就能滿足相關業務需求。

  • 帖子記錄查詢,通過tid查詢,約占讀請求量90%;
    1. select * from t_tiezi where tid=$tid 
  • 帖子列表查詢,通過uid查詢其發布的所有帖子,約占讀請求量10%;
    1. select * from t_tiezi where uid=$uid 

隨著數據量越來越大,如何進行水平切分,對存儲容量進行線性擴展呢?

方案一:帖子ID切分法

既然是帖子中心,并且帖子記錄查詢量占了總請求的90%,很容易想到通過tid字段取模來進行水平切分。

這個方法簡單直接,優點:

  • 100%寫請求可以直接定位到庫;
  • 90%的讀請求可以直接定位到庫;

缺點也很明顯:

一個用戶發布的所有帖子可能會落到不同的庫上,10%的請求通過uid來查詢會比較麻煩;

如上圖,一個uid訪問需要遍歷所有庫。

有沒有一種切分方法,確保同一個用戶發布的所有帖子都落在同一個庫上,而在查詢一個用戶發布的所有帖子時,不需要去遍歷所有的庫呢?

方案二:用戶ID切分法

使用uid來分庫可以解決這個問題。

新的問題出現了:如果使用uid來分庫,確保了一個用戶的帖子數據落在同一個庫上,那通過tid來查詢,就不知道這個帖子落在哪個庫上了,豈不是還需要遍歷全庫,需要怎么優化呢?

tid的查詢是單行記錄查詢,只要在數據庫(或者緩存)記錄tid到uid的映射關系,就能解決這個問題。

新增一個索引庫:

  1. t_mapping(tid, uid); 
  • 這個庫只有兩列,可以承載很多數據;
  • 即使數據量過大,索引庫可以利用tid水平切分;
  • 這類kv形式的索引結構,可以很好的利用cache優化查詢性能;
  • 一旦帖子發布,tid和uid的映射關系就不會發生變化,cache的命中率會非常高;

使用uid分庫,并增加索引庫記錄tid到uid的映射關系之后,每當有uid上的查詢,可以通過uid直接定位到庫。

每當有tid上的查詢,可以先查mapping表得到uid,再通過uid定位到庫。

這個方法的優點是:

  • 一個用戶發布的所以帖子落在同一個庫上;
  • 10%的請求過過uid來查詢列表,可以直接定位到庫;
  • 索引表cache命中率非常高,因為tid與uid的映射關系不會變;

缺點也很明顯:

  • 90%的tid請求,以及100%的修改請求,不能直接定位到庫,需要先進行一次索引表的查詢,當然這個查詢非常塊,通常在5ms內可以返回;
  • 數據插入時需要操作元數據與索引表,可能引發潛在的一致性問題;

有沒有一種方法,既能夠通過uid定位到庫,又不需要建立索引表來進行二次查詢呢,使得uid和tid都能夠直接一次命中的方案呢?

方案三:基因法

(1) 什么是分庫基因?

通過uid分庫,假設分為16個庫,采用uid%16的方式來進行數據庫路由,這里的uid%16,其本質是uid的最后4個bit決定這行數據落在哪個庫上,這4個bit,就是分庫基因。

(2) 什么是基因法分庫?

在“1對多”的業務場景,使用“1”分庫,在“多”的數據id生成時,id末端加入分庫基因,就能同時滿足“1”和“多”的分庫查詢需求。

如上圖所示,uid=666的用戶發布了一條帖子(666的二進制表示為:1010011010):

  • 使用uid%16分庫,決定這行數據要插入到哪個庫中;
  • 分庫基因是uid的最后4個bit,即1010;
  • 在生成tid時,先使用一種分布式ID生成算法生成前60bit(上圖中綠色部分);
  • 將分庫基因加入到tid的最后4個bit(上圖中粉色部分);
  • 拼裝成最終的64bit帖子tid(上圖中藍色部分);

這般,保證了同一個用戶發布的所有帖子的tid,都落在同一個庫上,tid的最后4個bit都相同,于是:

  • 通過uid%16能夠定位到庫;
  • 通過tid%16也能定位到庫;

有人要問了,同一個uid發布的tid落在同一個庫上,會不會出現數據不均衡?

只要uid是均衡的,每個用戶發布的平均帖子數是均衡的,每個庫的數據就是均衡的。

又有人要問了,最開始分16庫,分庫基因是4bit,未來要擴充成32庫,分庫基因變成了5bit,那怎么辦?

需要提前做好容量預估,例如事先規劃好5年內數據增長256庫足夠,就提前預留8bit基因。

總結

將以“帖子中心”為典型的“1對多”類業務,在架構上,采用元數據與索引數據分離的架構設計方法:

  • 帖子服務,元數據滿足uid和tid的查詢需求;
  • 搜索服務,索引數據滿足復雜搜索尋求;

對于元數據的存儲,在數據量較大的情況下,有三種常見的切分方法:

  • tid切分法,按照tid分庫,同一個用戶發布的帖子落在不同的庫上,通過uid來查詢要遍歷所有庫;
  • uid切分法,按照uid分庫,同一個用戶發布的帖子落在同一個庫上,需要通過索引表或者緩存來記錄tid與uid的映射關系,通過tid來查詢時,先查到uid,再通過uid定位庫;
  • 基因法,按照uid分庫,在生成tid里加入uid上的分庫基因,保證通過uid和tid都能直接定位到庫;

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

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

 

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

2020-09-02 07:32:19

數據架構訂單中心架構

2017-01-19 18:20:59

數據架構數據庫

2019-07-29 14:40:26

架構存儲檢索

2019-05-05 09:28:59

架構數據查詢

2023-08-08 14:49:12

2011-07-05 10:26:11

Zynga社交游戲數據中心

2017-09-02 07:22:50

數據中心機房服務器

2024-01-30 00:42:29

數據中心IT基礎設施

2019-08-20 00:39:28

數據存儲層冗余

2017-12-31 08:43:19

數據中心網絡架構AI

2025-09-18 09:43:43

2023-10-10 10:19:10

AI數據中心

2016-12-05 14:07:42

數據中心網絡架構大數據

2021-03-24 14:13:51

數據分析架構大數據

2025-04-14 08:30:00

架構分庫查詢

2019-01-16 14:33:23

數據中心冗余云中斷

2024-03-11 16:01:29

BitMap數據去重開發

2017-12-25 13:49:26

互聯網

2020-01-17 11:00:23

流量系統架構

2024-08-16 14:01:00

點贊
收藏

51CTO技術棧公眾號

成人影欧美片| 成人综合视频在线| 91精品美女在线| 日韩69视频在线观看| 成人区精品一区二区| 亚洲午夜在线观看| 国产中文字幕第一页| 欧美韩国日本在线观看| 欧美日本一道本| 免费观看国产精品视频| 亚洲成人av| www.久久色.com| 在线色视频网| 国产高清亚洲一区| 91精品久久久久久久久久久久久| 污的网站在线观看| 97se亚洲国产综合自在线观| 国产精品美女呻吟| 香蕉一区二区| 91精品国产欧美一区二区18 | 99久久国产综合精品女不卡| 日本国产一区二区三区| 最新av网站在线观看| 久久伊99综合婷婷久久伊| 国产精品免费在线播放| 国产精品伦一区二区| 欧美日韩激情视频8区| 少妇高潮喷水在线观看| 在线电影一区| 欧美亚洲一级片| 免费视频成人| 亚洲欧美国产视频| 国产区美女在线| 欧美日韩激情一区二区三区| 手机在线视频你懂的| 国产一级成人av| 欧美日韩国产另类一区| 国产午夜福利在线播放| 国产精品视频3p| 欧美一区二区三区在线| 在线视频日韩一区 | 妺妺窝人体色www在线小说| 亚洲国产日韩欧美在线| 亚洲色图25p| 加勒比一区二区三区在线| 成人永久免费视频| 91九色视频导航| 精品一区二区三区四区五区| 精品视频一区二区不卡| 青青在线免费观看视频| 免费视频一区| 国产精品网红直播| 日韩漫画puputoon| 欧美色图在线视频| 日本久久精品一区二区| 美国一区二区三区在线播放| 国产精品一区二区久久久久| 欧美成人xxxx| 亚洲а∨天堂久久精品喷水| ga∨成人网| 久久先锋影音av鲁色资源网| 日本视频一区在线观看| 四虎国产精品免费观看| 美女精品久久久| 午夜av不卡| 亚洲成av人乱码色午夜| 韩国中文免费在线视频| 一区二区三区四区高清精品免费观看| 黄色免费视频大全| 极品少妇xxxx偷拍精品少妇| 鬼打鬼之黄金道士1992林正英| 最新亚洲精品| 97在线视频国产| 欧美黄色一级| 久久久精品国产亚洲| 日韩在线免费| 亚洲电影免费观看| h片精品在线观看| 日韩亚洲欧美在线观看| 思思99re6国产在线播放| 色婷婷av一区二区三区软件| 激情四房婷婷| 一区二区三区精品久久久| 日本特黄a级片| 99re热视频精品| 毛片在线播放视频| 不卡的av网站| 免费高清在线观看免费| 成人在线视频一区| 国产一区二区视频免费在线观看| 国产传媒欧美日韩成人| 五月天综合婷婷| 国产一区在线精品| 亚洲精品蜜桃久久久久久| 国产伦理精品不卡| 国产毛片视频网站| 国产亚洲福利社区一区| 免费男女羞羞的视频网站中文版| 亚洲色图在线视频| 情趣网站在线观看| 在线亚洲一区观看| 肉肉视频在线观看| 亚洲男女自偷自拍图片另类| 欧美成人aaa| 国产精品高潮在线| av不卡免费看| 黄色片免费在线观看视频| 国产三级欧美三级日产三级99| 国产精品㊣新片速递bt| 日韩欧美精品网址| 女人让男人操自己视频在线观看 | 日韩欧美在线播放| 成人在线播放免费观看| 色噜噜亚洲精品中文字幕| 亚洲区小说区| 欧美精品v日韩精品v国产精品| 国产成人精品免费一区二区| 久久这里只精品| 欧美日本一区二区在线观看| 国产精品久久久久久妇女| 全亚洲最色的网站在线观看| 国产精品社区| 久草在在线视频| 欧洲一区二区三区在线| 欧美xx视频| 国产欧美一区二区三区四区| 久久国产日韩| 国产精品三级a三级三级午夜 | 国产91精品久久久| 久久精品综合| www成人免费观看网站| 精品视频资源站| 亚洲天堂av资源在线观看| 久久av二区| 亚洲色图第一区| 自由日本语热亚洲人| 92福利视频午夜1000合集在线观看| 成人永久看片免费视频天堂| 国产主播色在线| 在线看日韩欧美| 伊人久久大香线蕉av超碰演员| 亚洲中文字幕久久精品无码喷水 | 视频一区日韩精品| 日韩欧美精品一区二区三区经典| 悠悠色在线精品| 欧美一区 二区 三区| 国产伦精品一区二区三| 1024国产精品| 成人在线免费av| 9l视频自拍9l视频自拍| 在线亚洲一区二区| 精品成av人一区二区三区| 欧美三级在线观看视频| 精品av久久707| 亚洲高清资源| 欧美成人明星100排名| 欧美精品在线网站| 国产一区二区0| www.51av欧美视频| 99免费在线视频观看| 天天av天天翘天天综合网色鬼国产| 亚洲一区二区免费在线观看| 男人添女人下部视频免费| 亚洲精品福利在线| 久久国产免费| 成人影院在线观看| 欧美精品尤物在线| 欧美一区中文字幕| 久久久精品五月天| 色呦呦在线免费观看| 日韩高清专区| 欧美videos大乳护士334| 亚洲一区二区三区高清不卡| 福利在线观看| 国产在线一区二区三区四区| 午夜视黄欧洲亚洲| 欧美激情四色| av黄色在线观看| 三区精品视频观看| 亚洲网在线观看| 成人一区二区在线观看| 亚洲黄色网址| 日韩欧美视频网站| 欧美成人激情视频免费观看| 91视频精品在这里| 久操成人av| 精品视频二区| 国产尤物91| 国产视频在线一区二区| 久久综合99re88久久爱| 亚洲精品推荐| 国产51人人成人人人人爽色哟哟| 精品高清视频| 亚洲男女自偷自拍图片另类| 91免费观看在线| 欧美日韩激情| 精产国品自在线www| 777精品久无码人妻蜜桃| 日韩免费av一区二区| 欧美片在线播放|