有哪些分散式資料庫書籍或論文比較好?

比如講到 分散式事務、Sharding、Paxos、等等等等等等


被郭同jet邀請,拋磚引玉吧。

@嚴林 同學給過一個非常贊的論文列表,先分享出來。分散式系統領域有哪些經典論文? - 分散式

再補充一些

1.raft

有會議論文,也有博士論文,解決多機一致性的協議,比paxos更貼近實現,更容易理解,已經有多個開源實現,這篇論文的亮點是,提出了一個不停服務的情況下,解決選舉組成員變更的方案,值得細讀。有意思的是,曾經有幸當面請教過Lamport大神(paxos作者)怎麼看待raft,大神說他覺得raft就是paxos的一種實現。

2.multi-paxos

paxos演算法需要通過prepare 和accept的四次網路通信才能形成一項決議,而且不限制proposer的數量,非常容易發生衝突,實際工程中,基本上沒有按照paxos照搬實現的。簡單講,multi-poxos是一次prepare了一個區間的決議,獲得批准後,後面只需要逐個發送accept請求即可,大大減少了網路通信。在實際實現中,通常還要選出一個leader,來消除prepare的衝突。這個論文好像是中國人寫的。。。

3.percolator

Google設計的基於BIGTABLE單行事務構建的分散式事務層,對兩階段提交講的比較清楚。

4.Megastore

Google在bigtable和spanner之間的過度系統,應該是最早的使用paxos保證多機一致性的,但在spanner論文中提到,megastore性能實在不行,現在據一個googol基礎架構部門的工程師講,spanner在谷歌內部要一統江湖了,200多人的團隊。

5《Consensus on Transaction Commit》

Jim Gray Leslie Lamport 兩位大神合寫的paxos提交演算法,比較抽象,核心思想是單個協調者的兩階段提交演算法是paxos提交中選舉成員組為1的特例。spanner中把協調者狀態通過paxos複製到多個副本隱隱有這篇論文的理論影子。對這篇論文的唯一印象就是經典的兩階段提交演算法可以看做是Paxos提交演算法的一個特例。

說點其他的心得體會吧:

對於大部分人來說,很多分散式的理論和論文只看資料是基本沒有收穫的,所謂知行合一,學習需要和實踐相結合

在學校期間,看過GFS/BIGTABLE至少三四遍,其實完全沒有理解系統精要。

入職阿里oceanbase團隊後,會要求再讀google三篇論文,串講並回答一系列問題,比如關於BigTable:

1. GFS可能出現重複記錄或者padding,Bigtable如何處理這種情況使得對外提供強一致性模型?

2. 為什麼Bigtable設計成Root、Meta、User三級結構,而不是兩級或者四級結構?

3. 讀取某一行用戶數據,最多需要幾次請求?分別是什麼?

4. 如何保證同一個tablet不會被多台機器同時服務?

5. Tablet在內存中的數據結構如何設計?

6. 如何設計SSTable的存儲格式?

7. minor、merging、major這三種compaction有什麼區別?

8. Tablet Server的緩存如何實現?

9. 如果tablet出現故障,需要將服務遷移到其它機器,這個過程需要排序操作日誌。如何實現?

10. 如何使得tablet遷移過程停服務時間盡量短?

11. tablet分裂的流程是怎樣的?

12. tablet合併的流程是怎樣的?

回答了這些問題,感覺才真正理解了分散式設計的難度。這之後以為自己理解的差不多了,可是最近再參與設計一個分散式存儲項目,在做系統取捨,解決「為什麼要這樣做」這個層面的問題時,又重新去思考之前看過的系統和論文的方案。

相比於機器學習(完全小白的YY),分散式系統應該是一個理論和實踐並重的方向,實踐非常非常的重要,覺得自己很幸運,在OceanBase團隊向一些大牛學習了兩年,並且參與了OB從0.5架構到1.0架構的設計和實現整個過程,負責了資料庫ReDo日誌使用multi-paxos在多機同步模塊設計和實現,在這個實踐的過程中,收益良多。

初學者,希望幫到當初和我一樣迷茫的小白,各位前輩看到說的不對的地方,歡迎批評指正,非常感謝~


