Overview
Apache Cassandra 是一個大規模可擴展的分佈式開源NoSQL數據庫,完美適用於跨數據中心/雲端的結構化數據、半結構化數據和非結構化數據,同時,Cassandra 高可用、線性可擴展、高性能、無單點。
特點
- scalable,線性可擴展
- fault-tolerant,且沒有單點(peer-to-peer)
- column-oriented database & partitioned row store database
- distribution design 基於 Amazon 的 Dynamo
- data model 基於 Google 的 Bigtable
- 靈活的數據存儲,支持結構化、半結構化、非結構化數據
- 支持事務
- 寫性能好
- 由 Facebook開源
數據模型
內部數據結構
Cassandra是一個column-oriented database,也就是說,不用像關係型數據庫一樣事先定義好列,在Cassandra中,不同行的列可以不一樣。
在Cassandra中,數據模型由keyspaces、column families、primary key 和 columns組成,對比關係型數據庫,如下表:
關係型數據庫 | Cassandra |
---|---|
Database | Keyspace |
Table | CF(column family) |
Primary Key | Primary Key |
Column Name | Key / Column Name |
Column Value | Column Value |
在Cassandra中,Primary Key包括partition key 和 cluster key兩部分,其中cluster key可選,partition key確定數據行分發到哪個node,cluster key用於node內部數據排序。
對於每一個column family,不要想象成關係型數據庫的表,而要想像成一個多層嵌套的排序散列表(Nested sorted map)。這樣能更好地理解和設計Cassandra的數據模型。
散列表可用提供高效的鍵值查找,排序的散列表可提供高效的範圍查找,在Cassandra裏,我們可以使用primary key和column key做高效的鍵值查詢和範圍查詢,而且,在Cassandra中,列的名稱可以直接包含數據,也就是說,有的列可以只有列名沒有列值。
Map<RowKey, SortedMap<ColumnKey, ColumnValue>>
CQL
CQL (Cassandra Query Language)是用於 Cassandra 的查詢語言,可類比用於關係型數據庫的SQL,注意,雖然CQL 和 SQL 看起來比較相似,但二者內部原理完全不同。
舉個例子
搭建Cassandra
學習Cassandra時搭建環境最簡單的方式是使用docker,可以參考鏡像 。
例子
如下圖所示,首先創建keyspaces,然後創建table,往table中插入數據,再查詢該table。
總結
本文簡單介紹了Cassandra,並舉例說明了基本的使用。下一篇將介紹Cassandra的數據模型。