《NOSQL數據庫技術》課件第9章-Cassandra列族數據庫_第1頁
《NOSQL數據庫技術》課件第9章-Cassandra列族數據庫_第2頁
《NOSQL數據庫技術》課件第9章-Cassandra列族數據庫_第3頁
《NOSQL數據庫技術》課件第9章-Cassandra列族數據庫_第4頁
《NOSQL數據庫技術》課件第9章-Cassandra列族數據庫_第5頁
已閱讀5頁,還剩63頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

目錄CassandraDB基礎1CQL數據管理操作2Cassandra集群管理3Cassandra數據庫管理4小結51官網:/doc/latest/9.1CassandraDB基礎2本章學習內容思維導圖如下9.1.1下載與安裝Cassandra支持多平臺安裝官方網址:/文件名為apache-cassandra-3.11.6-bin.tar.gz解壓到安裝目錄下39.1.1下載與安裝這里以Windows平臺為例說明安裝過程,Linux平臺操作過程類似,一般包含如下5個步驟。1)配置環境變量:配置CASSANDRA_HOME為安裝路徑,并在path后面增加“%CASSANDRA_HOME%\bin;”。2)確認環境變量設置成功:重新開啟新的命令窗口,請注意一定要新開命令窗口才可以查看到被新建或修改的環境變量。在新的命令窗口中輸入"echo%Java_home%"或"echo%Cassandra_Home%"輸出環境變量的值,會獲取到剛才設置的值。3)修改默認配置文件,即%CASSANDRA_HOME%\conf文件夾下的cassandra.yaml文件。9.1.1下載與安裝3)修改默認配置文件(續),即%CASSANDRA_HOME%\conf文件夾下的cassandra.yaml文件①修改數據存儲文件路徑,先本地新建data目錄,對應配置項如圖所示將其修改為本地新建的data路徑,示例如下。data_file_directories:-D:\BDA\apache-cassandra-3.11.6\data9.1.1下載與安裝②修改日志文件存儲路徑,先本地新建commitLog目錄,對應配置項如圖所示。將其修改為本地新建的日志文件存儲路徑,示例如下。

commitLog_directory:D:\BDA\apache-cassandra-3.11.6\commitLog③修改緩存文件存儲路徑,先本地新建saved_caches目錄,同前找到對應配置項后,修改為本地路徑,示例如下。saved_caches_directory:D:\BDA\apache-cassandra-3.11.6\saved_caches9.1.1下載與安裝④啟動前,在%CASSANDRA_HOME%\bin下的cassandra.bat與cassandra.in.bat兩個文件中分別添加以下內容,兩個環境變量的值修改為讀者自己的環境配置。setJAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_181setCASSANDRA_HOME=D:\BDA\apache-cassandra-3.11.6⑤啟動服務,執行%CASSANDRA_HOME%\bin下的cassandra.bat,看到如圖所示內容即表示安裝成功。9.1.1下載與安裝Windows下運行Cassandra除了需要JRE外,還需要Python2.7,如果安裝了Python3以上的環境,需要單獨安裝一個Python2.7的環境;在Cassandra安裝目錄下的bin\cqlsh.bat文件設置Python2.7的路徑。如圖所示,同時需將Python2.7安裝路徑添加到系統環境變量Path中;或者為方便切換Python2與Python3可創建PythonHOME環境變量,并指向Python2.7安裝路徑。Cassandra數據庫配置文件是YAML格式文件注意修改參數時格式縮進和對齊要求啟動服務后在命令行窗口輸入cqlsh即可進入shell交互環境把Cassandra安裝成服務的方法1)在bin目錄下建立目錄daemon2)下載并將prunsrv.exe拷貝至daemon文件夾下3)在bin目錄下執行Cassandra.batinstall參考:https:///huilan_same/article/details/5183689599.1.1下載與安裝9.1.1下載與安裝在CQLSH交互環境下查詢當前集群信息命令,如看到如圖所示結果表示安裝成功執行cqlsh--help命令可顯示有關cqlsh命令的幫助信息在CentOS上可以采用“yum”命令在線安裝Cassandra最新穩定版本bin目錄和tool/bin目錄下提供的常用工具nodetool:用于監控管理集群節點的工具包。sstableloader:加載SStable到集群中。sstablescrub:刪除集群中的冗余數據9.1.2數據類型Cassandra數據庫提供了豐富的數據類型原生類型(Native_type)集合類型(Collection_type)用戶定義類型(User_defined_type)元組類型(Tuple_type)自定義類型(Custom_type)111、Cassandra原生類型(Native_type)129.1.2數據類型數據類型常量描述1.字符串型asciistring表示ASCII字符串textstring表示UTF8編碼的字符串varcharstring表示UTF8編碼的字符串2.整型bigintinteger表示64位有符號長整數intinteger表示32位有符號整數tinyintinteger表示8位有符號整數smallintinteger表示16位有符號整數varintinteger表示可變精度整數3.浮點型decimalinteger,float表示精度可變浮點數doubleinteger,float表示64位IEEE-754浮點數floatinteger,float表示32位IEEE-754浮點數1、Cassandra原生類型(Native_type)139.1.2數據類型數據類型常量描述4.日期型dateinteger,string一般格式為:yyyy-mm-ddtimeinteger,string一般格式為:hh:mm:ss[.fff]timestampinteger,string表示時間戳,精度到毫秒timeuuiduuid時間相關的uuid,可以使用now()作為值durationduration持續時間,使用ISO8601格式5.其他類型Booleanboolean表示true或falsecounterinteger表示計數器列,可進行增量、減量運算inetstring表示一個IP地址,IPv4或IPv6blobblob表示任意字節數組uuiduuid表示UUID數據/doc/3.11.6/cql/types.html#dates2、Cassandra數據庫集合數據類型主要包含以下4種①列表類型:列表中的值可以重復list<T>[value,value,...]

