一、Cassandra簡介
Cassandra是一個混合型的非關係的數據庫,類似於Google的BigTable。其主要功能比Dynamo (分佈式的Key-Value存儲系統)更豐富,但支持度卻不如文檔存儲MongoDB(介於關係數據庫和非關係數據庫之間的開源產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。支持的數據結構非常鬆散,是類似json的bjson格式,因此可以存儲比較複雜的數據類型)。Cassandra最初由Facebook開發,後轉變成了開源項目。它是一個網絡社交雲計算方面理想的數據庫。以Amazon專有的完全分佈式的Dynamo爲基礎,結合了Google BigTable基於列族(Column Family)的數據模型。P2P去中心化的存儲。很多方面都可以稱之爲Dynamo 2.0。
二、安裝與配置
- 解壓安裝包
tar -zxvf apache-cassandra-3.11.3-bin.tar.gz -C ~/training/
- 設置環境變量
CASSANDRA_HOME=/root/training/apache-cassandra-3.11.3
export CASSANDRA_HOME
PATH=$CASSANDRA_HOME/bin:$PATH
export PATH
- 將以下三個地址設置爲Linux相應的IP
listen_address: 192.168.56.111
rpc_address: 192.168.56.111
- seeds: "192.168.56.111"
- 啓動Cassandra
注意:要以root用戶啓動Cassandra,需要使用-R參數。
命令:cassandra -R
- 驗證Cassandra運行環境:nodetool工具
命令:nodetool status
從Cassandra 2.1版本開始,日誌和數據都被存放在logs和data的子目錄下。老版本默認保存在/var/log/cassandra和 /var/lib/cassandra。
三、Cassandra的配置參數
核心配置文件:conf/cassandra.yaml,啓動過程中的日誌信息如下圖所示:
- 主要的運行時參數
cluster_name: 集羣的名稱
storage_port:節點內部通信的端口(默認: 7000)
listen_address:Cassandra綁定的、用來連接其他Cassandra節點的IP地址或者主機名稱。(默認: localhost)
native_transport_port:客戶端監聽CQL本地傳輸的端口(默認: 9042)
- 目錄相關的參數
data_file_directories:這個目錄位置就是表數據存儲的地方(在SSTables裏)。Cassandra將數據均勻的分佈在這個位置,受配置的壓縮策略粒度的限制。
commitlog_directory:這個目錄是commit log 存放的地方。爲了獲得最佳的寫入性能,將commit log放在單獨的磁盤分區,或者(理想情況下)和data文件目錄分開的物理設備上。commit log只能追加的。
saved_caches_directory:這個目錄是table key和row緩存存放的地方。默認位置:$CASSANDRA_HOME/data/saved_caches
hints_directory:設置hints的存儲位置(默認: $CASSANDRA_HOME/data/hints)
四、Cassandra的基本操作
(一)登錄CQL客戶端:cqlsh localhost
- 查看錶system.local的結構:
- 查詢系統的信息:
- 查看錶空間:describe keyspaces;
- 查看已有表:describe tables;
- 查看錶結構:describe table table_name;
(二)使用Cassandra的Java客戶端
Cassandra使用cql語言作爲操作語言,Cassandra在2.0之後,在操作上越來越像sql數據庫的操作,這樣想從傳統關係型數據庫,切換到Cassandra的話,上手成本也越來越低。使用官方java驅動操作Cassandra非常簡單。maven引入相關的依賴如下所示:
<dependency>
<groupId>info.archinnov</groupId>
<artifactId>achilles-core</artifactId>
<version>6.0.0</version>
<classifier>shaded</classifier>
</dependency>
下面執行CRUD操作: