Cassandra入門簡(jiǎn)介

1. 什么是Apache Cassandra?

Apache Cassandra是一個(gè)開源,分布式和分散式/分布式存儲(chǔ)系統(tǒng)(數(shù)據(jù)庫),用于管理遍布世界各地的大量結(jié)構(gòu)化數(shù)據(jù)。它提供高可用性的服務(wù),沒有單點(diǎn)故障。下面列出了Apache Cassandra的一些值得注意的地方:

  • 它是可擴(kuò)展,容錯(cuò)和一致的。
  • Apache Cassandra是一個(gè)開源,分布式和分散式/分布式存儲(chǔ)系統(tǒng)(數(shù)據(jù)庫),用于管理遍布世界各地的大量結(jié)構(gòu)化數(shù)據(jù)。它提供高可用性的服務(wù),沒有單點(diǎn)故障。
  • 它是一個(gè)面向列的數(shù)據(jù)庫。
  • 它的分布設(shè)計(jì)基于Amazon的Dynamo及其在Google的Bigtable上的數(shù)據(jù)模型。
  • 創(chuàng)建在Facebook,它與關(guān)系數(shù)據(jù)庫管理系統(tǒng)有很大的不同。
  • Cassandra實(shí)現(xiàn)了一個(gè)沒有單點(diǎn)故障的Dynamo風(fēng)格的復(fù)制模型,但增加了一個(gè)更強(qiáng)大的“列族”數(shù)據(jù)模型。
  • Cassandra被一些最大的公司使用,如Facebook,Twitter,Cisco,Rackspace,ebay,Netflix等。
2. Cassandra的特點(diǎn)

Cassandra因其卓越的技術(shù)特性而變得如此受歡迎。下面給出了Cassandra的一些特性:

  • 彈性可擴(kuò)展性 - Cassandra是高度可擴(kuò)展的; 它允許添加更多的硬件以適應(yīng)更多的客戶和更多的數(shù)據(jù)根據(jù)要求。
  • 始終基于架構(gòu) - Cassandra沒有單點(diǎn)故障,它可以連續(xù)用于不能承擔(dān)故障的關(guān)鍵業(yè)務(wù)應(yīng)用程序。
  • 快速線性性能 - Cassandra是線性可擴(kuò)展性的,即它為你增加集群中的節(jié)點(diǎn)數(shù)量增加你的吞吐量。因此,保持一個(gè)快速的響應(yīng)時(shí)間。
  • 靈活的數(shù)據(jù)存儲(chǔ) - Cassandra適應(yīng)所有可能的數(shù)據(jù)格式,包括:結(jié)構(gòu)化,半結(jié)構(gòu)化和非結(jié)構(gòu)化。它可以根據(jù)您的需要?jiǎng)討B(tài)地適應(yīng)變化的數(shù)據(jù)結(jié)構(gòu)。
  • 便捷的數(shù)據(jù)分發(fā) - Cassandra通過在多個(gè)數(shù)據(jù)中心之間復(fù)制數(shù)據(jù),可以靈活地在需要時(shí)分發(fā)數(shù)據(jù)。
  • 事務(wù)支持 - Cassandra支持屬性,如原子性,一致性,隔離和持久性(ACID)。
  • 快速寫入 - Cassandra被設(shè)計(jì)為在廉價(jià)的商品硬件上運(yùn)行。 它執(zhí)行快速寫入,并可以存儲(chǔ)數(shù)百TB的數(shù)據(jù),而不犧牲讀取效率。
3. 相關(guān)概念

keyspace -> table –> column,對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫 database -> table -> column
存儲(chǔ)結(jié)構(gòu):
CREATE TABLE mykeyspace.mytable (
  key1 text,
  key2 text,
  key3 text,
  column1 bigint,
  column2 int,
  column3 timestamp,
  PRIMARY KEY (key1, key2, key3);
    )
    key1: partitionKey,分區(qū)主鍵,用來決定Cassandra會(huì)使用集群中的哪個(gè)結(jié)點(diǎn)來記錄該數(shù)據(jù),每個(gè)Partition Key對(duì)應(yīng)著一個(gè)特定的Partition;

    key2, key3 clusterKey,集群主鍵,Clustering Key用來在Partition內(nèi)部排序,默認(rèn)為ASC。如果一個(gè)Primary Key只包含一個(gè)域,那么其將只擁有Partition Key而沒有Clustering Key。