②集合類型:集合中的值不可以重復出現set<T>{value,value,...}③鍵值對集合:使用column['key']來訪問map<T,T>{'key1':value1,'key2':value2}④frozen:是對前面三種集合類型的限定,將其所有元素進行序列化,形成一個整體。沒用frozen時,集合類型均可以對單個元素操作,限定后只能對整體進行操作。149.1.2數據類型3、Cassandra用戶定義類型(User_defined_type)1)創建類型:CREATETYPE語句創建新的用戶定義類型,每個類型都是一組列名稱、列類型的集合。字段類型可以是任何合法類型語法:createtype<name>(

column1cql_type,……

columnNcql_type);159.1.2數據類型示例:其中test是鍵空間cqlsh:test>createtypeaddress(provincetext,citytext,regiontext,HouseNumbertext);引用UDT創建其他UDT示例如下。CREATETYPEwork_and_home_addresses(home_addressaddress,work_addressaddress)2)查詢所有的UDT類型:cqlsh:test>describetypes;3)查看某個類型:cqlsh:test>describetypeaddress;4)修改某個UDT,如添加一個新列。語法:ALTERTYPE<name>ADDcolumncql_type;示例:cqlsh:test>ALTERTYPEaddressADDPostalCodetext;5)刪除UDT類型:DROPTYPE<name>;169.1.2數據類型4、元組類型(Tuple_type):匿名UDT自定義元組類型,只需要定義元組每個元素的類型即可,不需要定義每個元素的名稱。自定義元組類型一般語法形式為:

tuple<text,text>,對應的值為(value,value,...)。元組默認是frozen的,即作為一個整體操作。示例:CREATETABLEdurations(eventtext,durationtuple<int,text>,)INSERTINTOdurations(event,duration)VALUES('ev1',(3,'hours'));5、自定義類型(Custom_type):主要出于向后兼容性目的設計,官方已不建議使用,UDT可滿足應用開發需求。179.1.2數據類型9.1.3CQL簡介CQL是CassandraQueryLanguage的縮寫類似于SQL的語法,但不支持JOIN和子查詢使用標識符來標識tables、columns和其他對象標識符命名一般規則,按以下正則表達式定義:

