【问题标题】:Overview questions about Cassandra's architecture关于 Cassandra 架构的概述问题
【发布时间】:2014-07-15 15:43:40
【问题描述】:

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

我知道我可以通过实际设置 Cassandra 数据库来解决问题,但我不喜欢通过必须弄清楚开发人员“它是如何实现的”来弄清楚用户“它做了什么” .

所以,我还有一些关于 Cassandra 在架构级别如何工作的问题:

  • 概述说,“数据分布在集群中的所有节点之间。每个节点每秒都在集群中交换信息”。后来说集群是,“所有写入都自动分区并在整个集群中复制”。集群和数据中心是什么关系? IE。是一个数据中心,是整个集群的一部分。所有数据中心的所有节点是否每秒都在相互交换信息?对特定数据中心中任何节点的写入是否会像在当前数据中心中传播一样传播到其他数据中心?

  • 概述说“一旦内存结构(memtable)已满,数据就会以 SSTable 数据文件的形式写入磁盘”。相同的数据是否可以同时存在于 memtable 和 SSTable 中。 IE。 memtable 是 SSTable 的数据缓存吗?

【问题讨论】:

    标签: cassandra architecture nosql


    【解决方案1】:

    以后,请尽量将您的帖子一次限制为一个问题。

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

    一个集群可以包含一个或多个逻辑数据中心。 Cassandra 具有数据中心意识,这意味着您可以根据每个数据中心更改复制策略。此外,Cassandra 有“局部性”的概念,这意味着告密者可以将请求限制在特定数据中心的节点上。

    EX:LOCAL_QUORUM 查询将仅从数据中心中被确定为“最近”(网络方面)的节点查询数据。而通过QUORUM 查询将从 (N/2+1) 个节点查询,而与数据中心无关(其中 N = 节点数)。

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

    同样,snitch 处理副本的分发,并确保所有节点都与配置的复制因子保持同步。当然,由于 Cassandra 采用了 CAP 定理的高可用、分区容错方面,所有副本都在“最终一致性”的概念上运行。这意味着,它们都会得到更新,但在请求数据之前可能会或可能不会发生。

    对特定数据中心中任何节点的写入是否会像在当前数据中心中传播一样传播到其他数据中心?

    是的,但同样取决于配置的复制因子。考虑以下键空间定义:

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

    使用此配置,snitch 将确保对任何数据中心的副本的写入将传播到我的“WestCoastDC”,直到它拥有两个数据副本。同样,我的“EastCoastDC”将拥有相同数据的三个副本。请注意,您的复制因子必须等于或小于该数据中心的节点数。

    memtable 和 SSTable 中是否可以同时存在相同的数据 时间。 IE。 memtable 是 SSTable 的数据缓存吗?

    我不相信这会发生。 Cassandra 中的所有写入都应写入内存中的内存表,并同时通过提交日志保存在磁盘上。然后,一旦达到 memtable 阈值,memtable 内容应该被刷新并持久化到 SSTables。当然,如果你的节点遇到了plug-out-of-the-wall事件,提交日志将被验证和协调以确保其内容存在于SSTables中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2020-05-26
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多