随着互联网技术的发展,对数据存储的要求越来越高,在容量、安全性、备份、高可用性等方面都有很高的需求,很受欢迎的关系型数据库有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 Cassandra
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的操作,以及对表操作,增删改查,日常监控、安全与备份、高可用性集群等相关知识。