[a-zA-Z][a-zA-Z0-9_]*標識符和關鍵字是大小寫不敏感一般約定關鍵字大寫,自定義標識符小寫注釋單行注釋:采用--或//開頭多行注釋:使用“/*注釋內容*/”方式表示189.1.3CQL簡介CQL語句可以分為以下3類DDL:定義或修改數據存儲結構。DML:數據操作語言,新增、修改與刪除數據等。Queries:查詢數據。CQL常用Shell命令1)登錄Shell。>cqlsh2)查看命令幫助。>cqlsh–help3)查看當前版本信息。>cqlsh–version199.1.3CQL簡介CQL常用Shell命令(續)4)使用用戶名和密碼登錄,默認用戶名和密碼都是cassandra。>cqlsh-u'cassandra'-p'cassandra'5)啟動時執行cql(可用于導入數據,或者執行文件中的cql)。>cqlsh--file="D:\users.cql"6)捕獲命令,所有的select查詢的結果都將保存在output文件中。cqlsh:ks_test>capture'D:\cassandra\data\output'7)關閉捕獲:cqlsh:test>captureoff;209.1.3CQL簡介CQL常用Shell命令(續)8)查看當前主機信息。cqlsh:ks_test>showhost;ConnectedtoTestClusterat:9042.9)關閉Shell。

cqlsh:ks_test>exit10)退出Shell。cqlsh:ks_test>quit11)描述集群信息,如集群的名稱和所使用的環地址分區算法。

cqlsh:ks_test>describecluster;219.1.3CQL簡介22CQL常用Shell命令(續)12)查看鍵空間表信息,類似于查看數據庫中表列表。

cqlsh:ks_test>describetables;13)清空之前屏幕顯示的信息。

cqlsh:ks_test>Clear;14)批量命令執行方法可以將多條CQL語句保存成文本文件(*.cql文件)。*.cql文件可以在系統命令行中,按照以下語法執行。

>cqlsh--file'file_name'也可以在cqlsh環境中利用SOURCE命令執行。

cqlsh:ks_test>SOURCE'file_name'目錄CassandraDB基礎1CQL數據管理操作技術2Cassandra集群管理3Cassandra數據庫管理4小結523官網:/doc/latest/9.2CQL數據管理操作技術1、鍵空間操作2、數據表操作3、數據CRUD操作244、二級索引操作5、函數支持9.2.1鍵空間操作1、創建鍵空間:基本語法如下

CREATEKEYSPACE<identifier>WITH<properties>語句用來創建一個新的頂級Keyspace。Keyspace,即數據庫,需定義復制策略和其他配置選項。關鍵參數說明1)復制策略SimpleStrategy:簡單策略,在一個數據中心的情況下使用,定義了在整個集群中的簡單復制因子。只支持‘replication_factor’一個子選項,且是必選項。NetworkTopoLogyStrategy:網絡拓撲策略,用于多個數據中心,可以為每個數據中心定義單獨的復制因子。子選項以key-value方式定義,key表示數據中心名稱,value表示此數據中心的復制因子。259.2.1鍵空間操作1、創建鍵空間:基本語法如下

CREATEKEYSPACE<identifier>WITH<properties>關鍵參數說明(續)2)復制因子(replication_factor):整數取值,代表副本數。3)持久寫入(durable_write):boolean值,默認true。如果設置為false,則不會將更新寫入提交日志。示例1:cqlsh>CREATEKeyspaceks_testWITHreplication={'class':'SimpleStrategy','replication_factor':3};示例2:cqlsh>CREATEKeyspaceks_multidctestWITHreplication={'class':'NetworkTopoLogyStrategy','DC1':1,'DC2':3}ANDdurable_writes=false;262.查看鍵空間使用“DESCRIBE”命令,可以查詢某一具體的鍵空間,如下示例。某個鍵空間的相關信息包含創建鍵空間表的語句、索引表indexes、視圖表views、函數表functions、觸發器表triggers、類型表types等。

cqlsh>DESCRIBEks_test;Cassandra有一個稱為system的內部keyspace,用于存儲關于集群的元數據。

cqlsh>DESCRIBEsystem;

將返回system鍵空間下,各個系統表的創建語句。279.2.1鍵空間操作283.切換當前要使用的鍵空間基本語法:

USE<identifier>示例:

cqlsh>USEks_test;4.修改鍵空間屬性修改鍵空間的replication和durable_writes參數值鍵名稱不能更改。一般語法:

ALTERKEYSPACE<name>WITHREPLICATION={'class':'strategyname','replication_factor':int}

