Cassandra--概述与相关介绍
Apache Cassandra
是一套开源分布式NoSQL数据库系统,Facebook于2008开源,目前最新版本3.11.1。架构设计主要由亚马逊的Dynamo与Google 的BigTable两部分组成。
介绍
- Apache Cassandra 是一个高可靠的大规模分布式存储系统。高度可伸缩的、高可用性、分布式的结构化key-value存储方案。在CAP理论中Cassandra主要是AP(可用性和分区容错性),分区容错性基于一致性哈希环(Consistent Hash Ring)算法实现的。
更多CAP相关内容可参考:http://blog.javachen.com/2014/05/30/note-about-brewers-cap-theorem.html
Cassandra相关概念
- Cassandra 每个节点都是独立的,都可以接受读取和写入请求
Cluster:逻辑上的概念,其实就是多个节点Node(无中心),可以跨数据中心。
DataCenter :数据中心,可以理解为是一个机房,包含多个Rack
Rack : 机架,机架上包含多个节点Node
Node : 节点,可以理解为机器
提交日志 : 提交日志,是Cassandra中的崩溃恢复机制。每个写操作都写入提交日志。
Mem-表 : mem-表,内存中的的数据结构。提交日志后,数据将被写入mem表。有时,对于单列族,将有多个mem表。
SSTable : 它是一个磁盘文件,当其内容达到阈值时,数据从mem表中刷到磁盘。
键空间KeySpace
- keyspace类是于SQL的数据库database,但也有些不同,cassandra它还定义了数据的复制策略(副本放置策略和所需副本的数量)。
创建keysace的时候可以指定两个属性:replication和durable_writes1
2
3create KEYSPACE keyspaceName WITH replication = {'class': 'SimpleStrategy','replication_factor':3}
create KEYSPACE keyspaceName WITH replication={'class': 'NetworkTopologyStrategy','datacenter1':2}
... AND DURABLE_WRITES = false;
Replication 副本
Replication:副本位置策略与副本的数量
,即存储数据到多个节点来保证可靠性和出错容忍性
副本数量
也叫副本因子,这个就是决定有多少份副本,比如如果设置为1,则表示每一行只有一个副本,所有的副本地位都是相等的(和kafka类似)。
副本放置策略
表示该keyspace的副本如何放置在集群中,keyspace有两种策略:SimpleStrategy
和NetworkTopologyStrategy
SimpleStrategy 简单策略
默认副本放置策略,该模式下需要指定复制策略和副本因子,如下面指定2份副本:1
create KEYSPACE demodb WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 2};
NetworkTopologyStrategy 网络拓扑策略
这种策略用于当你知道节点如何在数据中心(Data Center)分组的情况或者你希望部署集群横跨多个数据中心,此时你必须指定每个数据中心要多少个副本。在这种情况下,副本放置策略由数据中心自己决定
创建代码如下:1
CREATE KEYSPACE demodb WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'dc1' :3 };
列族(Column Families)
- 列族是列的容器
- Cassandra 数据模型包括列、行、列族和间空间 (keyspace)
列:Cassandra 数据模型中最基本的单元,每一个列包括一个名称、一个值和一个时间戳。
(例如 name=”zhangsan”,暂忽略时间戳)。行:用一个名称标记的列的集合,可以把这个列名称叫做行键(rowKey)
(例如 “rowName”->{id=”34”,name=”zhangsan”,age=”25”})
cassandra节点中,存储了每一行数据,按照行键排序,更具这种排序,我们就可以通过切片查询列族:用一个名称标记的行的集合
(例如 famliyName->{“rowName1”->{id=16,name=”zs”},”rowName1”->{id=17,name=”ls”)