來看看rabbitmq 開發者之一Alvaro Videla去年寫的一篇博客What We Talk About When We Talk About Distributed Systems. 文章探討了分散式系統中一些最基本而重要的主題,像時鐘同步,容錯,leader選舉,一致性等等。文後列出了涉及這各個主題的23篇論文,還推薦了兩本書:

Distributed Algorithms

Introduction to Reliable and Secure Distributed Programming

這兩本書看上去不像一些經典教材那麼有名,偏實戰風格。考慮到Alvaro Videla的黑客范,這一點不難理解。剛看到他的玩票項目gifsocket時,真是驚呆了。


我推書吧

Distributed Algorithms An Intuitive Approach.

一個小節的內容就一篇論文至少。作者概括了下演算法細節和給了相關舉例。有人評價很高,我評價一般,結合具體論文看會效果好,不過略吃力,然而直接看也略吃力,因為作者太高度概括,不好理解,沒有大部分原文教材那種怕你不懂的啰嗦的特點。所以書也就挺薄的,才200多頁而已。

Distributed Systems concepts and design.

基本上分散式系統的各基本細節都涵蓋了。系統級別書籍,略硬,算厚。這本我也還在磕。

Introduction to Distributed Algorithms second edition.

這本是祖師爺級別的經典教材。不過我還沒讀過,評價略高,某些美帝高校課堂參考教材就是這本。沒有讀是因為網上的pdf都沒有索引,所以先讀上一本了。

Distributed Computing Principle, Algorithms, and Systems.

第一本算師父帶入門,對分散式演算法有大致框架和了解的話。這本可以有助於理解得更深。所以建議先讀第一本,再這本。

Principles of Distributed Database Systems.

這本是我唯一在America Amazon找到的關於分散式資料庫並且評價較高的教材。不過這本還沒排上讓我讀的行程,不知內容如何。所以僅供參考。

如果想找某些領域的好書,上America Amazon搜一下關鍵字。

如果想了解在應用級別的大型軟體系統,請找相應論文,或者去該軟體系統的官網查詢。

最後一個經典方法: Google下關鍵字。

謝邀。

如此。


這個領域目前可看的讀物有兩種:

一種是過於重視理論,上來拋出一系列公式分析方法,沒有太多循序漸進的轉圜,這個路線的,如果要相對來說從零開始學習,建議先看資料庫系統實現,特別注意研究事務,執行計劃生成,以及後面分散式事務三章。再看分散式資料庫概論這本書。

另一種是實踐得出的真知,但是特點是惜字如金,如果是論文的話,甚至沒有代碼,細節。如果不是長期接觸這些領域,要建立全局概念不易。推薦閱讀google的幾篇論文,比如spanner,paxos ,看不懂的話可以看下 raft這篇論文和etcd源碼,相互參考。


謝邀,贊最多的答案說了一些,很不錯,我談談自己的看法。

大數據系統絕對不是幾篇論文就能夠深入的,它首先是一個綜合性的系統,裡面涉及到了形形色色各個方面的知識,實際上只要在其中幾個領域能達到一定建樹就已經很了不起了,題主的題目還是大了點。

1.基礎。

《分散式系統:概念與設計》

《大數據日知錄》

首先,我認為要對整個系統有個宏觀上的認識,為了達到這個目的可以嘗試一些雖然不是很深入,但足夠全面的資料書籍。這類書籍我推薦兩本我閱讀過的,一本是機械工業出版社的《分散式系統概念與設計》,是個大部頭,有些理論不是最新的,但是勝在夠全面,可以一個主題一個主題地大概看一下有個概念。另一本是《大數據日知錄》,這本書我個人是十分欣賞的,偏重於實踐卻又不

僅僅是一本說明書,是結合一些開源框架的具體實現來說明白原理。

2.存儲/分散式文件系統。

《大話存儲II》

《The Google File System》

《Ceph:AScalable,High-Performance Distributed File System》

glusterfs相關文檔

hdfs相關文檔

存儲系統一直是個大東西,每個分散式系統都必不可少的。《大話存儲II》是講存儲系統基礎的,寫得很不錯,但是偏硬體一點,可以閱讀以下有個大概的認識,比如RAID的概念啦,SAN/NAS的概念啦,基本的存儲優化知識啦,這些都很好,作者張冬是我一直很欣賞的前輩。GFS是谷歌分散式文件系統的論文,它的重要性就不用多說了。而Ceph或者glusterfs的相關文檔可以根據需要稍微看一下,用得比較多的hdfs應該重點看一下。

