隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,對數(shù)據(jù)存儲的要求越來越高,在容量、安全性、備份、高可用性等方面都有很高的需求,很受歡迎的關(guān)系型數(shù)據(jù)庫有SQLServer、MySQL、Orcale等,非關(guān)系型數(shù)據(jù)庫有key、value型的redis,Memcached,文檔型數(shù)據(jù)庫有MongoDB、CouchDB,還有列簇類型的Hbase、Cassandra。種類繁多,要學(xué)習(xí)的知識點越來越多,我們在技術(shù)選型時,必須遵循“沒有最好的技術(shù),只有最適合的技術(shù)”。因為業(yè)務(wù)的需要有的折騰新的技術(shù),接下來將初步研究Cassandra的過程做一下筆記,以便后期查閱。
從事鄭州服務(wù)器托管,服務(wù)器租用,云主機,網(wǎng)絡(luò)空間,空間域名,CDN,網(wǎng)絡(luò)代維等服務(wù)。
1、初識Cassandra
Apache Cassandra是高度可擴展的,高性能的分布式NoSql數(shù)據(jù)庫。 Cassandra旨在處理許多服務(wù)器上的大量數(shù)據(jù),提供高可用性而無需擔心單點故障。
Cassandra具有能夠處理大量數(shù)據(jù)的分布式架構(gòu)。 數(shù)據(jù)放置在具有多個復(fù)制因子的不同機器上,以獲得高可用性,而無需擔心單點故障。
官網(wǎng):http://cassandra.apache.org/ 幫助文檔:http://cassandra.apache.org/doc/latest/contactus.html
目前主流的版本:Apache Cassandra 3.11 Apache Cassandra 3.0
Apache Cassandra 2.2 Apache Cassandra 2.1
目前沒發(fā)現(xiàn)Cassandra比較新書籍,網(wǎng)上能搜到的Cassandra 實戰(zhàn) Cassandra 權(quán)威指南是基于0.6與0.7,相對目前常用的版本已經(jīng)很陳舊,所以當我們學(xué)習(xí)Cassandra 時,最好的方式是研究官方文檔。
1.1 Cassandra與關(guān)系數(shù)據(jù)庫比較
Cassandra | 關(guān)系數(shù)據(jù)庫 |
---|---|
Cassandra用于處理非結(jié)構(gòu)化數(shù)據(jù)。 | RDBMS用于處理結(jié)構(gòu)化數(shù)據(jù)。 |
Cassandra具有靈活的模式。 | RDBMS具有固定的模式。 |
在Cassandra中,表是“嵌套鍵值對”列表(行x 列鍵x 列值)。 | 在RDBMS中,表是數(shù)組的數(shù)組(一行x 列) |
在Cassandra中,keyspace 是包含與應(yīng)用對應(yīng)的數(shù)據(jù)的最外層的容器。 | 在RDBMS中,數(shù)據(jù)庫是包含與應(yīng)用程序?qū)?yīng)的數(shù)據(jù)的最外層的容器。 |
在Cassandra中,表或列族是鍵空間的實體。 | 在RDBMS中,表是數(shù)據(jù)庫的實體。 |
在Cassandra中,行是一個復(fù)制單元。 | 在RDBMS中,行是單條記錄。 |
在Cassandra中,列是一個存儲單元。 | 在RDBMS中,列是表示關(guān)系的屬性。 |
在Cassandra中,使用集合來表示關(guān)系。 | 在RDBMS中,有外鍵,連接等的概念。 |
在MySQL等關(guān)系型數(shù)據(jù)庫中,都有表和庫的概念,不同類型的數(shù)據(jù)庫中庫的創(chuàng)建等方式都是不一樣的,MySQL等關(guān)系型數(shù)據(jù)庫必須先用CREATE語句創(chuàng)建數(shù)據(jù)庫和表結(jié)構(gòu)才能插入數(shù)據(jù),而Redis中根據(jù)配置文件中數(shù)據(jù)庫的個數(shù),已經(jīng)生成若干個數(shù)據(jù)庫,只需要用SELECT切換即可。MongoDB又是特殊的一種特殊的數(shù)據(jù)庫,里面沒有表的概念是庫和集合,在一定的情形下,不用自己創(chuàng)建,可以直接插入數(shù)據(jù)非常的便捷。Cassandra里面沒有庫的概念,里面是keyspace
和表的實體。有些使用方法和MySQL等關(guān)系型數(shù)據(jù)庫相似,有些地方兩者又有很大的差距。
1.2 Cassandra與HBase比較
HBase | Cassandra |
---|---|
HBase是基于Bigtable(Google) | Cassandra基于DynamoDB(亞馬遜)。 它最初是由前亞馬遜工程師在Facebook開發(fā)的。 這是Cassandra支持多數(shù)據(jù)中心的原因之一。 |
HBase使用Hadoop基礎(chǔ)架構(gòu)(Zookeeper,NameNode,HDFS)。 部署Hadoop的組織必須具備Hadoop和HBase的知識。 | Cassandra與Hadoop分開開發(fā),其基礎(chǔ)工具和操作知識的要求與Hadoop不同。 然而,對于分析,許多Cassandra部署使用Cassandra + Storm(使用zookeeper)和/或Cassandra + Hadoop。 |
HBase-Hadoop基礎(chǔ)工具有幾個由Zookeeper,Name Node,HBase master和數(shù)據(jù)節(jié)點組成的“移動部件”,Zookeeper是集群的,自然是容錯的。名稱節(jié)點需要集群為容錯。 | Cassandra使用單個節(jié)點類型。 所有節(jié)點相等并執(zhí)行所有功能。 任何節(jié)點都可以作為協(xié)調(diào)器,確保沒有Spof。 添加Storm或Hadoop當然會增加基礎(chǔ)設(shè)施的復(fù)雜性。 |
HBase非常適合進行基于范圍的掃描。 | Cassandra不支持基于范圍的行掃描,這可能在某些用例中是有限制的。 |
HBase提供跨越一個HBase集群的異步復(fù)制。 | Cassandra隨機分區(qū)提供了跨越單行的行復(fù)制。 |
HBase僅支持有序分區(qū)。 | Cassandra正式支持有序分區(qū),但Cassandra沒有生產(chǎn)用戶使用有序分配,由于“熱點”創(chuàng)建并操作困難等熱點引起。 |
由于有序分區(qū),HBase可以輕松地水平放置,同時還支持Rowkey范圍掃描。 | 如果數(shù)據(jù)存儲在Cassandra的列中以支持范圍掃描,Cassandra中行大小的實際限制是10 兆字節(jié)。 |
HBase支持原子比較和設(shè)置,HBase支持一行內(nèi)的事務(wù)。 | Cassandra不支持原子比較和設(shè)置。 |
HBase不支持單行讀取負載平衡,一行只有一個區(qū)域服務(wù)器一次提供。 | Cassandra將支持單行讀取負載平衡。 |
Bloom過濾器可用于HBase作為另一種形式的索引。 | Cassandra使用bloom過濾器進行鍵查找。 |
觸發(fā)器由HBase中的協(xié)處理器功能支持。 | Cassandra不支持協(xié)處理器功能 |
近年來隨著大數(shù)據(jù)技術(shù)與產(chǎn)業(yè)鏈的發(fā)展,Hadoop、Spark、Storm等技術(shù)發(fā)展迅速,同時,好多做大數(shù)據(jù)相關(guān)的技術(shù)人員供不應(yīng)求,身價翻了好多,讓我這種屌絲好生羨慕。而HBase是大數(shù)據(jù)存儲領(lǐng)域里的先鋒和基石。扮演著非常重要的角色。但是整體架構(gòu)的體量確實不小,整體的架構(gòu)比Cassandra復(fù)雜很多,無形中加大了系統(tǒng)的復(fù)雜度和可維護性。
1.3 使用Cassandra的互聯(lián)網(wǎng)公司
國外:
eBay:200+TB,400+M寫,100+M讀,應(yīng)用場景:商品詳情頁上的Social Signals,如Like,Want,Own,Favorites等;用戶和商品的hunch taste graph;時間序列如移動通知,反作弊,soa,監(jiān)控,日志服務(wù)等;
Netflix:包含288+96+60個實例的大規(guī)模集群,每秒110萬的寫操作,3個AWS EC2 美國東部region的zone自動復(fù)制副本,總計330萬寫操作/秒;
Apple:75000+ nodes, 10s of PBs,Millions ops/s, largest cluster 1000+ nodes
國內(nèi):
360 從公開的資料看,應(yīng)該有至少1500臺服務(wù)器的集群。360選用cassandra的原因如下:團隊人員少,需求緊,選擇開源項目;無單點,無中心,適合在線業(yè)務(wù);代碼易懂,團隊成員有代碼基礎(chǔ);社區(qū)比較活躍。
杭州同盾科技 具體使用量暫不清楚,只知道底層的數(shù)據(jù)存儲等架構(gòu)主要基于Cassandra,是一家大數(shù)據(jù)風控、反欺詐公司,發(fā)展非常迅速。
2、安裝與實踐
1、環(huán)境需求
Installing Cassandra Prerequisites The latest version of Java 8, either the Oracle Java Standard Edition 8 or OpenJDK 8. To verify that you have the correct version of java installed, type java -version. For using cqlsh, the latest version of Python 2.7. To verify that you have the correct version of Python installed, type python --version 根據(jù)官網(wǎng)知道文檔需要java8以及python2.7的支持 現(xiàn)在好多生產(chǎn)環(huán)境已經(jīng)都在使用CentOS7.X操作系 統(tǒng)了,而CentOS7.X是自帶python2.7,我們自行檢查一下,缺少python2.7和java8的情況,請自己安裝 即可。
2、常見安裝方式
二進制安裝
源碼安裝
yum 等包管理器安裝
安裝指導(dǎo)網(wǎng)頁:http://cassandra.apache.org/download/
二進制安裝方式簡答快捷,不需要編譯,安裝包下載后,對網(wǎng)絡(luò)依賴比較低。
3、單機安裝測試
操作系統(tǒng):CentOS 7.1
Cassandra:Cassandra 3.11.1
安裝方式:yum安裝 能夠上網(wǎng),
yum源信息:
/etc/yum.repos.d/cassandra.repo [cassandra] name=Apache Cassandra baseurl= gpgcheck=1 repo_gpgcheck=1 gpgkey= 安裝 sudo yum install cassandra 啟動服務(wù) service cassandra start 服務(wù)開機啟動 chkconfig cassandra on
Cassandra的相關(guān)內(nèi)容比較多,后續(xù)再介紹常見的對keyspace的操作,以及對表操作,增刪改查,日常監(jiān)控、安全與備份、高可用性集群等相關(guān)知識。