ANDdurable_writes=boolean;9.2.1鍵空間操作294.修改鍵空間屬性(續)示例:

cqlsh>ALTERKEYSPACEks_testWITHREPLICATION={'class':'SimpleStrategy','replication_factor':1}ANDdurable_writes

=false;5.刪除鍵空間語法:

DROPKEYSPACE<name>示例:

cqlsh>dropkeyspace

ks_test;DROPKEYSPACE語句執行將刪除keyspace中的所有columnfamilies及包含在columnfamilies中的所有數據。9.2.1鍵空間操作9.2.2數據表操作301.創建表(官方BNF范式表示語法):create_table_statement

::=CREATETABLE[IFNOTEXISTS]table_name

'('column_definition(','column_definition)*[','PRIMARYKEY'('primary_key')']')'[WITHtable_options

]column_definition::=column_name

cql_type[STATIC][PRIMARYKEY]primary_key::=partition_key[','clustering_columns]partition_key::=column_name|'('column_name(','column_name)*')'9.2.2數據表操作311.創建表(官方BNF范式表示語法)續:clustering_columns

::=column_name(','column_name

)*table_options::=COMPACTSTORAGE[ANDtable_options]

|CLUSTERINGORDERBY'('clustering_order')'[ANDtable_options]|optionsclustering_order::=column_name(ASC|DESC)(','column_name(ASC|DESC))*如果建表的時候指定了COMPACTSTORAGE(3.0版本前支持,這時候不允許存在靜態列,也有些其他方面的限制,該選項主要出于向后兼容保留,一般不用。9.2.2數據表操作321.創建表:一般語法如下

CREATETABLE[IFNOTEXISTS]<name>(

column1cql_type,

column2cql_type,……

columnN

cql_type,PRIMARYKEY(column1,columnK,…))[WITHproperty1=valueANDpropertyM

=value…];定義表時,每行由PRIMARYKEY唯一標識。所有table必須定義一個PRIMARYKEY。一個PRIMARYKEY可以由一個或多個columns組成。如果PRIMARYKEY只有一個column,則可以直接在此column之后定義。否則PRIMARYKEY必須用逗號分割,單獨定義。9.2.2數據表操作33示例1:

cqlsh:ks_test>createtableIFNOTEXISTSusers(idbigintprimarykey,usernametext,ageint,heightdouble,

birthdaydate,

isvip

boolean,

ip

inet,hobbieslist<text>,skillsset<text>,scoresmap<text,int>,tagstuple<text,text>,

createtimetimestamp,)withcomment='userinfotable';示例2:cqlsh:ks_test>CREATETABLECPT(

CIDint,PIDint,

remarktext,

PRIMARYKEY(CID,PID));在CQL中,列的順序定義了主鍵。主鍵中相同partitionkey的所有的rows,將會被存儲在相同的物理節點上設計分區鍵時,查詢需求驅動,盡可能涉及較少的分區就能獲取到相關數據主鍵示例:分區鍵(第一列)+clusteringcolumnsPRIMARYKEY(a)PRIMARYKEY(a,b,c)PRIMARYKEY((a,b),c)349.2.2數據表操作35示例3:分區鍵,相同分區鍵的行位于同一分區CREATETABLEt(aint,bint,cint,dint,PRIMARYKEY((a,b),c,d));SELECT*FROMt;a|b|c|d---+---+---+---0|0|0|0//row10|0|1|1//row20|1|2|2//row30|1|3|3//row41|1|4|4//row5row1、

row2位于同一分區;row3、row4位于同一分區;row5位于另一分區;不同分區數據按照clusteringcolumns排序,默認升序排序;9.2.2數據表操作示例4:靜態列,相同分區鍵的行共享靜態列的值CREATETABLEt(pkint,tint,vtext,stextstatic,PRIMARYKEY(pk,t));INSERTINTOt(pk,t,v,s)VALUES(0,0,'val0','static0');INSERTINTOt(pk,t,v,s)VALUES(0,1,'val1','static1');SELECT*FROMt;369.2.2數據表操作

pk

|t|v|s----+---+--------+-----------

0|0|'val0'|'static1'0|1|'val1'|'static1'2.查看表結構信息1)語法:

