诗与远方

Cassandra 2.x中文教程(4):理解架构之架构简介

通过前面的《列存储数据库:apache的cassandra》、《Cassandra 2.x中文教程(1):在CentOS 6.4安装Cassandra 2.0.9/2.0.10》、《Cassandra 2.x中文教程(2):执行简单的CQL操作》和《Cassandra 2.x中文教程(3):初步优化性能》我们已经了解到一些Cassandra 2.x的东西,但是如果要进一步的深入了解甚至开发基于它Cassandra的系统,那么了解Cassandra的架构模型是非常必要的。接下来的7节将通过对官方文档的学习来了解Cassandra 2.x的世界。

Cassandra是设计用于跨多节点方式处理大数据,它没有单点故障;这种架构设计之初就考虑到了系统和硬件故障。Cassandra通过一种P2P的方式通知集群中节点的失效;通过每个节点上顺序写的Commit log捕获写活动,确保数据的持久性。随后数据被索引并写入到称为memtable的内存结构中,这个结构就像回写缓存一样。当memtable数据满了后,数据就被写入到磁盘中的SSTable。所有的写操作都在集群中自动的分区和复制。通过一个称为compaction的进程,Cassandra周期性的整理SSTable,丢弃废弃的数据和tombstones(墓碑,一个数据被删除的标记)。

Cassandra是一种面向行的数据库(row-oriented database),它允许所有被授权的用户连接任何数据中心的任意数据节点并使用CQL语言访问数据。为了简单起见,CQL使用SQL类似的语法。从CQL来看,数据库就是一堆表组成的。通常情况下,一个应用程序有一个keyspace,开发者可以通过cqlsh或者相应语言的驱动来使用CQL。

客户端的读或写请求可以发送到集群中的任意节点。当客户端连接到一个节点时,这个节点就作为特定客户端操作的一个协调者(代理),这个协调者担任了客户端程序和具体存储数据的节点的代理。协调者如何确定环中的哪个节点应该接收请求取决于集群的配置。

关键结构

Cluster(集群):一组用于存储数据的节点,一个集群包含一个或多个数据中心。

Data center(数据中心):一组配置在一个集群中用于复制和负载隔离的相关节点。它不是需要是一个物理的数据中心,根据复制因子的配置,数据可以被写入到多个数据中心。

Commit log(提交日志):所有的数据首先写入到提交日志用于持久化。当它所有的数据写入到SSTables后,就随便你处理了。

Table(表):一组通过行获取的有序的列(?)。一个行是由一组列组成并且拥有一个主键。键的第一部分是一个列名。

SSTable(有序字符串表):SSTableCassandra周期性写入memtales数据的不变的数据文件。SSTable是只能追加的、有序存储在磁盘的并且由每个Cassandra表维护。