天天看點

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比較

HBase
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、常見安裝方式

  • 二進制安裝 
  • 源碼安裝
  • yum 等包管理器安裝

    安裝指導網頁:http://cassandra.apache.org/download/ 

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

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的操作,以及對表操作,增删改查,日常監控、安全與備份、高可用性叢集等相關知識。

繼續閱讀