3.計算引擎

《google mapreduce》(全名記不全了)

Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》(Spark 基礎概念論文)

《Spark:Cluster Computing with Working Sets》 一樣是spark的基礎論文

http://spark.apache.org

storm相關中文資料

《七周七並發模型》

《並行演算法設計與性能優化》

《Pregel:A system for large scale graph processing》

google dremel

google caffeine

第一篇鼎鼎大名的mr思想介紹,毫無疑問。第二篇論文是Spark最基礎的文檔,介紹了一下RDD的基本思路順帶著打了個spark的基礎。然而spark令人比較爽的一點是官方文檔相當全面,而且是最新的,直接進官網去了解一下最好。storm本身比較簡單,看一些相關中文資料了解一下也就可以了。這三個是目前最火的開源計算引擎了。《七周七並發模型》一書能幫助你從底層理解計算框架的設計依據,而且很薄,可以一看。最後一本談到了現在比較火爆的異構計算和一些優化方法,有興趣的話可以圍觀一下。最後是號稱新谷歌三駕馬車的三項,其中pregel我拜讀過,從而了解了什麼是圖計算,但是還是建議看看graphlab和graphx的實現。

4.分散式資料庫/搜索引擎

《Hbase權威指南》

《solr in action》

《lucene in action》

《Redis設計與實現》

ElasticSearch相關文檔。

這個領域我個人實踐很少,而且相關技術非常豐富,我只是隨便列舉了幾本我自己閱讀過或者同事比較推崇的,在閱讀時應當更加註重設計理念而非操作配置。

5.Leslie Lamport相關論文

老爺子牛逼得一塌糊塗,包括paxos、distributed snapshot、lamport clock等這些概念都會很有幫助,所以單獨拎出來提一下,順便獻上我的膝蓋...

6.機器學習/數據分析

這個領域論文滿天飄,但如果你是像我這樣不是把精力放在演算法上而是在系統平台上的人來說,推薦一些比較」功利的「。

《The LION Way- Machine Learning plus Intelligent Optimization》,大神推薦的,薄且易懂。

《機器學習》,機械工業出版社的東西,不多說,基礎讀物。

《數據挖掘導論》,不多說,基礎讀物,相關專業的教材。

《Machine Learning with Spark》,以spark為基礎實踐機器學習的教材,可操作性強。

《Advanced Analytics with Spark》同上。

《機器學習實戰》基於例子實現機器學習,python為主。

《集體智慧編程》重點推薦,通俗易懂看得爽得飛起。

7.其他好玩的

《BlinkDB: Queries with Bounded Errors and Bounded Response Times on Very Large Data》開拓視野的好東西,讀完以後會有種被他們活生生機智死的感覺。

《圖解機器學習》,日本人的作品,剛買到翻開一看狗眼亮瞎,各種花式插圖漫畫。

《計算廣告》,不多說,正在拜讀,漲姿勢。

《mahout in action》我第一個分散式機器學習演算法就是按著書上說的實現的,雖然有點老……

《深入理解java虛擬機》,必備手冊,日常工作系統調優指南。

8.虛擬化

....寫不動了占坑以後補上。

9.調度系統

....寫不動了占坑以後補上。

10.運維與系統管理

....寫不動了占坑以後補上。

11.架構設計

....寫不動了占坑以後補上。

12.網路

....寫不動了占坑以後補上。

13.消息隊列

....寫不動了占坑以後補上。

14.編程語言與編程技巧

....寫不動了占坑以後補上。

15.數據倉庫

....寫不動了占坑以後補上。


推薦看一下這個視頻:

【阿里雲大學課程】MySQL大牛丁奇:分散式資料庫技術與實現 - 知乎專欄


分散式資料庫系統原理 PDDS


推薦閱讀:

MongoDB和MySQL如何搭配使用?
知乎為什麼不使用 NoSQL 資料庫?
Cassandra現在的應用前景怎麼樣?
如何評價InfoQ文章《別再用MongoDB了!》?
c++ 實時消息系統什麼in-process資料庫比較好? leveldb、LMDB 還是sqlite?

TAG:資料庫 | 分散式計算 | NoSQL |