cassandra簡單介紹與基本操作
一、使用場景:
是一款分散式的結構化資料儲存方案(NoSql資料庫),儲存結構比Key-Value資料庫(像Redis)更豐富,但是比Document資料庫(如Mongodb)支援度有限;適合做資料分析或資料倉庫這類需要迅速查詢且資料量大的應用
相關概念:
keyspace -> table –> column,對應關係型資料庫 database -> table -> column
儲存結構:
CREATE TABLE mykeyspace.mytable (
key1 text,
key2 text,
key3 text,
column1 bigint,
column2 int,
column3 timestamp,
PRIMARY KEY (key1, key2, key3);
)
key1: partitionKey,分割槽主鍵
key2, key3 clusterKey,叢集主鍵
二、安裝
官方文件:http://cassandra.apache.org/doc/latest/
1、依賴:jdk、python
本部落格中用到的版本分別為:jdk1.7、python2.7.10,、cassandra2.2.8,注意,我是在win7上做的演示
2、安裝
jdk和python的安裝我這裡就不演示,大家自行安裝;
Cassandra安裝也很簡單,將apache-cassandra-2.2.8-bin.tar.gz進行解壓即可。
三、配置
官方文件:http://cassandra.apache.org/doc/latest/getting_started/configuring.html
Cassandra配置檔案都在conf目錄下,其中cassandra.yaml可以完成cassandra的大部分配置,我們主要關注以下兩部分
1、Main runtime properties(主要的cassandra執行時屬性)
a) cluster_name:叢集名,同一叢集的多個節點,叢集名要一致
b) seeds: 種子節點,叢集中的全部機器的ip,以逗號隔開
c) storage_port: Cassandra伺服器與伺服器之間連線的埠號,一般不需要修改,但要保證此埠上沒有防火牆
d) listen_address: Cassandra叢集中伺服器與伺服器之間相互通訊的地址。如果留空,將預設使用伺服器的機器名
e) native_transport_port: 預設的CQL本地服務埠,本地的cql客戶端與伺服器互動的埠
2、Changing the location of directories(相關的檔案目錄)
a) data_file_directories: 資料檔案存放的目錄,一個或多個
b) commitlog_directory: 提交資訊的日誌檔案存放的目錄
c) saved_caches_directory: 快取存放的目錄
四、執行
配置完cassandra後,啟動cassandra很簡單,$CASSANDRA_HOME/bin目錄下雙擊cassandra.bat即可,那麼cassandra就啟動起來了,那麼我們怎麼與cassandra進行互動了?啟動cqlsh.bat即可:雙擊$CASSANDRA_HOME/bin目錄下的cqlsh.bat,接下來你就可以隨心所欲的與cassandra互動了
五、cassandra基本操作
官方文件:http://cassandra.apache.org/doc/latest/cql/index.html
1、查詢全部的keyspace:describe keyspaces;(或desc keyspaces;)
2、建立一個keyspace:CREATE KEYSPACE IF NOT EXISTS myCas WITH REPLICATION = {'class': 'SimpleStrategy','replication_factor':1};
class : 副本配置策略(總共有三種):
Simple Strategy(RackUnaware Strategy):副本不考慮機架的因素,按照Token放置在連續下幾個節點。如下圖所示,假如副本數為3,屬於A節點的資料在B.C兩個節點中也放置副本
OldNetwork Topology Strategy(RackAware Strategy):考慮機架的因素,除了基本的資料外,先找一個處於不同資料中心的點放置一個副本,其餘N-2個副本放置在同一資料中心的不同機架中
Network Topology Strategy(DatacneterShard Strategy):將M個副本放置到其他的資料中心,將N-M-1的副本放置在同一資料中心的不同機架中
3、使用某個keyspace:use myCas;
4、查詢全部的table:desc tables;
5、建立一張表:CREATE TABLE user (id int, user_name varchar, PRIMARY KEY (id) );
建立表的時候至少指定一個主鍵
6、向表中插入一條記錄:INSERT INTO user (id,user_name) VALUES (1,'zhangsan');
列名必須要顯示指定,如果表中已存在相同主鍵的記錄,那麼該操作會覆蓋表中已存在的記錄
7、查詢表中全部資料:select * from user;
cassandra查詢有很多限制,比如只能單表查詢,不支援聯表查詢和子查詢,查詢條件只支援key查詢和索引列查詢,而且key有順序的限制,等等;更多詳情請自行閱讀官方文件
8、簡單的條件查詢:select * from user where id=1;
9、建立索引:create index on user(user_name);
10、索引列查詢:select * from user where user_name='zhangsan';
若沒有在name上建立索引,那麼此查詢會報錯;
11、更新表中資料:update user set user_name='lisi' where id=2;
只支援按主鍵更新,也就是where後只能跟主鍵
12、刪除表中記錄:delete from user where id=1;
刪除某條記錄中的某個欄位,該欄位會被設成null:delete user_name from user where id=1;
無論是刪除某條記錄,還是將某個欄位置null,都只支援按主鍵刪除,也就是where後只能跟主鍵
13、批量操作:Multiple INSERT, UPDATE and DELETE can be executed in a single statement by grouping them through a BATCH statement(通過batch能夠執行多個insert、update以及delete),例如:
BEGIN BATCH
INSERT INTO user (id, user_name) VALUES (2, 'second user');
UPDATE user SET user_name = 'ps22dhds' WHERE id = 2;
INSERT INTO user (id, user_name) VALUES (3, 'lee long');
DELETE user_name FROM user WHERE id = 3;
APPLY BATCH;
六、登入認證
官方文件:http://cassandra.apache.org/doc/latest/cql/security.html#
不知道大家發現沒有,前面的cassandra操作是在沒有登入的情況下進行的,這在實際生產環境中肯定是不行的,那麼接下來我們看看cassandra的登入認證
1、修改配置檔案cassandra.yaml
把預設的authenticator: AllowAllAuthenticator執行所有人登入設定為用密碼登入:authenticator: PasswordAuthenticator
2、登入cassandra,然後建立新的使用者
配置檔案修改完後,啟動cassandra(如若雙擊cassandra.bat啟動報錯,可以試著在cmd中啟動cassandra);接著啟動客戶端: cqlsh.bat -ucassandra -pcassandra;
cassandra使用者是預設的,客戶端啟動成功後,建立新的使用者:create user admin with password 'admin' superuser; 新使用者建立成功後,退出客戶端:exit;
用新使用者登入:cqlsh.bat -uadmin –padmin; 刪除預設使用者cassandra:drop user cassandra;
記得把預設使用者刪除掉;另外,可以到system_auth下的roles表中檢視已有使用者;
更多詳情請閱讀官方文件