NoSQL數據庫 Cassandra(一)

   隨着互聯網技術的發展,對數據存儲的要求越來越高,在容量、安全性、備份、高可用性等方面都有很高的需求,很受歡迎的關係型數據庫有SQLServer、MySQL、Orcale等,非關係型數據庫有key、value型的Redis,Memcached,文檔型數據庫有MongoDB、CouchDB,還有列簇類型的Hbase、Cassandra。種類繁多,要學習的知識點越來越多,我們在技術選型時,必須遵循“沒有最好的技術,只有最適合的技術”。因爲業務的需要有的折騰新的技術,接下來將初步研究Cassandra的過程做一下筆記,以便後期查閱。

  1、初識Cassandra

  Apache Cassandra是高度可擴展的,高性能的分佈式NoSQL數據庫。 Cassandra旨在處理許多服務器上的大量數據,提供高可用性而無需擔心單點故障。

  Cassandra具有能夠處理大量數據的分佈式架構。 數據放置在具有多個複製因子的不同機器上,以獲得高可用性,而無需擔心單點故障。

官網: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

  目前沒發現Cassandra比較新書籍,網上能搜到的Cassandra 實戰  Cassandra 權威指南 是基於0.6與0.7,相對目前常用的版本已經很陳舊,所以當我們學習Cassandra 時,最好的方式是研究官方文檔。

1.1  Cassandra與關係數據庫比較

Cassandra關係數據庫
Cassandra用於處理非結構化數據。RDBMS用於處理結構化數據。
Cassandra具有靈活的模式。RDBMS具有固定的模式。
在Cassandra中,表是“嵌套鍵值對”列表(行x列鍵x列值)。在RDBMS中,表是數組的數組(一行x列)
在Cassandra中,keyspace是包含與應用對應的數據的最外層的容器。在RDBMS中,數據庫是包含與應用程序對應的數據的最外層的容器。
在Cassandra中,表或列族是鍵空間的實體。在RDBMS中,表是數據庫的實體。
在Cassandra中,行是一個複製單元。在RDBMS中,行是單條記錄。
在Cassandra中,列是一個存儲單元。在RDBMS中,列是表示關係的屬性。
在Cassandra中,使用集合來表示關係。在RDBMS中,有外鍵,連接等的概念。

  在MySQL等關係型數據庫中,都有表和庫的概念,不同類型的數據庫中庫的創建等方式都是不一樣的,MySQL等關係型數據庫必須先用CREATE語句創建數據庫和表結構才能插入數據,而Redis中根據配置文件中數據庫的個數,已經生成若干個數據庫,只需要用SELECT切換即可。MongoDB又是特殊的一種特殊的數據庫,裏面沒有表的概念是庫和集合,在一定的情形下,不用自己創建,可以直接插入數據非常的便捷。Cassandra裏面沒有庫的概念,裏面是keyspace和表的實體。有些使用方法和MySQL等關係型數據庫相似,有些地方兩者又有很大的差距。

1.2  Cassandra與HBase比較

