我一直在关注Datastax的Architecture in brief网页(以及其他一些网页),但我发现它并没有真正回答我的关键问题。所以我继续编写了Datastax网页的编辑副本(参见http://benslade.com/wordpress/?p=152,欢迎所有反馈)。
我知道我可以通过实际设置一个Cassandra数据库来解决问题,但我不想通过弄清楚开发人员“如何实现”来为用户找出“它的作用”
所以,我还有一些关于Cassandra在架构层面如何工作的问题:
概述说,“数据在集群中的所有节点之间分配。每个节点每秒在集群之间交换信息”。后来说集群是“所有写入都会自动分区并在整个集群中复制”。群集和数据中心之间有什么关系? IE浏览器。是一个数据中心,是整个集群的一部分。所有数据中心的所有节点是否每秒都相互交换信息?写入特定数据中心中的任何节点是否会传播到与当前数据中心传播的数据中心相同的其他数据中心?
概述说“一旦内存结构(memtable)已满,数据就会在SSTable数据文件中写入磁盘”。同一数据是否可以在memtable和SSTable中同时存在。 IE浏览器。是可记忆的SSTable的数据库?
答案 0 :(得分:2)
将来,请尝试将您的帖子限制为一次一个问题。
群集和数据中心之间有什么关系?
群集可以包含一个或多个逻辑数据中心。 Cassandra是数据中心感知的,这意味着您可以在每个数据中心的基础上更改复制策略。此外,Cassandra有" locality,"这意味着snitch可以限制对特定数据中心节点的请求。
EX:按LOCAL_QUORUM
查询只会查询数据中心中确定为最近"的节点的数据。 (网络明智)。而QUORUM
查询将从(N / 2 + 1)个节点查询,而不管数据中心(N =节点数)。
所有数据中心的所有节点是否每秒都相互交换信息?
同样,snitch处理副本的分发,并确保所有节点都使用配置的复制因子保持最新。当然,当Cassandra接受CAP定理的Highly-Available,Partition Tolerant方面时,所有复制品都遵循"最终一致性的概念。"意思是,它们都会得到更新,但在请求数据之前可能会或可能不会发生。
对特定数据中心内任何节点的写入是否会传播到与当前数据中心传播相同的其他数据中心?
是的,但同样取决于配置的复制因子。请考虑以下键空间定义:
CREATE KEYSPACE stackoverflow WITH replication = {
'class': 'NetworkTopologyStrategy',
'WestCoastDC': '2',
'EastCoastDC': '3'
};
使用此配置,snitch将确保对任何数据中心的副本的写入将传播到我的" WestCoastDC"直到它有两份数据。同样,我的" EastCoastDC"将有三份相同的数据。请注意,您的复制因子必须等于或小于该数据中心中的节点数。
相同的数据是否可以记在memtable和SSTable中 时间。 IE浏览器。是可记忆的SSTable数据库?
我不相信这会发生。 Cassandra中的所有写入都应该写入内存中的memtable,并通过提交日志同时保存在磁盘上。然后,一旦达到memtable阈值,应该刷新可记忆内容并将其保存到SSTables。当然,如果您的节点遇到插件故障事件,则将验证并协调提交日志,以确保其内容存在于SSTable中。