前言
第1 章 認識NoSQL
1.1 NoSQL 的起源和發展現狀
1.2 為什麼要使用NoSQL
1.3 開放原始碼NoSQL 產品介紹
1.3.1 Key/Value 的NoSQL 資料庫
1.3.2 檔案導向的NoSQL 資料庫
1.3.3 序列導向的NoSQL 資料庫
1.3.4 圖形導向的NoSQL 資料庫
1.4 本章小結
第2 章 Cassandra 快速入門
2.1 在Windows 環境執行單機版Cassandra
2.1.1 設定JRE
2.1.2 設定執行Cassandra 0.6.x
2.1.3 設定執行Cassandra 0.7.x
2.2 在Linux 環境執行單機版Cassandra
2.2.1 設定JRE
2.2.2 設定執行Cassandra 0.6.x
2.2.3 設定執行Cassandra 0.7.x
2.3 Cassandra 的資料模型
2.3.1 Column
2.3.2 SuperColumn
2.3.3 ColumnFamily
2.3.4 Keyspace
2.4 Cassandra 的資料排序規則
2.5 設定資料類型
2.6 使用命令提示字元工具與Cassandra 互動
2.6.1 與Cassandra 0.6.x 進行互動
2.6.2 與Cassandra 0.7.x 進行互動
2.7 本章小結
第3 章 理解Cassandra 編輯介面
3.1 多語系服務開發框架Thrift
3.2 Cassandra 的資料類型
3.2.1 Column
3.2.2 SuperColumn
3.2.3 ColumnOrSuperColumn
3.2.4 ColumnParent
3.2.5 ColumnPath
3.2.6 SliceRange
3.2.7 SlicePredicate
3.2.8 Deletion
3.2.9 Mutation
3.2.10 KeyRange
3.2.11 KeySlice
3.2.12 TokenRange
3.2.13 AuthenticationRequest
3.2.14 ConsistencyLevel
3.2.15 NotFoundException
3.2.16 InvalidRequestException
3.2.17 UnavailableException
3.2.18 TimedOutException
3.2.19 AuthenticationException
3.2.20 AuthorizationException
3.3 Cassandra 的編譯介面
3.3.1 get
3.3.2 get_slice
3.3.3 multiget_slice
3.3.4 get_count
3.3.5 get_range_slices
3.5.6 insert
3.3.7 remove
3.3.8 batch_mutate
3.3.9 describe_keyspaces
3.3.10 describe_keyspace
3.3.11 describe_cluster_name
3.3.12 describe_version
3.3.13 describe_ring
3.4 Cassandra 0.7.x 版本新增功能
3.4.1 二階索引
3.4.2 動態修改Schema
3.4.3 自動清除過期資料
3.5 本章小結
第4 章 應用於Cassandra 的線上交易系統
4.1 需求分析
4.2 資料模型設計
4.2.1 Seller
4.2.2 Buyer
4.2.3 Product
4.2.4 ProductCategory
4.2.5 Comment
4.3 編碼實現
4.3.1 修改Keyspace 設置
4.3.2 建立Eclipse 專案
4.3.3 實體物件實現
4.3.4 Cassandra 資料操作介面實現
4.4 系統功能驗證
4.4.1 BuyerDao 功能驗證
4.4.2 SellerDao 功能驗證
4.4.3 ProductDao 功能驗證
4.5 遷移到Cassandra 0.7.x
4.5.1 建立Eclipse 專案
4.5.2 修改編譯錯誤程式碼
4.5.3 新增Schema 線上定義功能
4.5.4 功能驗證
4.6 本章小結
第5 章 Cassandra 的叢集機制
5.1 一致性Hash
5.1.1 理解一致性Hash
5.1.2 一致性Hash 在Cassandra 中的應用
5.2 Gossip:叢集節點之間的通訊協議
5.2.1 FailureDetector
5.2.2 Gossiper
5.3 叢集的資料備份機制
5.3.1 EndpointSnitch
5.3.2 ReplicationStrategy
5.4 叢集狀態變化的處理機制
5.4.1 StorageLoadBalancer
5.4.2 StorageService
5.4.3 MigrationManager
5.5 本章小結
第6 章 Cassandra 的內部資料儲存結構
6.1 Cassandra 中的資料存放規則
6.2 Commilog
6.3 Memtable
6.4 SSTable
6.4.1 Filter 文件
6.4.2 Index 文件
6.4.3 Data 文件
6.4.4 Statistics 文件
6.5 系統表空間
6.6 本章小結
第7 章 Cassandra 的資料更新機制
7.1 資料更新流程
7.2 叢集資料更新策略
7.2.1 ANY
7.2.2 ONE
7.2.3 QUORUM
7.2.4 LOCAL_QUORUM
7.2.5 EACH_QUORUM
7.2.6 ALL
7.3 二階索引
7.3.1 為什麼需要二階索引
7.3.2 Cassandra 二階索引更新過程
7.4 本章小結
第8 章 Cassandra 的資料讀取機制
8.1 資料讀取流程
8.1.1 弱讀取
8.1.2 強讀取
8.2 叢集資料讀取策略
8.2.1 ONE
8.2.2 QUORUM
8.2.3 LOCAL_QUORUM
8.2.4 EACH_QUORUM
8.2.5 ALL
8.3 讀取修復
8.4 資料暫存
8.4.1 RowCache
8.4.2 KeyCache
8.5 二階索引
8.6 本章小結
第9 章 Cassandra 的資料壓縮機制
9.1 為什麼要進行資料壓縮
9.2 如何控制資料壓縮
9.3 資料壓縮流程
9.4 維護Cassandra 中的資料
9.4.1 資料清理壓縮
9.4.2 資料一致性校驗壓縮
9.5 本章小結
第10 章 Cassandra 的啟動流程
10.1 Cassandra 啟動腳本
10.2 Cassandra 啟動流程
10.2.1 設定log4j
10.2.2 讀取校驗設定文件訊息
10.2.3 載入所有的資料文件
10.2.4 修復資料
10.2.5 啟動Gossiper 服務
10.2.6 判斷是否需要進行Bootstrap 操作
10.2.7 監聽Thrift 連接埠,提供Thrift 服務
10.3 本章小結
第11 章 在分佈式環境中使用的Cassandra
11.1 在Linux 環境中搭建與使用Cassandra 叢集
11.1.1 設定JRE
11.1.2 部署Cassandra 可執行文件
11.1.3 修改Cassandra 設定文件
11.1.4 啟動Cassandra
11.2 Cassandra 執行設定項詳解
11.3 Cassandra 叢集的執行和維護
11.3.1 查看叢集的執行情況
11.3.2 新增節點
11.3.3 刪除節點
11.3.4 移動節點
11.3.5 資料維護
11.4 本章小結
第12 章 Cassandra 與Hadoop 的整合
12.1 Hadoop 快速入門
12.1.1 Hadoop 簡介
12.1.2 HDFS
12.1.3 Map/Reduce
12.1.4 設定單機版Hadoop
12.1.5 編寫Map/Reduce 程式
12.2 為什麼要整合Cassandra 與Hadoop
12.3 使用Map/Reduce 匯入資料到Cassandra 中
12.4 將Cassandra 中的資料作為Map/Reduce 輸入
12.5 本章小結
第13 章 Cassandra 最佳實踐
13.1 避免Cassandra 自身的限制
13.1.1 不要盲目使用Super Column
13.1.2 硬碟的容量大小限制
13.1.3 注意系統大小限制
13.2 資料壓縮策略
13.3 使用高階的客戶端
13.3.1 Pycassa
13.3.2 Hector
13.3.3 FluentCassandra
13.3.4 Cassandra
13.3.5 phpcassa
13.4 負載平衡
13.4.1 隨機選取
13.4.2 暫存叢集訊息
13.5 謹慎使用二階索引
13.6 透過JMX 監測Cassandra
13.7 調整JVM 啟動參數
13.8 使用適合的系統設定參數
13.9 本章小結
附錄A 在Eclipse 中修改Cassandra 原始程式碼
A .1 設定環境
A .2 下載Cassandra 原始碼
A .3 編譯Cassandra
A .4 在Eclipse 中修改Cassandra 原始碼
A .5 執行單元測試
A .6 打包發佈
附錄B CassSeller 程式碼
B .1 cassSeller.app.App
B .2 cassSeller.dao.BuyerDao
B .3 cassSeller.dao.ProductDao
B .4 cassSeller.dao.SellerDao
B .5 cassSeller.dao.impl.BuyerDaoImpl
B .6 cassSeller.dao.impl.ProductDaoImpl
B .7 cassSeller.dao.impl.SellerDaoImpl
B .8 cassSeller.model.Buyer
B .9 cassSeller.model.Comment
B .10 cassSeller.model.Product
B .11 cassSeller.model.Seller
附錄C CassSeller-0.7 程式碼
C .1 cassSeller.app.App
C .2 cassSeller.dao.BuyerDao
C .3 cassSeller.dao.ProductDao
C .4 cassSeller.dao.SellerDao
C .5 cassSeller.dao.impl.BuyerDaoImpl
C .6 cassSeller.dao.impl.ProductDaoImpl
C .7 cassSeller.dao.impl.SchemaIniter
C .8 cassSeller.dao.impl.SellerDaoimpl
C .9 cassSeller.model.Buyer
C .10 cassSeller.model.Comment
C .11 cassSeller.model.Product
C .12 cassSeller.model.Seller