4. Cassandra安裝

依賴:jdk、python,并且要保證jvm(java命令)和jdk(javac命令)版本一致,python的版本也會(huì)根據(jù)你下載的Cassandra版本有要求,具體請(qǐng)查看官方文檔:http://cassandra.apache.org/doc/latest/,jdk和python的安裝我這里就不演示,大家自行安裝;這里只說一下Cassandra的安裝過程;

  • 去官網(wǎng)下載文件,下載最新版本即可,https://cassandra.apache.org/
  • 解壓到你的的目錄下,例如:E:\apache-cassandra-3.11.2\bin
  • 運(yùn)行cmd,cd到你解壓的目錄下,運(yùn)行cassandra.bat,如果出現(xiàn)

    證明運(yùn)行成功,否則檢查錯(cuò)誤;

  • 如果運(yùn)行成功,在命令行輸入cqlsh,就可以愉快地寫cql代碼啦~,如果你的電腦中裝有兩個(gè)python版本,如有python35和python27,可以不用修改環(huán)境變量,直接在運(yùn)行cqlsh的時(shí)候前面加上python27的路徑,如圖:
5. 數(shù)據(jù)類型

下面只是簡(jiǎn)單介紹了一下,具體用法請(qǐng)查看官方文檔:https://cassandra.apache.org/doc/latest/cql/types.html#grammar-token-collection_type。

  • Native type:
  • Collection

    CQL支持3種集合類型:Map、Set和List。這些集合的類型由以下定義:
  • User-defined types
    例:
CREATE TYPE phone (
    country_code int,
    number text,
)
CREATE TYPE address (
    street text,
    city text,
    zip text,
    phones map<text, phone>
)
CREATE TABLE user (
    name text PRIMARY KEY,
    addresses map<text, frozen<address>>
)
INSERT INTO user (name, addresses)
          VALUES ('z3 Pr3z1den7', {
              'home' : {
                  street: '1600 Pennsylvania Ave NW',
                  city: 'Washington',
                  zip: '20500',
                  phones: { 'cell' : { country_code: 1, number: '202 456-1111' },
                            'landline' : { country_code: 1, number: '...' } }
              },
              'work' : {
                  street: '1600 Pennsylvania Ave NW',
                  city: 'Washington',
                  zip: '20500',
                  phones: { 'fax' : { country_code: 1, number: '...' } }
              }
          })
  • Tuples
    例:
CREATE TABLE durations (
    event text,
    duration tuple<int, text>,
)
INSERT INTO durations (event, duration) VALUES ('ev1', (3, 'hours'));
  • Custom types
    這種類型用法比較復(fù)雜并且不太友好,可以用user-defined type 替代之。
6. 基本操作

