學習Cassandra資料的一些整理

Cassandra note:html

依賴:須要java 8 (http://www.oracle.com/technetwork/java/javase/downloads/index.html)java

數據模型: 與Hbase一樣是屬於列式數據庫,Key-Value存儲系統。(http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandra/)
http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling數據庫

集羣中的數據是靠partion key的hash code均勻映射到不一樣的節點上去的。partionkey是primary key的第一個元素,因此選一個好的主
key才能使數據更好的均勻存儲在不一樣的節點上。apache


Cassandra的節點實例叫Cluster,裏面能夠包含一個或多個鍵空間(KeysSpace).鍵空間是存放列族(Column Family)的容器,至關於
關係數據中的database,schema。列族是存放列(column)的容器,相似與關係數據庫中的table。超級列(Super column)是一種
特殊的列,它的value值能夠包含多個column。 columns是cassandra的最基本單位,有name,value,timestamp構成。編程

 

列式數據庫的優勢:
1.適合存儲大量數據,而不是小量數據。由於數據是是基於列存儲的,因此能夠忽略不須要的列的數據,提升查找效率。
與之對應的是行數據庫。
2.高壓縮比。節省存儲空間,也節省CPU和內存。
3.高裝載速度。json

列式數據庫的缺點:
1.不適合掃描小量數據。
2.不適合隨機更新數據。
3.不適合作含有刪除的更新的實時操做。windows


查詢數據:
Cassandra有本身的一套查詢語言CQL(相似SQL),在數據訪問方式上亦是如此。客戶端能夠與集羣中的任意節點相連,並訪問任意的數據。oracle

cassandra在寫入數據以前須要記錄日誌(CommitLog),而後數據開始寫入到 Column Family 對應的 Memtable 中,
Memtable 是一種按照 key 排序數據的內存結構,在知足必定條件時,再把 Memtable 的數據批量的刷新到磁盤上,存儲爲 SSTable 。編程語言

存儲二進制大文件(不推薦存儲):http://wiki.apache.org/cassandra/FAQ#large_file_and_blob_storage工具

Cassandra的GUI管理工具整理:http://wiki.apache.org/cassandra/FAQ#gui 也有自帶的CLI工具鏈接Cassandra

Cassandra集羣種子的概念(很重要):http://wiki.apache.org/cassandra/FAQ#seed
相似與Cassandra集羣的初始化節點(集線器),各個節點經過種子節點互相學習(交換)各自的數據(狀態),因此新加入的Cassandra節點都須要給它
指定種子節點,下次啓動的時候就不須要了。


Cassandra 的C++ 接口:
Cassandra的各類編程語言的接口是有Thrift這個開源工具生成的,語言無關的Thrift輸入文件(cassandra.thrift)Cassandra已經自帶
,安裝thrift運行 thrift.exe -gen cpp cassandra.thrift生成就能夠了。 cpp的接口依賴thrift的核心庫叫libthrift,libthrift依賴boost1.53.0
版本和openssl


Cassandra windows 安裝配置:
解壓,配置好CASSANDRA_HOME環境變量的路徑(也就是你解壓的cassandra根目錄),而後運行bin下的cassandra.bat,若是發現logs
目錄底下的system.log文件中有INFO - Starting up server gossip,那麼恭喜你,Cassandra已經在你的本機啓動起來了。

 

 

*****************************************Cassandra的基本操做************************************************

數據模型:多維的hash表,每行能夠有不一樣的列。每行都有個鍵. keyspace包含若干列族
(列族和表是同一個概念:http://stackoverflow.com/questions/18824390/whats-the-difference-between-creating-a-table-and-creating-a-columnfamily-in-ca),
keyspace在邏輯上是容納列族和某些配置屬性的命名空間。列族定義了相關的數據名字和它們的排序方式。

入門必讀:http://wiki.apache.org/cassandra/GettingStarted

CQLSH中運行外部建立的cql腳本文件: SOURCE '[file_path]'

鍵空間的建立:
CREATE KEYSPACE [keyspace_name] WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3};

----鍵空間的建立要附帶副本屬性,class能夠指定NetworkTopologyStrategy或SimpleStrategy。SimpleStrategy只用於測試評估Cassandra
生產環境使用NetworkTopologyStrategy. 鍵空間相似關係型數據庫中的數據庫(database)

鍵空間的修改:
ALTER KEYSPACE [keyspace_name] WITH REPLICATION = {};

鍵空間的刪除:
DROP KEYSPACE [keyspace_name]

鍵空間的使用:
USE [keyspace_name]


列出已存在的鍵空間:
DESCRIBE keyspaces;

列出某個鍵空間下的全部表:
USE [keyspace_name];
DESCRIBE tables;

列出某個鍵空間下的全部列族:
USE [keyspace_name];
DESCRIBE columnfamilies;

列出特定的表的基本信息:
DESCRIBE TABLE [keyspace_name].[table_name];

建表:
http://docs.datastax.com/en/cql/3.1/cql/cql_using/create_table_t.html
表的主鍵能夠是複合的,就是多個列組成一個主鍵:
CREATE TABLE emp (
empID int,
deptID int,
first_name varchar,
last_name varchar,
PRIMARY KEY (empID, deptID)); //主鍵的第一個鍵就是分區鍵(empID),分區鍵的目的就是把表中的數據均分到集羣中的
各個節點中

更改表:
ALERT TABLE [table_name] [some change]
https://docs.datastax.com/en/cql/3.0/cql/cql_reference/alter_table_r.html
沒辦法更改主鍵,由於主鍵涉及到數據的物理儲存

給表的某列創建索引:
CREATE INDEX ON [table_name] (column_name);


查表:
SELCT [column_name] FROM [keyspace].[table_name] WHERE [column_name] = [value] //其中column_name必須是主鍵的其中部分,
若是有多個條件必須其中有一個是分區鍵

更新表中的值:
UPDATE [keyspace].[table_name] SET [column_name] = [new_value] WHERE [column_name]=[value]

刪除表中列或行:
刪除列中值:DELETE [column_name] FROM [table_name] WHERE [column_name] = [value] # 同查表
刪除一整行:DELETE FROM [table_name] WHERE [column_name] = [value] #同上

自定義數據類型(http://docs.datastax.com/en/cql/3.1/cql/cql_using/cqlUseUDT.html):
CREATE TYPE [keyspace_name].[type_name] (
street text,
city text,
zip_code int,
phones set<text>
);
自定義的數據類型的字面值是json-style的風格。

內建的數據類型(http://docs.datastax.com/en/cql/3.1/cql/cql_reference/cql_data_types_c.html):
ascii,bigint,blob,boolean,counter,double,float,inet,int,list,map,set,text,uuid,
timestamp,tuple,varchar(UTF-8 encoded string) ,varint


查看集羣信息:
SELECT * FROM system.peers;

本地幫助文檔的查看:
HELP [COMMAND]
好比:查看建立鍵空間 HELP CREATE_KEYSPACE;


CQL語句支持多語句提交(Batch):
能夠減小Node之間的流量交換,相似於事務,是原子的。
http://docs.datastax.com/en/cql/3.1/cql/cql_reference/batch_r.html#reference_ds_djf_xdd_xj__batch-conditional
http://docs.datastax.com/en/cql/3.1/cql/cql_using/use-batch-static.html


給數據設置存活期:
超過存活期的數據,將被銷燬。
INSERT INTO [table_name]
([column_name1], [column_name2])
VALUES ([column_value1], [column_value2]) USING TTL 86400; # 86400 sec 大概是一天的存活期
是給column_name2設置的

UPDATE [table_name] USING TTL 432000 SET [column_name] = [column_value] WHERE user_name = 'cbrown';

相關文章
相關標籤/搜索