前言
為什麼選擇Apache Cassandra? Apache Cassandra是一個免費、開源的分布式數據存儲繫統,與關繫型數據庫管理繫統(relational database management systems,RDBMS)截然不同。Cassandra初是在2009年1月作為Apache的一個孵化器項目啟動的。不久,以Apache Cassandra項目主席Jonathan Ellis為首的提交者發布了Cassandra 0.3,並在此之後穩定不斷地發布新的小版本。Cassandra已經被Web領域的眾多巨頭用於生產環境,包括Facebook、Twitter和Netflix。Cassandra之所以越來越受到歡迎,很大程度上是因為它提供的出色的技術特性。它具有持久性、無縫可擴展性,以及可調一致性,可以非常快地執行寫操作,可以存儲數百TB的數據,而且是去中心化的和對稱的,所以不存在單點失效問題。此外,它還是高度可用的,提供了一個基於Cassandra查詢語言(Cassandra Query Language,CQL)的數據模型。 本書的讀者對像 這本書適用各類讀者,對以下讀者會非常有用。 • 大規模、高容量應用(比如Web 2.0社交應用或電子商務網站)的開發人員。 • 應用架構師或數據架構師,需要了解有哪些高性能、去中心化、彈性數據庫選擇。 • 目前使用標準關繫型數據庫繫統的數據庫管理員或開發人員,需要了解如何實現容錯且終一致的數據庫。 • 希望了解Cassandra及相關列式數據庫的優勢(和不足)的管理者,來幫助做出有關技術戰略的決策。 • 正在設計Cassandra或其他非關繫型數據庫相關項目的學生、分析師或研究人員。 這本書是一本技術指南。在很多方面,Cassandra代表了一種考慮數據的新思。過去15~20年間獲得專業技能的很多開發人員非常精通用純粹的關繫或面向對像方式來考慮數據。Cassandra的數據模型則完全不同,開始時可能很難理解,特別是有些人已經對數據庫是什麼(以及應該是什麼)有了先入為主的想法,尤其他們可能難以接受。 使用Cassandra並不意味著你必須是一名Java開發人員。不過,Cassandra是用Java寫的,所以如果要深入分析源代碼,扎實地理解Java非常重要。雖然並不嚴格要求懂Java,但這有助於你更好地理解異常、了解如何構建源代碼,以及如何使用一些流行的客戶端。本書中的很多例子都是用Java寫的。不過,根據訪問Cassandra所用的接口,完全可以采用多種語言來使用Cassandra,包括C#、Python、node.js、PHP和Ruby。 後,假設讀者已經了解Web是如何工作的,能夠使用集成開發環境(IDE),並對數據驅動應用的典型問題有所了解。你可能是一個經驗豐富的開發人員或管理員,不過有時會遇到Cassandra世界裡使用的一些不太熟悉的工具。比如Cassandra使用Apache Ant構建,另外可以通過Git獲得Cassandra源代碼。有時候我們認為你可能需要做一些自己的設置纔能運行某些例子,在這種情況下我們會特別說明。 本書的主要內容 在合理的範圍內,本書把各章設計作為獨立的指南。對於一本關於Cassandra的書來說,這一點很重要,因為讀者可能水平各異,而且技術變化很快。借用軟件領域的一個說法,這本書設計為“模塊化”的。如果你剛接觸Cassandra,可以按順序閱讀;如果你已經過了入門階段,也可以在後面的章節中找到你需要的內容,每一章都可以作為一個獨立的指南來閱讀。 本書組織如下: 第1章,超越關繫型數據庫 這一章將回顧了獲得極大成功的關繫型數據庫的歷史,並介紹非關繫型數據庫技術(如Cassandra)的蓬勃興起。 第2章,Cassandra簡介 這一章介紹Cassandra,並討論它有哪些讓人激動和不同尋常的地方,它來自哪裡,另外有哪些優點。 第3章,安裝Cassandra 這一章會帶著你安裝和運行Cassandra,並嘗試它的一些基本特性。 第4章,Cassandra查詢語言 這一章介紹Cassandra的數據模型,重點強調它與傳統關繫模型的區別。我們還會討論如何用Cassandra查詢語言(CQL)表示這個模型。 第5章,數據建模 這一章介紹Cassandra中數據建模的原則和過程。我們會分析一個大家熟悉的領域,來建立一個實際可用的模式。 第6章,Cassandra架構 這一章將幫助你了解讀寫操作時發生了什麼,另外Cassandra如何實現它的一些突出特點,如持久性和高可用性。我們會深入地理解一些更復雜的內部工作方式,如Gossip協議、提示移交、讀修復、Merkle樹等。 第7章,配置Cassandra 這一章會介紹如何指定分區器、副本放置策略和snitch。我們會建立一個集群,並查看不同配置選擇的影響。 第8章,客戶端 面向不同的語言有很多不同的客戶端,包括Java、Python、node.js、Ruby、C#和PHP,這些客戶端對Cassandra的底層API提供了抽像。我們會幫助你了解常用驅動程序的特性。 第9章,讀寫數據 在前面章節的基礎上,我們將學習Cassandra“在底層”是如何讀寫數據的。我們還會討論批處理(batch)、輕量級事務和分頁(paging)等概念。 第10章,監控 一旦建立和運行集群,可能需要監控集群的使用情況、內存模式和線程模式,了解它的一般活動。Cassandra內置有一個功能豐富的Java管理擴展(JMX)接口,可以用來監控所有這些方面及其他一些方面。 第11章,維護 利用服務器自帶的一些工具可以讓Cassandra集群的持續維護變得更為容易。我們會介紹如何退服一個節點、實現集群的負載平衡、獲得統計信息,以及完成其他日常的運維任務。 第12章,性能調優 Cassandra突出的特性之一就是它的速度非常快,不過還有很多方面可以進一步優化以提高性能,包括內存設置、數據存儲、硬件選擇、緩存,以及緩衝區大小。 第13章,安全性 NoSQL技術經常因為安全性方面的短板而遭到詬病。好在Cassandra提供了認證、授權和加密特性,我們將在這一章學習如何配置這些特性。 第14章,部署和集成 在本書的後,我們會討論規劃集群部署的注意事項,包括使用Amazon、Microsoft和Google等提供商的雲部署。這一章還會介紹經常與Cassandra結合使用來擴展功能的諸多技術。 本書使用的Cassandra版本 本書使用了Cassandra 3.X版本繫列,另外使用了DataStax Java Driver 3.0。討論2.0及以後版本增加的新特性時,我們會給出新增該特性的相應版本號,方便使用較早版本的讀者考慮是否升級。 第二版新增內容 本書版是關於Cassandra出版的本書,多年來一直得到業界的高度認可。不過,2010年以來,Cassandra格局已經發生了顯著變化,不論從技術本身來講,還是從開發和支持這項技術的社區來說,都有了巨大變化。為了讓這本書跟上Cassandra的發展,我們做了以下重要更新: 歷史感 版是針對2010年發布的0.7版撰寫的。到2016年,我們已經升級到3.X繫列。重要的變化是引入了CQL,而廢棄了之前的Thrift API。另外增加了一些新的架構特性,包括二級索引、物化視圖和輕量級事務。我們在第2章提供了一個簡明的版本歷史,幫助你了解這些變化。書中介紹新特性時,我們通常會指出這些特性是在哪些版本中新增的。 助力開發人員 這些年來,Cassandra的相關開發和測試有了很大變化,它引入了CQL shell (cqlsh),並逐步將社區開發的客戶端替換為DataStax提供的驅動程序。我們將在第3章和第4章深入地介紹cqlsh,並在第8章和第9章討論這些驅動程序。在第9章還提供了Cassandra讀路徑和寫路徑的一個擴展描述,加深你對內部機制的理解,並幫助你了解不同決策帶來的影響。 輔助Cassandra運維 隨著越來越多的個人和組織在生產環境中部署Cassandra,有關生產環境中遇到的挑戰以及應對這些挑戰的實踐知識庫在日益壯大。我們增加了幾章全新的內容,包括關於安全性的第13章及關於部署和集成的第14章,另外大大拓展了有關監控、維護和性能調優的章節(第10~12章),以體現這些新的智慧結晶。 排版約定 本書使用以下排版約定: 斜體(Italic) 表示新術語、URL、email地址、文件名和文件擴展名。 定寬字體(Constant width) 表示程序代碼清單,以及在段落中用來指素,如變量或函數名、數據庫、數據類型、環境變量、語句和關鍵字。 定寬粗體(Constant width bold) 表示要由用戶鍵入的命令或其他文字。 定寬斜體(Constant width italic) 表示該文本要替換為用戶提供的值或由上下文確定的值。 使用代碼示例 本書中的代碼示例可以從https://github.com/jeffreyscarpenter/cassandra-guide下載。 本書的目的是幫助你完成工作。一般來講,你可以在你的程序和文檔中使用這些代碼,不需要聯繫我們來得到許可,除非你直接復制了大部分的代碼。 例如,如果你在編寫一個程序,使用了本書中的多段代碼,這並不需要得到許可。但是出售或發行O'Reilly書示例代碼光盤則需要得到許可。回答問題時如果引用了這本書的文字和示例代碼,這不需要得到許可。但是如果你的產品的文檔借用了本書中的大量示例代碼,則需要得到許可。 我們希望但不嚴格要求標明引用出處。引用信息通常包括書名、作者、出版商和ISBN。例如 “Cassandra: The Definitive Guide, Second Edition, by Jeff Carpenter. Copyright 2016 Jeff Carpenter, 978-1-491-93366-4”。 如果你認為你在使用代碼示例時超出了合理使用範圍或者上述許可範圍,可以隨時聯繫我們:permissions@oreilly.com。 Safari ®圖書在線 Safari圖書在線(www.safaribooksonline.com)是一個應需而變的數字圖書館,通過圖書和視頻方式提供世界作者在技術和商業領域積累的專家經驗。 技術專家、軟件開發人員、Web設計人員和企業以及有創意的專業人員都使用Safari圖書在線作為其主要資源來完成研究、解決問題、深入學習和資質培訓。 Safari圖書在線為機構、政府部門和個人提供了多種產品組合和定價程序。 訂閱者可以在一個可以快捷搜索的數據庫中訪問多家出版社提供的成千上萬種圖書、培訓視頻和正式出版前手稿,如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,以及其他數百家出版公司。關於Safari圖書在線的更多信息,請訪問我們的在線網站。 聯繫我們 請將關於本書的意見和問題通過以下地址提供給出版社: 美國: O'Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中國: 北京市西城區西直門南大街2號成銘大廈C座807室(100035) 奧萊利技術咨詢(北京)有限公司 針對這本書,我們還建有一個網頁,列出了有關勘誤、示例和其他信息。可以通過以下地址訪問這個頁面:http://bit.ly/cassandra2e。 如果對這本書有什麼意見,或者要詢問技術上的問題,請將電子郵件發送至: bookquestions@oreilly.com。 要了解關於我們的圖書、課程、會議和新聞的更多信息,請訪問我們的網站: http://www.oreilly.com。 我們的Facebook: http://facebook.com/oreilly。 我們的Twitter: http://twitter.com/oreillymedia。 我們的YouTube: http://www.youtube.com/oreillymedia。 致謝 我們要感謝很多非常優秀的人幫助這本書得以面世。 感謝我們的技術審校們:Stu Hood、Robert Schneider和Gary Dusbabek,你們為版貢獻了很有見地的評論,另外感謝Andrew Baker、Ewan Elliot、Kirk Damron、Corey Cole、Jeff Jirsa和Patrick McFadin審閱了第二版。Chris Judson的反饋對第14章的完善起到了關鍵作用。 感謝Jonathan Ellis和Patrick McFadin為這本書的版和第二版作序。還要感謝Patrick對第14章Spark集成一節的貢獻。 感謝我們的編輯Mike Loukides和Marie Beaugureau,感謝他們一直以來的支持,讓這本書變得更好。 Jeff還要感謝Eben給予的信任,給他這個機會來更新這樣一本頗具盛譽的經典著作,另外感謝Eben自始至終的鼓勵。 後,對Cassandra做出了貢獻的很多了不起的開發人員也給了我們很大啟發。向你們致敬,感謝你們建立了這樣一個優秀而強大的數據庫。
|