1. 程式人生 > >cassandra簡單介紹與基本操作

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表中檢視已有使用者;

  更多詳情請閱讀官方文件