![]() ![]() |
Cassandra權(quán)威指南 ![]()
本書(shū)共分為十四章,內(nèi)容包括:超越關(guān)系型數(shù)據(jù)庫(kù),Cassandra概述,安裝Cassandra,Cassandra查詢(xún)語(yǔ)言,數(shù)據(jù)建模,Cassandra架構(gòu),配置Cassandra,客戶(hù)端,讀寫(xiě)數(shù)據(jù),監(jiān)控,維護(hù),性能調(diào)優(yōu),安全,部署和集成。
為什么選擇Apache Cassandra? Apache Cassandra是一個(gè)免費(fèi)、開(kāi)源的分布式數(shù)據(jù)存儲(chǔ)系統(tǒng),與關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(relational database management systems,RDBMS)截然不同。Cassandra最初是在2009年1月作為Apache的一個(gè)孵化器項(xiàng)目啟動(dòng)的。不久,以Apache Cassandra項(xiàng)目主席Jonathan Ellis為首的提交者發(fā)布了Cassandra 0.3,并在此之后穩(wěn)定不斷地發(fā)布新的小版本。Cassandra已經(jīng)被Web領(lǐng)域的眾多巨頭用于生產(chǎn)環(huán)境,包括Facebook、Twitter和Netflix。Cassandra之所以越來(lái)越受到歡迎,很大程度上是因?yàn)樗峁┑某錾募夹g(shù)特性。它具有持久性、無(wú)縫可擴(kuò)展性,以及可調(diào)一致性,可以非?斓貓(zhí)行寫(xiě)操作,可以存儲(chǔ)數(shù)百TB的數(shù)據(jù),而且是去中心化的和對(duì)稱(chēng)的,所以不存在單點(diǎn)失效問(wèn)題。此外,它還是高度可用的,提供了一個(gè)基于Cassandra查詢(xún)語(yǔ)言(Cassandra Query Language,CQL)的數(shù)據(jù)模型。 本書(shū)的讀者對(duì)象 這本書(shū)適用各類(lèi)讀者,對(duì)以下讀者會(huì)非常有用。 ? 大規(guī)模、高容量應(yīng)用(比如Web 2.0社交應(yīng)用或電子商務(wù)網(wǎng)站)的開(kāi)發(fā)人員。 ? 應(yīng)用架構(gòu)師或數(shù)據(jù)架構(gòu)師,需要了解有哪些高性能、去中心化、彈性數(shù)據(jù)庫(kù)選擇。 ? 目前使用標(biāo)準(zhǔn)關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)庫(kù)管理員或開(kāi)發(fā)人員,需要了解如何實(shí)現(xiàn)容錯(cuò)且最終一致的數(shù)據(jù)庫(kù)。 ? 希望了解Cassandra及相關(guān)列式數(shù)據(jù)庫(kù)的優(yōu)勢(shì)(和不足)的管理者,來(lái)幫助做出有關(guān)技術(shù)戰(zhàn)略的決策。 ? 正在設(shè)計(jì)Cassandra或其他非關(guān)系型數(shù)據(jù)庫(kù)相關(guān)項(xiàng)目的學(xué)生、分析師或研究人員。 這本書(shū)是一本技術(shù)指南。在很多方面,Cassandra代表了一種考慮數(shù)據(jù)的新思。過(guò)去15~20年間獲得專(zhuān)業(yè)技能的很多開(kāi)發(fā)人員非常精通用純粹的關(guān)系或面向?qū)ο蠓绞絹?lái)考慮數(shù)據(jù)。Cassandra的數(shù)據(jù)模型則完全不同,開(kāi)始時(shí)可能很難理解,特別是有些人已經(jīng)對(duì)數(shù)據(jù)庫(kù)是什么(以及應(yīng)該是什么)有了先入為主的想法,尤其他們可能難以接受。 使用Cassandra并不意味著你必須是一名Java開(kāi)發(fā)人員。不過(guò),Cassandra是用Java寫(xiě)的,所以如果要深入分析源代碼,扎實(shí)地理解Java非常重要。雖然并不嚴(yán)格要求懂Java,但這有助于你更好地理解異常、了解如何構(gòu)建源代碼,以及如何使用一些流行的客戶(hù)端。本書(shū)中的很多例子都是用Java寫(xiě)的。不過(guò),根據(jù)訪問(wèn)Cassandra所用的接口,完全可以采用多種語(yǔ)言來(lái)使用Cassandra,包括C#、Python、node.js、PHP和Ruby。 最后,假設(shè)讀者已經(jīng)了解Web是如何工作的,能夠使用集成開(kāi)發(fā)環(huán)境(IDE),并對(duì)數(shù)據(jù)驅(qū)動(dòng)應(yīng)用的典型問(wèn)題有所了解。你可能是一個(gè)經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員或管理員,不過(guò)有時(shí)會(huì)遇到Cassandra世界里使用的一些不太熟悉的工具。比如Cassandra使用Apache Ant構(gòu)建,另外可以通過(guò)Git獲得Cassandra源代碼。有時(shí)候我們認(rèn)為你可能需要做一些自己的設(shè)置才能運(yùn)行某些例子,在這種情況下我們會(huì)特別說(shuō)明。 本書(shū)的主要內(nèi)容 在合理的范圍內(nèi),本書(shū)把各章設(shè)計(jì)作為獨(dú)立的指南。對(duì)于一本關(guān)于Cassandra的書(shū)來(lái)說(shuō),這一點(diǎn)很重要,因?yàn)樽x者可能水平各異,而且技術(shù)變化很快。借用軟件領(lǐng)域的一個(gè)說(shuō)法,這本書(shū)設(shè)計(jì)為“模塊化”的。如果你剛接觸Cassandra,可以按順序閱讀;如果你已經(jīng)過(guò)了入門(mén)階段,也可以在后面的章節(jié)中找到你需要的內(nèi)容,每一章都可以作為一個(gè)獨(dú)立的指南來(lái)閱讀。 本書(shū)組織如下: 第1章,超越關(guān)系型數(shù)據(jù)庫(kù) 這一章將回顧了獲得極大成功的關(guān)系型數(shù)據(jù)庫(kù)的歷史,并介紹非關(guān)系型數(shù)據(jù)庫(kù)技術(shù)(如Cassandra)的蓬勃興起。 第2章,Cassandra簡(jiǎn)介 這一章介紹Cassandra,并討論它有哪些讓人激動(dòng)和不同尋常的地方,它來(lái)自哪里,另外有哪些優(yōu)點(diǎn)。 第3章,安裝Cassandra 這一章會(huì)帶著你安裝和運(yùn)行Cassandra,并嘗試它的一些基本特性。 第4章,Cassandra查詢(xún)語(yǔ)言 這一章介紹Cassandra的數(shù)據(jù)模型,重點(diǎn)強(qiáng)調(diào)它與傳統(tǒng)關(guān)系模型的區(qū)別。我們還會(huì)討論如何用Cassandra查詢(xún)語(yǔ)言(CQL)表示這個(gè)模型。 第5章,數(shù)據(jù)建模 這一章介紹Cassandra中數(shù)據(jù)建模的原則和過(guò)程。我們會(huì)分析一個(gè)大家熟悉的領(lǐng)域,來(lái)建立一個(gè)實(shí)際可用的模式。 第6章,Cassandra架構(gòu) 這一章將幫助你了解讀寫(xiě)操作時(shí)發(fā)生了什么,另外Cassandra如何實(shí)現(xiàn)它的一些突出特點(diǎn),如持久性和高可用性。我們會(huì)深入地理解一些更復(fù)雜的內(nèi)部工作方式,如Gossip協(xié)議、提示移交、讀修復(fù)、Merkle樹(shù)等。 第7章,配置Cassandra 這一章會(huì)介紹如何指定分區(qū)器、副本放置策略和snitch。我們會(huì)建立一個(gè)集群,并查看不同配置選擇的影響。 第8章,客戶(hù)端 面向不同的語(yǔ)言有很多不同的客戶(hù)端,包括Java、Python、node.js、Ruby、C#和PHP,這些客戶(hù)端對(duì)Cassandra的底層API提供了抽象。我們會(huì)幫助你了解常用驅(qū)動(dòng)程序的特性。 第9章,讀寫(xiě)數(shù)據(jù) 在前面章節(jié)的基礎(chǔ)上,我們將學(xué)習(xí)Cassandra“在底層”是如何讀寫(xiě)數(shù)據(jù)的。我們還會(huì)討論批處理(batch)、輕量級(jí)事務(wù)和分頁(yè)(paging)等概念。 第10章,監(jiān)控 一旦建立和運(yùn)行集群,可能需要監(jiān)控集群的使用情況、內(nèi)存模式和線(xiàn)程模式,了解它的一般活動(dòng)。Cassandra內(nèi)置有一個(gè)功能豐富的Java管理擴(kuò)展(JMX)接口,可以用來(lái)監(jiān)控所有這些方面及其他一些方面。 第11章,維護(hù) 利用服務(wù)器自帶的一些工具可以讓Cassandra集群的持續(xù)維護(hù)變得更為容易。我們會(huì)介紹如何退服一個(gè)節(jié)點(diǎn)、實(shí)現(xiàn)集群的負(fù)載平衡、獲得統(tǒng)計(jì)信息,以及完成其他日常的運(yùn)維任務(wù)。 第12章,性能調(diào)優(yōu) Cassandra最突出的特性之一就是它的速度非常快,不過(guò)還有很多方面可以進(jìn)一步優(yōu)化以提高性能,包括內(nèi)存設(shè)置、數(shù)據(jù)存儲(chǔ)、硬件選擇、緩存,以及緩沖區(qū)大小。 第13章,安全性 NoSQL技術(shù)經(jīng)常因?yàn)榘踩苑矫娴亩贪宥獾皆嵅 :迷贑assandra提供了認(rèn)證、授權(quán)和加密特性,我們將在這一章學(xué)習(xí)如何配置這些特性。 第14章,部署和集成 在本書(shū)的最后,我們會(huì)討論規(guī)劃集群部署的注意事項(xiàng),包括使用Amazon、Microsoft和Google等提供商的云部署。這一章還會(huì)介紹經(jīng)常與Cassandra結(jié)合使用來(lái)擴(kuò)展功能的諸多技術(shù)。 本書(shū)使用的Cassandra版本 本書(shū)使用了Cassandra 3.X版本系列,另外使用了DataStax Java Driver 3.0。討論2.0及以后版本增加的新特性時(shí),我們會(huì)給出新增該特性的相應(yīng)版本號(hào),方便使用較早版本的讀者考慮是否升級(jí)。 第二版新增內(nèi)容 本書(shū)第一版是關(guān)于Cassandra出版的第一本書(shū),多年來(lái)一直得到業(yè)界的高度認(rèn)可。不過(guò),2010年以來(lái),Cassandra格局已經(jīng)發(fā)生了顯著變化,不論從技術(shù)本身來(lái)講,還是從開(kāi)發(fā)和支持這項(xiàng)技術(shù)的社區(qū)來(lái)說(shuō),都有了巨大變化。為了讓這本書(shū)跟上Cassandra的最新發(fā)展,我們做了以下重要更新: 歷史感 第一版是針對(duì)2010年發(fā)布的0.7版撰寫(xiě)的。到2016年,我們已經(jīng)升級(jí)到3.X系列。最重要的變化是引入了CQL,而廢棄了之前的Thrift API。另外增加了一些新的架構(gòu)特性,包括二級(jí)索引、物化視圖和輕量級(jí)事務(wù)。我們?cè)诘?章提供了一個(gè)簡(jiǎn)明的版本歷史,幫助你了解這些變化。書(shū)中介紹新特性時(shí),我們通常會(huì)指出這些特性是在哪些版本中新增的。 助力開(kāi)發(fā)人員 這些年來(lái),Cassandra的相關(guān)開(kāi)發(fā)和測(cè)試有了很大變化,它引入了CQL shell (cqlsh),并逐步將社區(qū)開(kāi)發(fā)的客戶(hù)端替換為DataStax提供的驅(qū)動(dòng)程序。我們將在第3章和第4章深入地介紹cqlsh,并在第8章和第9章討論這些驅(qū)動(dòng)程序。在第9章還提供了Cassandra讀路徑和寫(xiě)路徑的一個(gè)擴(kuò)展描述,加深你對(duì)內(nèi)部機(jī)制的理解,并幫助你了解不同決策帶來(lái)的影響。 輔助Cassandra運(yùn)維 隨著越來(lái)越多的個(gè)人和組織在生產(chǎn)環(huán)境中部署Cassandra,有關(guān)生產(chǎn)環(huán)境中遇到的挑戰(zhàn)以及應(yīng)對(duì)這些挑戰(zhàn)的最佳實(shí)踐知識(shí)庫(kù)在日益壯大。我們?cè)黾恿藥渍氯碌膬?nèi)容,包括關(guān)于安全性的第13章及關(guān)于部署和集成的第14章,另外大大拓展了有關(guān)監(jiān)控、維護(hù)和性能調(diào)優(yōu)的章節(jié)(第10~12章),以體現(xiàn)這些新的智慧結(jié)晶。 排版約定 本書(shū)使用以下排版約定: 斜體(Italic) 表示新術(shù)語(yǔ)、URL、email地址、文件名和文件擴(kuò)展名。 定寬字體(Constant width) 表示程序代碼清單,以及在段落中用來(lái)指示程序元素,如變量或函數(shù)名、數(shù)據(jù)庫(kù)、數(shù)據(jù)類(lèi)型、環(huán)境變量、語(yǔ)句和關(guān)鍵字。 定寬粗體(Constant width bold) 表示要由用戶(hù)鍵入的命令或其他文字。 定寬斜體(Constant width italic) 表示該文本要替換為用戶(hù)提供的值或由上下文確定的值。 使用代碼示例 本書(shū)中的代碼示例可以從https://github.com/jeffreyscarpenter/cassandra-guide下載。 本書(shū)的目的是幫助你完成工作。一般來(lái)講,你可以在你的程序和文檔中使用這些代碼,不需要聯(lián)系我們來(lái)得到許可,除非你直接復(fù)制了大部分的代碼。 例如,如果你在編寫(xiě)一個(gè)程序,使用了本書(shū)中的多段代碼,這并不需要得到許可。但是出售或發(fā)行O'Reilly書(shū)示例代碼光盤(pán)則需要得到許可;卮饐(wèn)題時(shí)如果引用了這本書(shū)的文字和示例代碼,這不需要得到許可。但是如果你的產(chǎn)品的文檔借用了本書(shū)中的大量示例代碼,則需要得到許可。 我們希望但不嚴(yán)格要求標(biāo)明引用出處。引用信息通常包括書(shū)名、作者、出版商和ISBN。例如 “Cassandra: The Definitive Guide, Second Edition, by Jeff Carpenter. Copyright 2016 Jeff Carpenter, 978-1-491-93366-4”。 如果你認(rèn)為你在使用代碼示例時(shí)超出了合理使用范圍或者上述許可范圍,可以隨時(shí)聯(lián)系我們:permissions@oreilly.com。 Safari ®圖書(shū)在線(xiàn) Safari圖書(shū)在線(xiàn)(www.safaribooksonline.com)是一個(gè)應(yīng)需而變的數(shù)字圖書(shū)館,通過(guò)圖書(shū)和視頻方式提供世界頂尖作者在技術(shù)和商業(yè)領(lǐng)域積累的專(zhuān)家經(jīng)驗(yàn)。 技術(shù)專(zhuān)家、軟件開(kāi)發(fā)人員、Web設(shè)計(jì)人員和企業(yè)以及有創(chuàng)意的專(zhuān)業(yè)人員都使用Safari圖書(shū)在線(xiàn)作為其主要資源來(lái)完成研究、解決問(wèn)題、深入學(xué)習(xí)和資質(zhì)培訓(xùn)。 Safari圖書(shū)在線(xiàn)為機(jī)構(gòu)、政府部門(mén)和個(gè)人提供了多種產(chǎn)品組合和定價(jià)程序。 訂閱者可以在一個(gè)可以快捷搜索的數(shù)據(jù)庫(kù)中訪問(wèn)多家出版社提供的成千上萬(wàn)種圖書(shū)、培訓(xùn)視頻和正式出版前手稿,如O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology,以及其他數(shù)百家出版公司。關(guān)于Safari圖書(shū)在線(xiàn)的更多信息,請(qǐng)?jiān)L問(wèn)我們的在線(xiàn)網(wǎng)站。 聯(lián)系我們 請(qǐng)將關(guān)于本書(shū)的意見(jiàn)和問(wèn)題通過(guò)以下地址提供給出版社: 美國(guó): O'Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中國(guó): 北京市西城區(qū)西直門(mén)南大街2號(hào)成銘大廈C座807室(100035) 奧萊利技術(shù)咨詢(xún)(北京)有限公司 針對(duì)這本書(shū),我們還建有一個(gè)網(wǎng)頁(yè),列出了有關(guān)勘誤、示例和其他信息?梢酝ㄟ^(guò)以下地址訪問(wèn)這個(gè)頁(yè)面:http://bit.ly/cassandra2e。 如果對(duì)這本書(shū)有什么意見(jiàn),或者要詢(xún)問(wèn)技術(shù)上的問(wèn)題,請(qǐng)將電子郵件發(fā)送至: bookquestions@oreilly.com。 要了解關(guān)于我們的圖書(shū)、課程、會(huì)議和新聞的更多信息,請(qǐng)?jiān)L問(wèn)我們的網(wǎng)站: http://www.oreilly.com。 我們的Facebook: http://facebook.com/oreilly。 我們的Twitter: http://twitter.com/oreillymedia。 我們的YouTube: http://www.youtube.com/oreillymedia。 致謝 我們要感謝很多非常優(yōu)秀的人幫助這本書(shū)得以面世。 感謝我們的技術(shù)審校們:Stu Hood、Robert Schneider和Gary Dusbabek,你們?yōu)榈谝话尕暙I(xiàn)了很有見(jiàn)地的評(píng)論,另外感謝Andrew Baker、Ewan Elliot、Kirk Damron、Corey Cole、Jeff Jirsa和Patrick McFadin審閱了第二版。Chris Judson的反饋對(duì)第14章的完善起到了關(guān)鍵作用。 感謝Jonathan Ellis和Patrick McFadin為這本書(shū)的第一版和第二版作序。還要感謝Patrick對(duì)第14章Spark集成一節(jié)的貢獻(xiàn)。 感謝我們的編輯Mike Loukides和Marie Beaugureau,感謝他們一直以來(lái)的支持,讓這本書(shū)變得更好。 Jeff還要感謝Eben給予的信任,給他這個(gè)機(jī)會(huì)來(lái)更新這樣一本頗具盛譽(yù)的經(jīng)典著作,另外感謝Eben自始至終的鼓勵(lì)。 最后,對(duì)Cassandra做出了貢獻(xiàn)的很多了不起的開(kāi)發(fā)人員也給了我們很大啟發(fā)。向你們致敬,感謝你們建立了這樣一個(gè)優(yōu)秀而強(qiáng)大的數(shù)據(jù)庫(kù)。
Jeff Carpenter是Choice Hotels International的系統(tǒng)架構(gòu)師,在酒店和國(guó)防工業(yè)領(lǐng)域積累了20多年的經(jīng)驗(yàn)。Jeff的興趣主要包括SOA/微服務(wù)、構(gòu)建大規(guī)模系統(tǒng)架構(gòu)和數(shù)據(jù)架構(gòu)。 Eben Hewitt是Choice Hotels International的首席技術(shù)官,這是全球ZZ大酒店集團(tuán)之一。他著有多本有關(guān)架構(gòu)、分布式系統(tǒng)和編程的書(shū)。 序一1 序二3 前言5 第1章 超越關(guān)系型數(shù)據(jù)庫(kù)15 關(guān)系型數(shù)據(jù)庫(kù)有什么問(wèn)題?15 關(guān)系型數(shù)據(jù)庫(kù)速覽20 網(wǎng)絡(luò)規(guī)模28 NoSQL的興起29 小結(jié)31 第2章Cassandra概述32 Cassandra電梯間演講32 Cassandra從哪里來(lái)?45 Cassandra適合我的項(xiàng)目嗎?53 參與其中54 小結(jié)56 第3章 安裝Cassandra57 安裝Apache發(fā)布版本57 從源碼構(gòu)建60 運(yùn)行Cassandra62 其他Cassandra發(fā)布版本67 運(yùn)行CQL Shell68 小結(jié)77 第4章Cassandra查詢(xún)語(yǔ)言78 關(guān)系型數(shù)據(jù)模型78 Cassandra的數(shù)據(jù)模型79 CQL類(lèi)型88 二級(jí)索引99 小結(jié)101 第5章 數(shù)據(jù)建模102 概念數(shù)據(jù)建模102 RDBMS設(shè)計(jì)103 邏輯數(shù)據(jù)建模109 物理數(shù)據(jù)建模115 評(píng)估和改進(jìn)121 定義數(shù)據(jù)庫(kù)模式125 小結(jié)127 第6章Cassandra架構(gòu)129 數(shù)據(jù)中心和機(jī)架129 Gossip和故障檢測(cè)130 snitch感應(yīng)策略133 環(huán)和令牌134 虛擬節(jié)點(diǎn)135 分區(qū)器136 復(fù)制策略137 一致性級(jí)別138 查詢(xún)和協(xié)調(diào)器節(jié)點(diǎn)139 Memtable、SSTable和提交日志140 緩存142 提示移交143 輕量級(jí)事務(wù)和Paxos144 墓碑146 布隆過(guò)濾器146 合并147 逆熵、修復(fù)和Merkle樹(shù)149 分階段事件驅(qū)動(dòng)架構(gòu) 151 管理器和服務(wù)152 系統(tǒng)鍵空間155 小結(jié)158 第7章 配置Cassandra159 Cassandra集群管理器159 創(chuàng)建集群160 種子節(jié)點(diǎn)164 分區(qū)器164 Snitch167 節(jié)點(diǎn)配置170 向集群增加節(jié)點(diǎn)174 動(dòng)態(tài)加入環(huán)176 復(fù)制策略177 小結(jié)180 第8章 客戶(hù)端181 Hector、Astyanax和其他遺留客戶(hù)端181 DataStax Java驅(qū)動(dòng)程序182 DataStax Python Driver205 DataStax Nodejs Driver207 DataStax Ruby Driver208 DataStax C# Driver208 DataStax C/C++ Driver209 DataStax PHP Driver211 小結(jié)211 第9章 讀寫(xiě)數(shù)據(jù)212 寫(xiě)212 Cassandra寫(xiě)路徑215 讀225 刪除243 小結(jié)244 第10章 監(jiān)控245 日志245 用JMX監(jiān)控Cassandra250 Cassandra的MBean258 用nodetool監(jiān)控269 小結(jié)276 第11章 維護(hù)277 健康檢查277 基本維護(hù)278 移動(dòng)令牌286 增加節(jié)點(diǎn)286 處理節(jié)點(diǎn)故障290 升級(jí)Cassandra295 備份和恢復(fù)297 SSTable工具302 維護(hù)工具303 小結(jié)306 第12章 性能調(diào)優(yōu)307 管理性能307 緩存315 Memtable318 提交日志319 SSTable321 提示移交322 合并323 并發(fā)和線(xiàn)程326 網(wǎng)絡(luò)和超時(shí)327 JVM設(shè)置329 使用cassandra-stress332 小結(jié)336 第13章 安全337 認(rèn)證和授權(quán)338 加密346 JMX安全性352 小結(jié)354 第14章 部署和集成355 規(guī)劃集群部署355 云部署360 集成365 小結(jié)374
你還可能感興趣
我要評(píng)論
|