本書的主要內(nèi)容有:使用Cassandra查詢語(yǔ)言(CQL)和cqlsh(CQL shell)。創(chuàng)建一個(gè)實(shí)用的數(shù)據(jù)模型,并與等價(jià)關(guān)系型模型比較。使用客戶端驅(qū)動(dòng)程序設(shè)計(jì)和開發(fā)應(yīng)用。研究集群拓樸,了解節(jié)點(diǎn)間如何交換數(shù)據(jù)。維持集群的高性能水平,F(xiàn)場(chǎng)部署、云環(huán)境部署或利用Docker和Kubernetes部署Cassandra。Cassandra與Spark、Kafka、Elasticsearch、Solr和Lucene集成。
這本書告訴你為什么要在你的應(yīng)用中使用Cassandra以及如何使用。
想象一下,如果解決了伸縮性問題,你能做些什么。利用這本實(shí)用指南,你會(huì)了解Cassandra數(shù)據(jù)庫(kù)管理系統(tǒng)如何處理數(shù)百TB的數(shù)據(jù),同時(shí)仍保持跨多個(gè)數(shù)據(jù)中心的高可用性。這一版針對(duì)Cassandra 4.0做了全面更新,提供了生產(chǎn)環(huán)境中使用這個(gè)數(shù)據(jù)庫(kù)所需的技術(shù)細(xì)節(jié)和實(shí)用示例。
本書作者展示了Cassandra非關(guān)系型設(shè)計(jì)的諸多優(yōu)點(diǎn),尤其對(duì)數(shù)據(jù)建模特別關(guān)注。如果你是一個(gè)開發(fā)人員、DBA或應(yīng)用架構(gòu)師,著力解決數(shù)據(jù)庫(kù)擴(kuò)展問題或應(yīng)用的前瞻性問題,這個(gè)指南將幫助你充分利用Cassandra的高速度和靈活性。
這本書會(huì)告訴你為什么要在你的應(yīng)用中使用Cassandra以及如何使用。希望你能用它創(chuàng)造奇跡,獲得成功。
?D?DPatrick McFadin
DataStax開發(fā)關(guān)系部副總裁
前言
為什么選擇Apache Cassandra?
Apache Cassandra 是一個(gè)免費(fè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)目。不久之后,Apache Cassandra 項(xiàng)目主席Jonathan Ellis 領(lǐng)導(dǎo)的提交者(committer)發(fā)布了Cassandra 0.3,并且此后一直穩(wěn)步推進(jìn),不斷發(fā)布新的小版本,直到里程碑版本3.0。從2017 年起,這個(gè)項(xiàng)目由Apache Cassandra 項(xiàng)目主席Nate McCall 領(lǐng)導(dǎo),推出了3.1 版本,一直到的4.0 版本。Cassandra 已經(jīng)被Web 領(lǐng)域的眾多巨頭用于生產(chǎn)環(huán)境,包括Facebook、Twitter 和Netflix。Cassandra 之所以越來越受到歡迎,很大程度上是因?yàn)樗峁┑某錾募夹g(shù)特性。它具有持久性、無縫可擴(kuò)展性,以及可調(diào)一致性,可以非?斓貓(zhí)行寫操作,存儲(chǔ)數(shù)百TB 的數(shù)據(jù),而且是去中心化的和對(duì)稱的,所以不存在單點(diǎn)失效問題。此外,它還是高度可用的,提供了一個(gè)基于Cassandra 查詢語(yǔ)言(Cassandra Query Language,CQL)的數(shù)據(jù)模型。
本書的讀者對(duì)象
這本書適用各類人員,對(duì)以下讀者都很有用。
大規(guī)模、高容量應(yīng)用[ 比如Web 2.0 社交應(yīng)用、電子商務(wù)網(wǎng)站、金融服務(wù)或基于傳感器的物聯(lián)網(wǎng)(IoT)系統(tǒng)] 的開發(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ù)管理員或數(shù)據(jù)庫(kù)開發(fā)人員,需要了解如何實(shí)現(xiàn)容錯(cuò)且終一致的數(shù)據(jù)庫(kù)。
希望了解Cassandra 的優(yōu)勢(shì)(和不足)的管理者,來幫助做出技術(shù)戰(zhàn)略的有關(guān)決策。
正在設(shè)計(jì)Cassandra 或其他非關(guān)系型數(shù)據(jù)庫(kù)相關(guān)項(xiàng)目的學(xué)生、分析師或研究人員。
這本書是一本技術(shù)指南。在很多方面,Cassandra 和其他NoSQL 數(shù)據(jù)庫(kù)代表了一種考慮數(shù)據(jù)的新思路。很多在過去15~20 年間獲得專業(yè)技能的開發(fā)人員十分精通以純粹的關(guān)系或面向?qū)ο蠓绞絹砜紤]數(shù)據(jù)。Cassandra 的數(shù)據(jù)模型則完全不同,開始時(shí)可能很難理解,特別是有些人已經(jīng)對(duì)數(shù)據(jù)庫(kù)是什么(以及應(yīng)該是什么)有了先入為主的想法,他們可能尤其難以接受。
使用Cassandra 并不意味著你必須是一個(gè)Java 開發(fā)人員。不過,Cassandra 是用Java寫的,所以如果要深入分析源代碼,扎實(shí)地理解Java 會(huì)非常重要。這本書中的很多例子都是用Java 寫的。不過,已經(jīng)提供了很多不同語(yǔ)言的Cassandra 驅(qū)動(dòng)程序,包括Java、Node.js、Python、C#、PHP、Ruby 和Go。
后,本書假設(shè)你已經(jīng)了解Web 是如何工作的,能夠使用集成開發(fā)環(huán)境(IDE),并對(duì)數(shù)據(jù)驅(qū)動(dòng)應(yīng)用的典型問題有所了解。你可能是一個(gè)經(jīng)驗(yàn)豐富的開發(fā)人員或管理員,不過有時(shí)會(huì)遇到你不太熟悉的Cassandra 世界里使用的一些工具。比如使用Apache Ant 構(gòu)建Cassandra,另外可以通過Git 獲得Cassandra 源代碼。有些時(shí)候我們認(rèn)為你可能需要做自己的一些設(shè)置才能運(yùn)行某些例子,這種情況下我們會(huì)特別說明。
本書的主要內(nèi)容
這本書盡可能合理地把各章設(shè)計(jì)為獨(dú)立的指南。對(duì)于一本關(guān)于Cassandra 的書,這一點(diǎn)很重要,因?yàn)樽x者可能有不同的工作角色,身處不同的行業(yè)。借用軟件領(lǐng)域的一個(gè)說法,這本書設(shè)計(jì)為是模塊化的。如果你剛接觸Cassandra,可以按順序閱讀;如果你已經(jīng)過了入門階段,也可以在后面的章節(jié)中找到你需要的內(nèi)容,每一章都可以作為一個(gè)獨(dú)立的指南。
本書的結(jié)構(gòu)如下:
第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)和不同尋常的地方,它來自哪里,另外有哪些優(yōu)點(diǎn)。
第3 章,安裝Cassandra
這一章會(huì)帶著你安裝和運(yùn)行Cassandra,并嘗試它的一些基本特性。
第4 章,Cassandra 查詢語(yǔ)言
這一章介紹Cassandra 的數(shù)據(jù)模型,重點(diǎn)強(qiáng)調(diào)它與傳統(tǒng)關(guān)系模型的區(qū)別。我們還會(huì)討論如何用Cassandra 查詢語(yǔ)言(CQL)表示這個(gè)數(shù)據(jù)模型。
第5 章,數(shù)據(jù)建模
這一章介紹Cassandra 中數(shù)據(jù)建模的原則和過程。我們會(huì)分析一個(gè)大家熟悉的領(lǐng)域,建立一個(gè)實(shí)際可用的模式。
第6 章,Cassandra 架構(gòu)
這一章將幫助你了解讀寫操作時(shí)發(fā)生了什么,另外Cassandra 數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)它的一些突出特點(diǎn),如持久性和高可用性。我們會(huì)深入地理解一些更復(fù)雜的內(nèi)部工作,如gossip 協(xié)議、提示移交、讀修復(fù)、Merkle 樹等。
第7 章, 設(shè)計(jì)使用Cassandra 的應(yīng)用
為了讓Cassandra 架構(gòu)概念更為具體,我們將研究在現(xiàn)代云應(yīng)用的架構(gòu)和設(shè)計(jì)中結(jié)合Cassandra 的一些常用方法。
第8 章,使用驅(qū)動(dòng)程序開發(fā)應(yīng)用
面向不同語(yǔ)言有很多驅(qū)動(dòng)程序,包括Java、node.js、Python、Ruby、C# 和PHP,這些驅(qū)動(dòng)程序?qū)assandra 的底層API 提供了抽象。我們會(huì)幫助你了解如何利用常用驅(qū)動(dòng)程序的特性用Cassandra 開發(fā)應(yīng)用。
第9 章,讀寫數(shù)據(jù)
在前面各章的基礎(chǔ)上,我們將學(xué)習(xí)Cassandra在底層是如何讀寫數(shù)據(jù)的,還會(huì)討論批處理(batch)、輕量級(jí)事務(wù)和分頁(yè)(paging)等概念。
第10 章,配置和部署Cassandra
這一章會(huì)介紹如何指定分區(qū)器、副本放置策略和snitch。我們會(huì)建立一個(gè)集群,并查看不同配置選擇的影響。這一章會(huì)討論規(guī)劃集群部署的做法,包括使用Amazon、Microsoft 和Google 等提供商的混合云和多云部署,以及使用Docker和Kubernetes 部署和管理集群。
第11 章,監(jiān)控
一旦建立和運(yùn)行集群,可能需要監(jiān)控集群的使用情況、內(nèi)存模式和線程模式,了解它的一般活動(dòng)。Cassandra 內(nèi)置有一個(gè)功能豐富的Java 管理擴(kuò)展(JMX)接口,可以用來監(jiān)控所有這些方面以及其他一些方面。
第12 章,維護(hù)
利用服務(wù)器自帶的一些工具可以讓Cassandra 集群的持續(xù)維護(hù)變得更為容易。我們會(huì)介紹如何退服一個(gè)節(jié)點(diǎn)、實(shí)現(xiàn)集群的負(fù)載平衡、獲得統(tǒng)計(jì)信息,以及完成其他日常的運(yùn)維任務(wù)。
第13 章,性能調(diào)優(yōu)
Cassandra 突出的特性之一就是它的速度,Cassandra 非?,不過還有很多方面可以優(yōu)化來進(jìn)一步提高性能,包括內(nèi)存設(shè)置、數(shù)據(jù)存儲(chǔ)、硬件選擇、緩存,以及緩沖區(qū)大小。
第14 章,安全
NoSQL技術(shù)經(jīng)常因?yàn)榘踩苑矫娴亩贪宥獾皆嵅。好在Cassandra 提供了認(rèn)證、授權(quán)和加密特性,我們將在這一章學(xué)習(xí)如何配置這些特性。
第15 章,遷移和集成
在這本書的后,將對(duì)你的企業(yè)采用Cassandra 所涉及的步驟做一個(gè)總結(jié),我們將從關(guān)系數(shù)據(jù)庫(kù)遷移到Cassandra 的角度來討論,會(huì)介紹數(shù)據(jù)建模、應(yīng)用開發(fā)和部署的有關(guān)問題,以及Cassandra 如何集成其他流行技術(shù),包括:
流傳輸系統(tǒng),如Apache Kafka。
搜索引擎,如Apache Lucene、Apache Solr 和ElasticSearch。
分析平臺(tái),如Apache Spark。
這本書中使用的Cassandra 版本
這本書使用了Apache Cassandra 4.0 和DataStax Java Driver 4.1。工具輸出、日志文件、配置文件以及錯(cuò)誤消息的格式和內(nèi)容都采用4.0 版本中的形式,
將來的版本中可能會(huì)有改變。
討論2.0 及以后版本增加的新特性時(shí),我們會(huì)給出新增該特性的相應(yīng)版本號(hào),方便使用較早版本的讀者考慮是否升級(jí)。
第三版新增內(nèi)容
與版和第二版之間的時(shí)間跨度相比,第三版與上一個(gè)版本相隔沒有那么遠(yuǎn),不過還是有很多重要的變化需要指出:
成熟的數(shù)據(jù)庫(kù)
軟件工程社區(qū)的傳統(tǒng)觀點(diǎn)是一個(gè)新的數(shù)據(jù)庫(kù)引擎需要5~10 年才能完全成熟。讓人高興的是,Cassandra 已經(jīng)達(dá)到了這個(gè)成熟度里程碑,盡管4.0 版本肯定有一些穩(wěn)定性和可用性方面的改進(jìn),不過大部分新特性都專注于如何讓這個(gè)數(shù)據(jù)庫(kù)更易于理解和維護(hù)。本書這一版涵蓋的4.0 新特性包括:虛擬表(第11 章介紹)、審計(jì)日志(第14 章介紹)和變更數(shù)據(jù)捕獲(第15 章介紹)。
云應(yīng)用中結(jié)合Cassandra
使用Cassandra 的應(yīng)用類型還在不斷增長(zhǎng)。為了幫助縮小概念與現(xiàn)實(shí)間的差距,我們?yōu)榇藢iT增加了新的一章,即第7 章。我們還更新了第15 章,對(duì)結(jié)合使用Kafka 和Cassandra 的多種模式進(jìn)行了討論。
云部署中的變化
第二版出版時(shí),盡管Docker 已經(jīng)成為應(yīng)用部署的一個(gè)流行選擇,但在Docker上運(yùn)行數(shù)據(jù)庫(kù)還沒有定論。在那之后,已經(jīng)取得了足夠多的進(jìn)展,現(xiàn)在我們認(rèn)為可以推薦在Docker 上部署Cassandra 了。Kubernetes 作為協(xié)調(diào)跨計(jì)算機(jī)集群的容器部署和維護(hù)的關(guān)鍵技術(shù)迅速崛起。在這一版中,我們更新了第10 章,增加了在Docker 上部署Cassandra 的指導(dǎo)說明,另外增加了Kubernetes 的內(nèi)容以反映當(dāng)前變化的格局。
排版約定
本書采用下述排版約定。
斜體(Italic)
表示新術(shù)語(yǔ)、URL、電子郵件地址、文件名和擴(kuò)展名。
等寬字體(constant width)
表示程序清單,在段落中出現(xiàn)則表示程序元素,如變量、函數(shù)名、數(shù)據(jù)庫(kù)、數(shù)據(jù)類型、環(huán)境變量、語(yǔ)句和關(guān)鍵字。
等寬粗體(constant width bold)
表示應(yīng)該替換成用戶提供的值,或者由上下文決定的值。
使用代碼示例
本書中的代碼示例可以從https://github.com/jeffreyscarpenter/cassandra-guide 和https://github.com/jeffreyscarpenter/reservation-service 下載。
本書的目的是要幫助你完成工作。一般來講,你可以在你的程序和文檔中使用這些代碼,不需要聯(lián)系我們來得到許可,除非你直接復(fù)制了大部分的代碼。例如,如果你在編寫一個(gè)程序,使用了本書中的多段代碼,這并不需要得到許可。但是出售或發(fā)行OReilly 書示例代碼則需要得到許可;卮饐栴}時(shí)如果引用了這本書的文字和示例代碼,不需要得到許可。但是如果你的產(chǎn)品的文檔借用了本書中的大量示例代碼,則需要得到許可。
我們希望但不嚴(yán)格要求標(biāo)明引用出處。引用信息通常包括書名、作者、出版商和ISBN。例如Cassandra: The Definitive Guide, Revised Edition, by Jeff Carpenter and Eben Hewitt(OReilly). Copyright2020 Jeff Carpenter, 978-1-492-09714-3。
如果你認(rèn)為你在使用代碼示例時(shí)超出了合理使用范圍或者上述許可范圍,可以隨時(shí)聯(lián)系我們:permissions@oreilly.com。
OReilly 交互式Katacoda 場(chǎng)景
交互式Katacoda 場(chǎng)景模擬了真實(shí)世界生產(chǎn)環(huán)境,你可以一邊學(xué)習(xí)一邊在瀏覽器中編寫和運(yùn)行代碼。本書作者開發(fā)了一組Katacoda 場(chǎng)景,使你能親身實(shí)踐這本書中所列的工具和做法。關(guān)于我們的交互式內(nèi)容,更多信息可以訪問http://oreilly.com,查看本書的電子版(ebook),并了解我們的學(xué)習(xí)平臺(tái)提供的全部特性。
OReilly 在線學(xué)習(xí)平臺(tái)(OReilly Online Learning)
近40 年來,OReilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來幫助眾多公司取得成功。
我們擁有獨(dú)一無二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過圖書、文章、會(huì)議和我們的在線學(xué)習(xí)平臺(tái)分享他們的知識(shí)和經(jīng)驗(yàn)。OReilly 的在線學(xué)習(xí)平臺(tái)允許你按需訪問現(xiàn)場(chǎng)培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及OReilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請(qǐng)?jiān)L問http://oreilly.com。
聯(lián)系我們
請(qǐng)把對(duì)本書的評(píng)價(jià)和問題發(fā)給出版社。
美國(guó):
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國(guó):
北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
針對(duì)本書我們還建有一個(gè)網(wǎng)頁(yè),列出了有關(guān)勘誤、示例和其他信息?梢酝ㄟ^以下地址訪問這個(gè)頁(yè)面:https://oreil.ly/cassandra_revisedEd。
如果對(duì)這本書有什么意見, 或者詢問技術(shù)上的問題, 請(qǐng)發(fā)送電子郵件至bookquestions@oreilly.com。
有關(guān)我們的圖書、課程和新聞的更多信息,請(qǐng)?jiān)L問我們的網(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ù)審校:Stu Hood、Robert Schneider 和Gary Dusbabek,你們?yōu)榘尕暙I(xiàn)了很有見地的評(píng)論,另外感謝Andrew Baker、Ewan Elliot、Kirk Damron、Corey Cole、Jeff Jirsa、Chris Judson 和Patrick McFadin 審閱了第二版。第三版由Pankaj Gallar、Cedrick Lunven、Alex Ott 和Wei Deng 審校。
感謝Jonathan Ellis 和Patrick McFadin 分別為這本書的版和第二版作序,另外感謝Nate McCall 為第三版作序。
還要感謝Patrick 對(duì)第15 章Spark 集成一節(jié)的貢獻(xiàn)。
感謝我們的編輯:Mike Loukides、Marie Beaugureau、Nicole Tache、Jess Haberman和Sarah Grey,感謝他們一直以來的支持,讓這本書變得更好。
Jeff 還要感謝Eben 給予的信任,給他這個(gè)機(jī)會(huì)來更新這樣一本享有盛譽(yù)的經(jīng)典著作,另外感謝Eben 自始至終的鼓勵(lì)。
后,對(duì)Cassandra 做出貢獻(xiàn)的很多了不起的開發(fā)人員也給了我們很大啟發(fā)。向你們致敬,感謝你們建立了這樣一個(gè)優(yōu)秀而強(qiáng)大的數(shù)據(jù)庫(kù)。
Jeff Carpenter是DataStax的開發(fā)布道師總監(jiān),利用他在系統(tǒng)架構(gòu)、微服務(wù)和Apache Cassandra等領(lǐng)域的工作背景,Jeff Carpenter著力幫助開發(fā)人員和運(yùn)維工程師構(gòu)建可擴(kuò)展、可靠且安全的分布式系統(tǒng)。Eben Hewitt是Sabre Hospitality的CTO和首席架構(gòu)師,他負(fù)責(zé)技術(shù)戰(zhàn)略,同時(shí)負(fù)責(zé)設(shè)計(jì)大規(guī)模關(guān)鍵任務(wù)系統(tǒng),并領(lǐng)導(dǎo)團(tuán)隊(duì)構(gòu)建這些系統(tǒng)。他曾任全球酒店集團(tuán)之一的CTO,另外曾擔(dān)任過OReilly Media的CIO。
目錄
序 .1
前言 .3
第1 章 超越關(guān)系型數(shù)據(jù)庫(kù) 13
1.1 關(guān)系型數(shù)據(jù)庫(kù)有什么問題? 13
1.2 關(guān)系型數(shù)據(jù)庫(kù)速覽 18
1.2.1 事務(wù)、ACID 性和兩段提交 19
1.2.2 模式 21
1.2.3 分片和無共享架構(gòu) 22
1.3 網(wǎng)絡(luò)規(guī)模 25
1.4 NoSQL 的興起 26
1.5 小結(jié) 29
第2 章 Cassandra 簡(jiǎn)介 30
2.1 Cassandra 電梯間演講 30
2.1.1 50 字Cassandra 介紹 . 30
2.1.2 分布式與去中心化 31
2.1.3 彈性可擴(kuò)展 . 32
2.1.4 高可用性和容錯(cuò)性 33
2.1.5 可調(diào)一致性 . 33
2.1.6 Brewer 的CAP 理論 36
2.1.7 面向行 40
2.1.8 高性能 42
2.2 Cassandra 從哪里來? 42
2.3 Cassandra 適合我的項(xiàng)目嗎? 44
2.3.1 大規(guī)模部署 . 44
2.3.2 大量寫操作、統(tǒng)計(jì)和分析 44
2.3.3 多地分布 45
2.3.4 混合云和多云部署 45
2.4 參與其中 45
2.5 小結(jié) 48
第3 章 安裝Cassandra 49
3.1 安裝Apache 發(fā)布版本 49
3.1.1 解壓縮下載包 50
3.1.2 里面有什么? . 50
3.2 從源碼構(gòu)建 . 51
3.3 運(yùn)行Cassandra . 53
3.3.1 設(shè)置環(huán)境 54
3.3.2 啟動(dòng)服務(wù)器 . 55
3.3.3 停止Cassandra . 57
3.4 其他Cassandra 發(fā)布版本 . 58
3.5 運(yùn)行CQL Shell . 59
3.6 基本cqlsh 命令 . 60
3.6.1 cqlsh 幫助 61
3.6.2 cqlsh 中描述環(huán)境 . 62
3.6.3 cqlsh 中創(chuàng)建鍵空間和表 . 62
3.6.4 cqlsh 中讀寫數(shù)據(jù) . 66
3.7 Docker 中運(yùn)行Cassandra . 69
3.8 小結(jié) 70
第4 章 Cassandra 查詢語(yǔ)言 71
4.1 關(guān)系型數(shù)據(jù)模型 71
4.2 Cassandra 的數(shù)據(jù)模型 72
4.2.1 集群 75
4.2.2 鍵空間 76
4.2.3 表 . 76
4.2.4 列 . 80
4.3 CQL 類型 . 83
4.3.1 數(shù)值數(shù)據(jù)類型 83
4.3.2 文本數(shù)據(jù)類型 84
4.3.3 時(shí)間和標(biāo)識(shí)數(shù)據(jù)類型 . 85
4.3.4 其他簡(jiǎn)單數(shù)據(jù)類型 87
4.3.5 集合 89
4.3.6 元組 93
4.3.7 用戶自定義類型 93
4.4 小結(jié) 97
第5 章 數(shù)據(jù)建模 98
5.1 概念數(shù)據(jù)建模 98
5.2 RDBMS 設(shè)計(jì) . 99
5.3 定義應(yīng)用查詢 . 103
5.4 邏輯數(shù)據(jù)建模 . 105
5.4.1 酒店邏輯數(shù)據(jù)模型 106
5.4.2 預(yù)訂邏輯數(shù)據(jù)模型 109
5.5 物理數(shù)據(jù)建模 . 110
5.5.1 酒店物理數(shù)據(jù)模型 112
5.5.2 預(yù)訂物理數(shù)據(jù)模型 113
5.6 評(píng)估和改進(jìn) 114
5.6.1 計(jì)算分區(qū)大小 . 114
5.6.2 計(jì)算磁盤上的大小 115
5.6.3 劃分大分區(qū) 117
5.7 定義數(shù)據(jù)庫(kù)模式 118
5.8 小結(jié) . 123
第6 章 Cassandra 架構(gòu) . 124
6.1 數(shù)據(jù)中心和機(jī)架 124
6.2 Gossip 和故障檢測(cè) 125
6.3 Snitch . 128
6.4 環(huán)和令牌 129
6.5 虛擬節(jié)點(diǎn) 130
6.6 分區(qū)器 131
6.7 復(fù)制策略 132
6.8 一致性級(jí)別 133
6.9 查詢和協(xié)調(diào)器節(jié)點(diǎn) 134
6.10 提示移交 . 135
6.11 逆熵、修復(fù)和Merkle 樹 . 137
6.12 輕量級(jí)事務(wù)和Paxos . 138
6.13 Memtable、SSTable 和提交日志 140
6.14 布隆過濾器 143
6.15 緩存 143
6.16 合并 144
6.17 刪除和墓碑 146
6.18 管理器和服務(wù) 147
6.18.1 Cassandra 守護(hù)進(jìn)程 147
6.18.2 存儲(chǔ)引擎 . 147
6.18.3 存儲(chǔ)服務(wù) . 148
6.18.4 存儲(chǔ)代理 . 149
6.18.5 消息傳遞服務(wù) 149
6.18.6 流管理器 . 149
6.18.7 CQL 原生傳輸服務(wù)器 150
6.19 系統(tǒng)鍵空間 150
6.20 小結(jié) 153
第7 章 設(shè)計(jì)使用Cassandra 的應(yīng)用 . 154
7.1 酒店應(yīng)用設(shè)計(jì) . 154
7.1.1 Cassandra 和微服務(wù)架構(gòu) 154
7.1.2 一個(gè)酒店應(yīng)用的微服務(wù)架構(gòu) 156
7.1.3 識(shí)別限界上下文 157
7.1.4 識(shí)別服務(wù) 157
7.1.5 設(shè)計(jì)微服務(wù)持久存儲(chǔ) 159
7.2 擴(kuò)展設(shè)計(jì) 162
7.2.1 二級(jí)索引 163
7.2.2 物化視圖 167
7.3 預(yù)訂服務(wù):一個(gè)示例微服務(wù) 171
7.4 部署和集成問題 172
7.4.1 服務(wù)、鍵空間和集群 172
7.4.2 數(shù)據(jù)中心和負(fù)載平衡 173
7.4.3 微服務(wù)間的交互 173
7.5 小結(jié) . 175
第8 章 使用驅(qū)動(dòng)程序開發(fā)應(yīng)用 176
8.1 DataStax Java 驅(qū)動(dòng)程序 . 177
8.1.1 開發(fā)環(huán)境配置 . 178
8.1.2 連接集群 179
8.1.3 語(yǔ)句 . 181
8.1.4 簡(jiǎn)單語(yǔ)句 181
8.1.5 準(zhǔn)備語(yǔ)句 183
8.1.6 查詢生成器 185
8.1.7 對(duì)象映射器 187
8.1.8 異步執(zhí)行 191
8.1.9 驅(qū)動(dòng)程序配置 . 193
8.1.10 元數(shù)據(jù) . 200
8.1.11 調(diào)試和監(jiān)控 202
8.2 DataStax Python 驅(qū)動(dòng)程序 203
8.3 DataStax Node.js 驅(qū)動(dòng)程序 204
8.4 DataStax C# 驅(qū)動(dòng)程序 205
8.5 其他Cassandra 驅(qū)動(dòng)程序 205
8.6 小結(jié) . 207
第9 章 讀寫數(shù)據(jù) 208
9.1 寫 208
9.1.1 寫一致性級(jí)別 . 208
9.1.2 Cassandra 寫路徑 210
9.1.3 文件寫入磁盤 . 212
9.1.4 輕量級(jí)事務(wù) 215
9.1.5 批處理 218
9.2 讀 221
9.2.1 讀一致性級(jí)別 . 221
9.2.2 Cassandra 讀路徑 223
9.2.3 讀修復(fù) 225
9.2.4 區(qū)間查詢、排序和過濾 . 228
9.2.5 分頁(yè) . 231
9.3 刪除 . 233
9.4 小結(jié) . 236
第10 章 配置和部署Cassandra . 237
10.1 Cassandra 集群管理器 . 237
10.1.1 創(chuàng)建集群 . 238
10.1.2 為集群增加節(jié)點(diǎn) . 241
10.1.3 動(dòng)態(tài)加入環(huán) 243
10.2 節(jié)點(diǎn)配置 . 244
10.2.1 種子節(jié)點(diǎn) . 244
10.2.2 Snitch 245
10.2.3 分區(qū)器 . 247
10.2.4 令牌和虛擬節(jié)點(diǎn) . 249
10.2.5 網(wǎng)絡(luò)接口 . 250
10.2.6 數(shù)據(jù)存儲(chǔ) . 251
10.2.7 啟動(dòng)和JVM 設(shè)置 253
10.3 規(guī)劃集群部署 254
10.3.1 集群拓?fù)浜蛷?fù)制策略 255
10.3.2 確定集群規(guī)模 258
10.3.3 選擇實(shí)例 . 259
10.3.4 存儲(chǔ) 259
10.3.5 網(wǎng)絡(luò) 260
10.4 云部署 . 261
10.4.1 Amazon Web 服務(wù) 262
10.4.2 Google 云平臺(tái) . 265
10.4.3 Microsoft Azure 266
10.5 小結(jié) 266
第11 章 監(jiān)控 268
11.1 用JMX 監(jiān)控Cassandra 268
11.2 Cassandra 的MBean . 271
11.2.1 數(shù)據(jù)庫(kù)MBean . 272
11.2.2 集群相關(guān)MBean . 276
11.2.3 內(nèi)部MBean 278
11.3 用nodetool 監(jiān)控 . 279
11.3.1 獲得集群信息 280
11.3.2 獲得統(tǒng)計(jì)信息 283
11.4 虛擬表 285
11.4.1 系統(tǒng)虛擬模式 286
11.4.2 系統(tǒng)視圖 . 287
11.5 指標(biāo) 290
11.6 日志 292
11.6.1 檢查日志文件 295
11.6.2 全量查詢?nèi)罩?296
11.7 小結(jié) 298
第12 章 維護(hù) . 299
12.1 健康檢查 . 299
12.2 常見維護(hù)任務(wù) 300
12.2.1 刷新輸出 . 300
12.2.2 清理 301
12.2.3 修復(fù) 302
12.2.4 重建索引 . 307
12.2.5 移動(dòng)令牌 . 308
12.3 增加節(jié)點(diǎn) . 308
12.3.1 向已有的數(shù)據(jù)中心增加節(jié)點(diǎn) . 308
12.3.2 向集群增加數(shù)據(jù)中心 309
12.4 處理節(jié)點(diǎn)故障 311
12.4.1 修復(fù)失敗節(jié)點(diǎn) 311
12.4.2 替換節(jié)點(diǎn) . 312
12.4.3 移除節(jié)點(diǎn) . 313
12.5 升級(jí)Cassandra . 317
12.6 備份和恢復(fù) 319
12.6.1 建立快照 . 320
12.6.2 清除快照 . 321
12.6.3 啟用增量備份 322
12.6.4 從快照恢復(fù) 322
12.7 SSTable 實(shí)用工具 323
12.8 維護(hù)工具 . 325
12.8.1 Netflix Priam 325
12.8.2 DataStax OpsCenter 325
12.8.3 Cassandra Sidecars . 325
12.8.4 Cassandra Kubernetes Operators . 327
12.9 小結(jié) 330
第13 章 性能調(diào)優(yōu) . 331
13.1 管理性能 . 331
13.1.1 設(shè)置性能目標(biāo) 331
13.1.2 基準(zhǔn)測(cè)試和壓力測(cè)試 333
13.1.3 監(jiān)控性能 . 338
13.1.4 分析性能問題 340
13.1.5 跟蹤 340
13.1.6 調(diào)優(yōu)方法 . 343
13.2 緩存 344
13.2.1 鍵緩存 . 344
13.2.2 行緩存 . 345
13.2.3 塊緩存 . 346
13.2.4 計(jì)數(shù)器緩存 347
13.2.5 保存的緩存設(shè)置 . 347
13.3 Memtable 348
13.4 提交日志 . 349
13.5 SSTables . 350
13.6 提示移交 . 351
13.7 合并 352
13.8 并發(fā)和線程 356
13.9 網(wǎng)絡(luò)和超時(shí) 357
13.10 JVM 設(shè)置 . 359
13.10.1 內(nèi)存 360
13.10.2 垃圾回收 360
13.11 小結(jié) 364
第14 章 安全 . 365
14.1 認(rèn)證和授權(quán) 367
14.1.1 密碼認(rèn)證器 367
14.1.2 使用CassandraAuthorizer 371
14.1.3 基于角色的訪問控制 373
14.2 加密 375
14.2.1 SSL、TLS 和證書 . 376
14.2.2 節(jié)點(diǎn)間加密 379
14.2.3 客戶端- 節(jié)點(diǎn)間加密 . 381
14.3 JMX 安全性 382
14.3.1 保護(hù)JMX 訪問安全 383
14.3.2 安全MBean 385
14.4 審計(jì)日志 . 386
14.5 小結(jié) 389
第15 章 遷移和集成 390
15.1 了解何時(shí)遷移 390
15.2 調(diào)整數(shù)據(jù)模型 391
15.2.1 轉(zhuǎn)換實(shí)體 . 393
15.2.2 轉(zhuǎn)換關(guān)系 . 394
15.3 調(diào)整應(yīng)用 . 396
15.3.1 重構(gòu)數(shù)據(jù)訪問 397
15.3.2 維護(hù)一致性 398
15.3.3 遷移存儲(chǔ)過程 400
15.4 規(guī)劃部署 . 405
15.5 遷移數(shù)據(jù) . 406
15.5.1 零停機(jī)遷移 406
15.5.2 批量加載 . 407
15.6 常見集成 . 409
15.6 1 使用Apache Kafka 管理數(shù)據(jù)流 409
15.6.2 用Apache Lucene、SOLR 和Elasticsearch 搜索 412
15.6.3 使用Apache Spark 分析數(shù)據(jù) 413
15.7 小結(jié) 421