DESCRIBETABLEname;

示例:

cqlsh:ks_test>DESCRIBETABLEusers;2)列出所有表的創建語句:

DESCRIBETABLES;3.刪除表語法:DROPTABLE[IFEXISTS]table_name

如果沒加IFEXISTS,刪除表時如果表不存在則會報錯。

示例:DROPTABLEusers;379.2.2數據表操作4、修改表結構信息1)添加一列的語法:

ALTERTABLE<name>ADDcolumncql_type;如:cqlsh:ks_test>ALTERTABLEusersADDoccupationvarchar;2)刪除一列的語法:

ALTERTABLE<name>DROPcolumn;如:

cqlsh:ks_test>ALTERTABLEusersDROPoccupation;3)刪除多列的語法:

ALTERTABLE<name>DROP(column,column)如:cqlsh:ks_test>ALTERTABLEusersDROP(height,temp);4)修改表的選項:如:ALTERTABLEusersWITHcomment='Amostexcellentandusefultable';389.2.2數據表操作9.2.3數據CRUD操作1.數據插入insert_statement::=INSERTINTOtable_name(names_values|json_clause)[IFNOTEXISTS][USINGupdate_parameter(ANDupdate_parameter)*]names_values::=namesVALUEStuple_literaljson_clause::=JSONstring[DEFAULT(NULL|UNSET)]names::='('column_name(','column_name)*')‘示例1:INSERTINTONerdMovies(movie,director,main_actor,year)VALUES('Serenity','JossWhedon','NathanFillion',2005)

USINGTTL86400;399.2.3數據CRUD操作示例2INSERTINTONerdMoviesJSON'{"movie":"Serenity","director":"JossWhedon","year":2005}';示例3INSERTINTOusers(id,username,age,height,birthday,isvip,ip,hobbies,skills,scores,tags,createtime)VALUES(1,'zhang',29,175.5,'1990-10-26',true,'',['running','reading'],{'java','iOS'},{'china':80,'english':90},('Beijing','Programer'),dateof(now()));409.2.3數據CRUD操作2.數據查詢基礎,一般用法如下:SELECTcolumn1,…,columnNFROM<name>WHERE<condition>;示例:

cqlsh:ks_test>SELECT*FROMusers;可以將返回結果顯示為JSON形式,示例如下。

SELECTjson*fromks_test.users;SELECTJSONusername,occupationFROMusersWHEREid=1;41429.2.3數據CRUD操作如果WHERE條件中使用的字段沒有創建索引,需要使用allowfiltering表示強制查詢,如下示例。SELECTid,username,createtime,tagsFROMusersWHEREidin(1,2)andage>18ANDtags=('Beijing','Programer')allowfiltering;9.2.3數據CRUD操作數據查詢操作也支持如下使用方法。1)支持LIMIT、TIMESTAMP和TTL從句進一步限定返回數據條數等。2)支持擴展命令,使用命令后select輸出的結果展示形式不一樣。cqlsh:ks_test>expandon;NowExpandedoutputisenabledcqlsh:ks_test>select*fromusers;如下方式可關閉擴展命令。

cqlsh:test>expandoff;439.2.3數據CRUD操作數據查詢操作也支持如下使用方法。3)支持排序,ORDERBY子句與SELECT一起使用,可以實現以特定順序顯示數據。[ORDERBYordering_clause]ordering_clause::=column_name[ASC|DESC](','column_name[ASC|DESC])*4)支持分組匯總查詢

[GROUPBYgroup_by_clause]group_by_clause::=column_name(','column_name)*5)支持加DISTINCT關鍵字,進行數據濾重。449.2.3數據CRUD操作45查詢示例使用IN進行范圍查詢SELECTusername,occupationFROMusersWHEREidIN(1,200,207);可以使用AS給列起別稱SELECTidASuser_id,occupationASuser_occupationFROMusers;使用關系比較運算設定查詢條件SELECT

time,valueFROMeventsWHERE

event_type='myEvent'

ANDtime>'2019-12-01'ANDtime<='2020-01-01'使用count進行匯總計數SELECT