具體教程可以參考w3cshool教程https://www.w3cschool.cn/cassandra/cassandra_create_keyspace.html。這里只介紹幾種常用基本命令:

  • 創(chuàng)建一個(gè)keyspace:CREATE KEYSPACE IF NOT EXISTS myCas WITH REPLICATION = {'class': 'SimpleStrategy','replication_factor':1};
    class : 副本配置策略(總共有三種):
    Simple Strategy(RackUnaware Strategy):為集群指定簡(jiǎn)單的復(fù)制因子,副本不考慮機(jī)架的因素,按照Token放置在連續(xù)下幾個(gè)節(jié)點(diǎn);
    OldNetwork Topology Strategy(RackAware Strategy):考慮機(jī)架的因素,除了基本的數(shù)據(jù)外,先找一個(gè)處于不同數(shù)據(jù)中心的點(diǎn)放置一個(gè)副本,其余N-2個(gè)副本放置在同一數(shù)據(jù)中心的不同機(jī)架中;
    Network Topology Strategy(DatacneterShard Strategy):將M個(gè)副本放置到其他的數(shù)據(jù)中心,將N-M-1的副本放置在同一數(shù)據(jù)中心的不同機(jī)架中;
  • 查詢?nèi)康膋eyspace:describe keyspaces;(或desc keyspaces;)
  • 使用某個(gè)keyspace:use myCas;
  • 查詢?nèi)康膖able:desc tables;
  • 創(chuàng)建一張表:CREATE TABLE user (id int, user_name varchar, PRIMARY KEY (id) ); 注意創(chuàng)建表的時(shí)候至少指定一個(gè)主鍵;
  • 刪除表: drop table user;
  • 描述一張表:desc user;
  • 向表中插入一條記錄:INSERT INTO user (id,user_name) VALUES (1,'zhangsan');
  • 查詢表中全部數(shù)據(jù):select * from user;
    cassandra查詢有很多限制,比如只能單表查詢,不支持聯(lián)表查詢和子查詢,查詢條件只支持key查詢和索引列查詢,而且key有順序的限制,等等;更多詳情請(qǐng)自行閱讀官方文檔;
  • 簡(jiǎn)單的條件查詢:select * from user where id=1;
  • 創(chuàng)建索引:create index on user(user_name);
  • 索引列查詢:select * from user where user_name='zhangsan';
    若沒有在name上創(chuàng)建索引,那么此查詢會(huì)報(bào)錯(cuò);索引列只可以用=號(hào)查詢,不能使用>或<;如果想用>或<查詢,可以加上ALLOW FILTERING,例如:select * from teacher where age>35 ALLOW FILTERING;如果查詢條件里,有一個(gè)是根據(jù)索引查詢,那其它非索引非主鍵字段,也可以通過加一個(gè)ALLOW FILTERING來過濾實(shí)現(xiàn);
  • 更新表中數(shù)據(jù):update user set user_name='lisi' where id=2;
    只支持按主鍵更新,也就是where后只能跟主鍵
  • 刪除表中記錄:delete from user where id=1;
    刪除某條記錄中的某個(gè)字段,該字段會(huì)被設(shè)成null:delete user_name from user where id=1;無論是刪除某條記錄,還是將某個(gè)字段置null,都只支持按主鍵刪除,也就是where后只能跟主鍵;
  • 刪除自定義類型: drop type user_defined;
7. 常見錯(cuò)誤解決方法
  • “except ImportError, e”這種錯(cuò)誤應(yīng)該是你的python版本是3.0以上的,而對(duì)應(yīng)版本的Cassandra需要2.x的版本,因此你可能需要重新裝一個(gè)2.x的版本;
  • 另外要保證jdk和jvm版本一致,可以在cmd命令下查看:javac -version 和 java -version;
  • Cassandra中文查詢亂碼,可以在命令行輸入chcp 65001,即可設(shè)為 UTF-8 編碼。
  • 官網(wǎng)提供的常見問題:http://cassandra.apache.org/doc/latest/faq/index.html;
8. Cassandra-java基本操作

可以參考http://www.cnblogs.com/youzhibing/p/6607082.html。

9. Cassandra高級(jí)操作

可以參考: cassandra高級(jí)操作之索引、排序以及分頁


參考文章:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1基本安裝1.1在基于RHEL的系統(tǒng)中安裝Cassandra1.1.1必要條件? YUM包管理器? Root或...
    戰(zhàn)神湯姆閱讀 1,118評(píng)論 0 4
  • Apache Cassandra 是一個(gè)開源的、分布式、去中心化、彈性可擴(kuò)展、高可用性、容錯(cuò)、一致性可調(diào)、面向行的...
    梁睿坤閱讀 14,257評(píng)論 2 25
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • 2018.6.1 星期五 晴 今天是兒童節(jié)!祝寶貝們節(jié)日快樂,早上一起床就問我:“媽媽,你...
    寶貝涵程閱讀 225評(píng)論 0 0
  • 距七月初從東京學(xué)習(xí)返程,眨眼就兩個(gè)半月了。十月又要繼續(xù)秋季學(xué)習(xí),答應(yīng)清一老師的文章卻一直遲遲沒有落筆,很是慚愧???..
    周小葵OnRoad閱讀 949評(píng)論 2 3

友情鏈接更多精彩內(nèi)容