2014-07-15 47 views
1

我一直在看Datastax的Architecture in brief网页(以及其他一些网页),但是我发现它并没有真正回答我所遇到的关键问题。因此,我继续撰写了Datastax网页的编辑副本(请参阅http://benslade.com/wordpress/?p=152,欢迎所有反馈意见)。关于Cassandra架构的概述问题

我知道我可以通过实际设置一个Cassandra数据库来解决问题,但我不喜欢通过必须弄清楚“它是如何实现的”开发商。跨

  • 概览说,“数据在集群中的所有节点之间分配每个节点交换信息:

    所以,我对事情的工作在卡桑德拉如何在架构层面几个问题。每秒都有集群“。后来又说集群是“所有写入都自动分区并在整个集群中复制”。集群和数据中心之间的关系是什么? IE浏览器。是一个数据中心,是整个集群的一部分。所有数据中心中的所有节点是否每秒都相互交换信息?对特定数据中心中的任何节点的写入是否会传播到其他数据中心,这与在当前数据中心中传播的数据中心相同?

  • 概述说:“一旦内存结构(memtable)已满,数据就会写入SSTable数据文件中的磁盘”。同一个数据可以同时存储在memtable和SSTable中。 IE浏览器。是SSTable的数据缓存memtable?

回答

2

未来,请尽量将您的帖子限制在一个问题上。

集群和数据中心之间的关系是什么?

群集可以包含一个或多个逻辑数据中心。 Cassandra具有数据中心意识,这意味着您可以在每个数据中心的基础上改变您的复制策略。此外,Cassandra具有“locality”的概念,这意味着snitch可以限制对特定数据中心中的节点的请求。 EX:通过LOCAL_QUORUM查询将仅从数据中心中被确定为“最接近”(网络方式)的节点查询数据。而通过QUORUM查询将从(N/2 + 1)个节点查询,而不管数据中心(其中N =节点数)。

所有数据中心的所有节点是否每秒都互相交换信息?

同样,snitch处理副本的分布并确保所有节点都保持与配置的复制因子一起保持最新状态。当然,随着卡桑德拉接受CAP定理的高可用性,分区容忍的一面,所有副本都运行在“最终一致性”的概念上。意思是说,它们都会得到更新,但在请求数据之前可能会发生,也可能不会发生。

对特定数据中心中的任何节点的写入是否会传播到与当前数据中心传播相同的其他数据中心?

是的,但它又取决于配置的复制因子。请看下面的密钥空间定义:

CREATE KEYSPACE stackoverflow WITH replication = { 
    'class': 'NetworkTopologyStrategy', 
    'WestCoastDC': '2', 
    'EastCoastDC': '3' 
}; 

利用这种结构,飞贼会确保在任何数据中心的一个副本的写操作将被传播到我的“WestCoastDC”,直到它有两个数据副本。同样,我的“EastCoastDC”将有三份相同的数据。请注意,您的复制因子必须等于或小于该数据中心中的节点数。

相同的数据可以在同一个 时间的memtable和SSTable中。 IE浏览器。是SSTable的数据缓存memtable?

我不相信会发生这种情况。 Cassandra中的所有写入操作都应该写入内存Memtable中,并通过提交日志同时保存在磁盘上。然后,一旦达到你的memtable门限,memtable内容应该刷新并持续到SSTables。当然,如果你的节点经历了一个插件式的事件,提交日志将被验证和协调,以确保其内容存在于SSTables中。