COUNT(*)ASuser_countFROMusers;3.數據修改一般用法:UPDATE<tableName>[USINGTTLseconds]SETcolumn=value,column=valueWHERE<condition>[IFEXISTS]示例:updateusersusingttl60setusername='hehe'whereid=1;<where-clause>用來查詢更新的行,where子句必須包含組成PRIMARYKEY的所有的列。UPDATE一般不會檢查行是否存在,若不存在則創建,否則更新。469.2.3數據CRUD操作4.數據刪除1)截斷表:使用TRUNCATE命令將表中所有數據刪除,需慎用。

2)刪除行。語法:

DELETEFROM<name>WHERE<condition>示例:

DELETEFROMUsersWHEREid=1;3)刪除滿足條件某些行某列的值。語法:DELETEcolumnFROM<name>WHERE<condition>;示例:DELETEipFROMUsersWHEREidIN(1,2);479.2.3數據CRUD操作4.數據刪除(續)Cassandra的數據刪除操作實際上并不是真的刪除,它執行的是插入操作,插入的數據叫作tombstone(墓碑)墓碑記錄了被刪除記錄的信息和刪除時間。根據條件查詢數據的時候,它會把滿足條件的記錄查詢出來,包括tombstone,然后過濾掉刪除的記錄,再把結果返回。Cassandra中可通過壓緊操作合并SSTable,丟棄墓碑,創建新索引。Cassandra中TTL到期的處理,也采用墓碑機制,并不是真的刪除操作。489.2.3數據CRUD操作9.2.4索引操作一級索引:通過主鍵快速訪問數據二級索引:通過其他列快速訪問數據Cassandra數據庫中定位數據支持創建二級索引機制。對于經常查詢訪問的列,建議建立二級索引如:有一個播放列表的表里面有數十億首歌曲。很多歌曲可能有共同的藝術家。藝術家的列就比較適合作為索引。不適合創建二級索引的列列的值很多的情況下:相當于查詢了很多條記錄,得到一個很小的結果;列的值很少的情況下:如布爾類型的值;表中couter類型的列;頻繁更新和刪除的列;

499.2.4索引操作1.創建二級索引一般語法:CREATEINDEX[name]ON<table_name(column)>示例:CREATEINDEXusers_username_idxONusers(username);索引名稱可省略;索引創建后一般由數據庫系統自動維護,如果需要人工維護,可以使用命令行方式下支持的nodetool工具,命令語法形式如下。nodetoolrebuild_index<keyspace><table><indexName>509.2.4索引操作2、刪除索引語法:

DROPINDEX[IFEXISTS]<indexname>;示例1:cqlsh:ks_test>DROPINDEXusers_username_idx;示例2:刪除指定鍵空間的索引。cqlsh:ks_test>DROPINDEXks_test.users_username_idx;51Cassandra二級索引原理——新創建了一張表格,同時將原始表格之中的索引字段作為新索引表的PrimaryKey,并且存儲的值為原始數據的PrimaryKey,然后再通過pk一級索引找到真正的值9.2.5函數支持CQL提供的豐富的標準庫函數,也支持用戶采用Java、JavaScript等語言自定義函數。常用庫函數主要分為以下兩大類。聚合函數(aggregatefunctions):用于聚合來自SELECT語句的多行結果,如Count、Max、Min、Sum、Avg函數分別用于計數、求最大值、求最小值、求和與求平均計算。

如:SELECTAVG(players)FROMplays;標量函數(ScalarFunctions):簡單地取多個值并且用它產生輸出。1) Cast函數:用于將一種本地數據類型轉換為另一種數據類型。示例如下。如:SELECTcast(scoreastext)FROMstudentTable;SELECTavg(cast(countasdouble))FROMmyTable529.2.5函數支持標量函數(ScalarFunctions)2)Token函數:參數為列名稱,允許計算給定分區鍵的token,即在集群環結構中的地址。token函數的確切簽名取決于有關的表和集群使用的分區器。如默認Murmur3Partitioner分區器返回類型是bigint。示例如下。

