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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

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

column1cql_type,……

columnNcql_type);159.1.2數(shù)據(jù)類型示例:其中test是鍵空間cqlsh:test>createtypeaddress(provincetext,citytext,regiontext,HouseNumbertext);引用UDT創(chuàng)建其他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數(shù)據(jù)類型4、元組類型(Tuple_type):匿名UDT自定義元組類型,只需要定義元組每個元素的類型即可,不需要定義每個元素的名稱。自定義元組類型一般語法形式為:

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

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

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

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

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

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

>cqlsh--file'file_name'也可以在cqlsh環(huán)境中利用SOURCE命令執(zhí)行。

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

CREATEKEYSPACE<identifier>WITH<properties>語句用來創(chuàng)建一個新的頂級Keyspace。Keyspace,即數(shù)據(jù)庫,需定義復(fù)制策略和其他配置選項。關(guān)鍵參數(shù)說明1)復(fù)制策略SimpleStrategy:簡單策略,在一個數(shù)據(jù)中心的情況下使用,定義了在整個集群中的簡單復(fù)制因子。只支持‘replication_factor’一個子選項,且是必選項。NetworkTopoLogyStrategy:網(wǎng)絡(luò)拓?fù)洳呗裕糜诙鄠€數(shù)據(jù)中心,可以為每個數(shù)據(jù)中心定義單獨的復(fù)制因子。子選項以key-value方式定義,key表示數(shù)據(jù)中心名稱,value表示此數(shù)據(jù)中心的復(fù)制因子。259.2.1鍵空間操作1、創(chuàng)建鍵空間:基本語法如下

CREATEKEYSPACE<identifier>WITH<properties>關(guān)鍵參數(shù)說明(續(xù))2)復(fù)制因子(replication_factor):整數(shù)取值,代表副本數(shù)。3)持久寫入(durable_write):boolean值,默認(rèn)true。如果設(shè)置為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”命令,可以查詢某一具體的鍵空間,如下示例。某個鍵空間的相關(guān)信息包含創(chuàng)建鍵空間表的語句、索引表indexes、視圖表views、函數(shù)表functions、觸發(fā)器表triggers、類型表types等。

cqlsh>DESCRIBEks_test;Cassandra有一個稱為system的內(nèi)部keyspace,用于存儲關(guān)于集群的元數(shù)據(jù)。

cqlsh>DESCRIBEsystem;

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

USE<identifier>示例:

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

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

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

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

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

DROPKEYSPACE<name>示例:

cqlsh>dropkeyspace

ks_test;DROPKEYSPACE語句執(zhí)行將刪除keyspace中的所有columnfamilies及包含在columnfamilies中的所有數(shù)據(jù)。9.2.1鍵空間操作9.2.2數(shù)據(jù)表操作301.創(chuàng)建表(官方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數(shù)據(jù)表操作311.創(chuàng)建表(官方BNF范式表示語法)續(xù):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版本前支持,這時候不允許存在靜態(tài)列,也有些其他方面的限制,該選項主要出于向后兼容保留,一般不用。9.2.2數(shù)據(jù)表操作321.創(chuàng)建表:一般語法如下

CREATETABLE[IFNOTEXISTS]<name>(

column1cql_type,

column2cql_type,……

columnN

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

=value…];定義表時,每行由PRIMARYKEY唯一標(biāo)識。所有table必須定義一個PRIMARYKEY。一個PRIMARYKEY可以由一個或多個columns組成。如果PRIMARYKEY只有一個column,則可以直接在此column之后定義。否則PRIMARYKEY必須用逗號分割,單獨定義。9.2.2數(shù)據(jù)表操作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,將會被存儲在相同的物理節(jié)點上設(shè)計分區(qū)鍵時,查詢需求驅(qū)動,盡可能涉及較少的分區(qū)就能獲取到相關(guān)數(shù)據(jù)主鍵示例:分區(qū)鍵(第一列)+clusteringcolumnsPRIMARYKEY(a)PRIMARYKEY(a,b,c)PRIMARYKEY((a,b),c)349.2.2數(shù)據(jù)表操作35示例3:分區(qū)鍵,相同分區(qū)鍵的行位于同一分區(qū)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位于同一分區(qū);row3、row4位于同一分區(qū);row5位于另一分區(qū);不同分區(qū)數(shù)據(jù)按照clusteringcolumns排序,默認(rèn)升序排序;9.2.2數(shù)據(jù)表操作示例4:靜態(tài)列,相同分區(qū)鍵的行共享靜態(tài)列的值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數(shù)據(jù)表操作

pk

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

0|0|'val0'|'static1'0|1|'val1'|'static1'2.查看表結(jié)構(gòu)信息1)語法:

DESCRIBETABLEname;

示例:

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

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

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

示例:DROPTABLEusers;379.2.2數(shù)據(jù)表操作4、修改表結(jié)構(gòu)信息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數(shù)據(jù)表操作9.2.3數(shù)據(jù)CRUD操作1.?dāng)?shù)據(jù)插入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數(shù)據(jù)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數(shù)據(jù)CRUD操作2.?dāng)?shù)據(jù)查詢基礎(chǔ),一般用法如下:SELECTcolumn1,…,columnNFROM<name>WHERE<condition>;示例:

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

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

cqlsh:test>expandoff;439.2.3數(shù)據(jù)CRUD操作數(shù)據(jù)查詢操作也支持如下使用方法。3)支持排序,ORDERBY子句與SELECT一起使用,可以實現(xiàn)以特定順序顯示數(shù)據(jù)。[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關(guān)鍵字,進(jìn)行數(shù)據(jù)濾重。449.2.3數(shù)據(jù)CRUD操作45查詢示例使用IN進(jìn)行范圍查詢SELECTusername,occupationFROMusersWHEREidIN(1,200,207);可以使用AS給列起別稱SELECTidASuser_id,occupationASuser_occupationFROMusers;使用關(guān)系比較運算設(shè)定查詢條件SELECT

time,valueFROMeventsWHERE

event_type='myEvent'

ANDtime>'2019-12-01'ANDtime<='2020-01-01'使用count進(jìn)行匯總計數(shù)SELECT

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

2)刪除行。語法:

DELETEFROM<name>WHERE<condition>示例:

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

499.2.4索引操作1.創(chuàng)建二級索引一般語法:CREATEINDEX[name]ON<table_name(column)>示例:CREATEINDEXusers_username_idxONusers(username);索引名稱可省略;索引創(chuàng)建后一般由數(shù)據(jù)庫系統(tǒng)自動維護(hù),如果需要人工維護(hù),可以使用命令行方式下支持的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二級索引原理——新創(chuàng)建了一張表格,同時將原始表格之中的索引字段作為新索引表的PrimaryKey,并且存儲的值為原始數(shù)據(jù)的PrimaryKey,然后再通過pk一級索引找到真正的值9.2.5函數(shù)支持CQL提供的豐富的標(biāo)準(zhǔn)庫函數(shù),也支持用戶采用Java、JavaScript等語言自定義函數(shù)。常用庫函數(shù)主要分為以下兩大類。聚合函數(shù)(aggregatefunctions):用于聚合來自SELECT語句的多行結(jié)果,如Count、Max、Min、Sum、Avg函數(shù)分別用于計數(shù)、求最大值、求最小值、求和與求平均計算。

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

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

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

一個寫入必須被寫到和本地數(shù)據(jù)中心中規(guī)定大多數(shù)數(shù)目副本節(jié)點的commitLog文件和內(nèi)存表中。避免跨數(shù)據(jù)中心的通信

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

一個寫入必須被寫到每個數(shù)據(jù)中心大多數(shù)節(jié)點中的副本節(jié)點的commitLog文件和內(nèi)存表中在多數(shù)據(jù)中心集群中使用,嚴(yán)格維護(hù)多個數(shù)據(jù)中心具有相同的一致性。例如,當(dāng)數(shù)據(jù)集群宕機(jī)并且數(shù)據(jù)中心不能達(dá)到QUORUM需返回失敗時,可以使用這一級別ALL

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

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

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

溫馨提示

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

評論

0/150

提交評論