最近在抓取一些社交網(wǎng)站的數(shù)據(jù),抓下來的數(shù)據(jù)用MySql存儲。問我為什么用MySql,那自然是入門簡單,并且我當時只熟悉MySql??墒?,隨著數(shù)據(jù)量越來越大,有一個問題始終困擾著我,那就是社交關(guān)系的存儲。
就以新浪微博舉例,一個大V少則十幾萬,多則幾千萬的粉絲,這些關(guān)注關(guān)系要怎么存呢?在MySql中,一條關(guān)注關(guān)系(大V id,大V的一個粉絲 id)存為一條數(shù)據(jù),那么當用戶數(shù)量上來的時候,關(guān)注關(guān)系輕松破億,破十億,甚至上百億,并且為了保證每條數(shù)據(jù)的唯一性,還需要設(shè)置聯(lián)合索引,MySql就有些力不從心了。那么有人要說了:分表呀。嗯,沒錯,分表的確可以在插入端和讀取端提升一些速度。比如我們可以根據(jù)id哈希到100張表中。查詢一個用戶有哪些粉絲是快了,但是查詢一個用戶關(guān)注了哪些人時仍然需要遍歷全表。好,這時候我們還可以以(id,其關(guān)注的一個用戶的id)再構(gòu)造100張表,于是兩種查詢都快了。然而,后面那100張表是冗余數(shù)據(jù),看著就不爽...并且生成一張子圖也不方便(需要多次寫SQL查表)。
于是,在搜索更好的方案時無意間發(fā)現(xiàn)了圖形數(shù)據(jù)庫,查閱一番資料后感覺確實是個不錯的選擇,畢竟業(yè)界的一些大佬,如twitter,Adobe等也在用。
那么,什么是圖形數(shù)據(jù)庫呢?在這里我貼上較為官方的定義:a database that uses graph structures for semantic queries with nodes, edges and properties to represent and store data – independent of the way the data is stored internally. It’s really the model and the implemented algorithms that matter.注意,這里只是說數(shù)據(jù)模型是圖結(jié)構(gòu)的,沒有說數(shù)據(jù)的存儲也一定要是圖結(jié)構(gòu)的。其數(shù)據(jù)模型如下圖
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26