SELECTtoken(score)FROMtest.studentTable;3)其他函數uuid、now、時間轉換函數、TTL、writetime等如:currentDate、currentTime返回當前日期、時間53目錄CassandraDB基礎1CQL數據管理操作2Cassandra集群管理3Cassandra數據庫管理4小結554官網:/doc/latest/9.3.1讀寫一致性管理9.3.2節點狀態管理機制9.3.3節點增刪管理9.3.1讀寫一致性管理Cassandra的一致性級別是可配置的(Tunable)寫一致性級別:決定成功寫入多少個副本節點就應當對接收到的客戶端寫入做出成功響應。讀一致性級別:決定了收到多少個副本節點響應時,再返回最新數據給客戶端。為了滿足讀請求,Cassandra根據時間戳檢查指定數目的副本節點的數據,并找到最新的數據。查看當前一致性級別設置,可用cqlsh命令。CONSISTENCY;當修改設置一致性級別時,cqlsh命令語法格式:

CONSISTENCY[ONE|ALL|QUORUM|……];559.3.1讀寫一致性管理Cassandra一致性參數配置:寫操作含義56級別描述使用ANY任意一個節點寫操作已經成功。如果所有的replica節點都掛了,寫操作還是可以在記錄一個hintedhandoff事件之后,返回成功。提供了低的延遲和寫入永遠不會失敗的保證。相比于其他級別,提供了最低的一致性和最高的可用性ONE/TWO/THREE一個寫入必須被寫到至少1個/2個/3個副本節點的commitLog文件和內存表中滿足了大部分用戶的需求,因為一致性級別要求不嚴格。與協調者節點最近的副本節點接收到請求QUORUM一個寫入必須被寫到規定數目即至少(n/2+1)個副本節點的commitLog文件和內存表中提供了很強一致性LOCAL_ONE任何一個本地數據中心內的replica節點寫操作成功。對于多數據中心的情況,往往期望至少一個replica節點寫成功,但是,又不希望有任何跨數據中心的通信。LOCAL_ONE正好能滿足這樣的需求。9.3.1讀寫一致性管理Cassandra一致性參數配置:寫操作含義57級別描述使用LOCAL_QUORUM

一個寫入必須被寫到和本地數據中心中規定大多數數目副本節點的commitLog文件和內存表中。避免跨數據中心的通信

需要將多數據中心集群配置策略為NetworkTopoLogyStrategy。用于在一個數據中心中維護本地的一致性EACH_QUORUM

一個寫入必須被寫到每個數據中心大多數節點中的副本節點的commitLog文件和內存表中在多數據中心集群中使用,嚴格維護多個數據中心具有相同的一致性。例如,當數據集群宕機并且數據中心不能達到QUORUM需返回失敗時,可以使用這一級別ALL

一個寫入必須寫到集群中所有副本節點的commitLog文件和內存表中相對于其他級別,提供了最高的一致性和最低的可用性。強調CAP中的CP9.3.2節點狀態管理機制Cassandra集群沒有中心節點,各個節點的地位完全相同,它們通過Gossip協議維護集群的狀態。節點啟動時會從配置文件cassandra.yaml得到集群名稱以及種子節點列表,每個節點的種子節點列表相同。Gossiper進程通過每個節點的心跳來感知節點是否存活。通過Gossip每個節點都能知道集群中包含哪些節點以及這些節點的狀態,這使得Cassandra集群中的任何一個節點都可以完成任意key的路由。使用Noodtool工具可顯示多種集群狀態信息。589.3.3節點增刪管理

Cassandra集群最基本的配置參數主要包含以下幾項。1)cluster_name:集群中每個節點上配置的集群名稱一致。2)auto_bootstrap:新節點加入的過程稱為bootstrap,主要完成新節點中虛擬節點token分配,以及加入環,并重新分配數據等過程。該參數設置為true,節點將在加入集群后自動完成相應操作,獲取本節點數據。3)-seeds:設置種子節點,可以配置為逗號間隔的多個種子節點IP地址列表構成的字符串,用于gossip引導新節點加入集群中。在多數據中心的集群中,種子節點一般配置為至少包含每個數據中心的兩個節點地址。4)rpc_address與rpc_port:客戶端連接的監聽地址。599.3.3節點增刪管理

Cassandra集群最基本的配置參數主要包含以下幾項。5)listen_address:綁定自己的ip地址,用于其他節點和它通信。集群中刪除節點也可以通過nodetool實現,命令格式如下,ID可以通過nodetoolstatus命令查到。n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論