HBaseCassandra
HBase是基於Bigtable(Google)Cassandra基於DynamoDB(亞馬遜)。 它最初是由前亞馬遜工程師在Facebook開發的。 這是Cassandra支持多數據中心的原因之一。
HBase使用Hadoop基礎架構(Zookeeper,NameNode,HDFS)。 部署Hadoop的組織必須具備Hadoop和HBase的知識。Cassandra與Hadoop分開開發,其基礎工具和操作知識的要求與Hadoop不同。 然而,對於分析,許多Cassandra部署使用Cassandra + Storm(使用zookeeper)和/或Cassandra + Hadoop。
HBase-Hadoop基礎工具有幾個由Zookeeper,Name Node,HBase master和數據節點組成的“移動部件”,Zookeeper是集羣的,自然是容錯的。名稱節點需要集羣爲容錯。Cassandra使用單個節點類型。 所有節點相等並執行所有功能。 任何節點都可以作爲協調器,確保沒有Spof。 添加Storm或Hadoop當然會增加基礎設施的複雜性。
HBase非常適合進行基於範圍的掃描。Cassandra不支持基於範圍的行掃描,這可能在某些用例中是有限制的。
HBase提供跨越一個HBase集羣的異步複製。Cassandra隨機分區提供了跨越單行的行復制。
HBase僅支持有序分區。Cassandra正式支持有序分區,但Cassandra沒有生產用戶使用有序分配,由於“熱點”創建並操作困難等熱點引起。
由於有序分區,HBase可以輕鬆地水平放置,同時還支持Rowkey範圍掃描。如果數據存儲在Cassandra的列中以支持範圍掃描,Cassandra中行大小的實際限制是10兆字節。
HBase支持原子比較和設置,HBase支持一行內的事務。Cassandra不支持原子比較和設置。
HBase不支持單行讀取負載平衡,一行只有一個區域服務器一次提供。Cassandra將支持單行讀取負載平衡。
Bloom過濾器可用於HBase作爲另一種形式的索引。Cassandra使用bloom過濾器進行鍵查找。
觸發器由HBase中的協處理器功能支持。Cassandra不支持協處理器功能

   近年來隨着大數據技術與產業鏈的發展,Hadoop、Spark、Storm等技術發展迅速,同時,好多做大數據相關的技術人員供不應求,身價翻了好多,讓我這種屌絲好生羨慕。而HBase是大數據存儲領域裏的先鋒和基石。扮演着非常重要的角色。但是整體架構的體量確實不小,整體的架構比Cassandra複雜很多,無形中加大了系統的複雜度和可維護性。

1.3  使用Cassandra的互聯網公司

國外:

  • eBay:200+TB,400+M寫,100+M讀,應用場景:商品詳情頁上的Social Signals,如Like,Want,Own,Favorites等;用戶和商品的hunch taste graph;時間序列如移動通知,反作弊,soa,監控,日誌服務等;

  • Netflix:包含288+96+60個實例的大規模集羣,每秒110萬的寫操作,3個AWS EC2 美國東部region的zone自動複製副本,總計330萬寫操作/秒;

  • Apple:75000+ nodes, 10s  of PBs,Millions ops/s, largest cluster 1000+ nodes

國內:

  • 360  從公開的資料看,應該有至少1500臺服務器的集羣。360選用cassandra的原因如下:團隊人員少,需求緊,選擇開源項目;無單點,無中心,適合在線業務;代碼易懂,團隊成員有代碼基礎;社區比較活躍

  • 杭州同盾科技  具體使用量暫不清楚,只知道底層的數據存儲等架構主要基於Cassandra,是一家大數據風控、反欺詐公司,發展非常迅速。

2、安裝與實踐 

1、環境需求

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
根據官網知道文檔需要java8以及python2.7的支持  現在好多生產環境已經都在使用CentOS7.X操作系
統了,而CentOS7.X是自帶python2.7,我們自行檢查一下,缺少python2.7和java8的情況,請自己安裝
即可。

2、常見安裝方式

二進制安裝方式簡答快捷,不需要編譯,安裝包下載後,對網絡依賴比較低。

3、單機安裝測試

操作系統:CentOS  7.1

Cassandra:Cassandra 3.11.1 

安裝方式:yum安裝  能夠上網,

yum源信息:

/etc/yum.repos.d/cassandra.repo
[cassandra]
name=Apache Cassandra
baseurl=
gpgcheck=1
repo_gpgcheck=1
gpgkey=
安裝
sudo yum install cassandra

啓動服務
service cassandra start

服務開機啓動
chkconfig cassandra on

Cassandra的相關內容比較多,後續再介紹常見的對keyspace的操作,以及對錶操作,增刪改查,日常監控、安全與備份、高可用性集羣等相關知識。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章