【问题标题】:Data Replication In CassandraCassandra 中的数据复制
【发布时间】:2016-08-14 08:23:57
【问题描述】:

我正在尝试了解 Cassandra 中的数据复制。就我而言,我必须根据 yymmddhh 主键分区将大量记录存储到单个表中。

我有两个数据中心(DC1 和 DC2),我使用以下 CQL 创建了一个键空间。

CREATE KEYSPACE db1 WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 1 };

然后使用下面的 CQL 创建了一个新表 tbl_data

CREATE TABLE db1.tbl_data (
        yymmddhh varchar,
        other_details text,
        PRIMARY KEY (yymmddhh)
    ) WITH read_repair_chance = 0.0;

现在,我可以看到上面的键空间“db1”和表“tbl_data”创建成功。我有几百万行要插入,我假设所有行都将存储在两个服务器上,即 DC1 和 DC2,因为两个数据中心的复制因子都是 1。

假设,一段时间后我需要添加更多节点,因为记录数量可能会增加到数十亿,那么在这种情况下,由于磁盘空间限制,一个数据中心无法处理如此大量的记录。

a) 那么,如何将数据划分到不同的节点,并可以按需添加新的节点呢?

b)是否需要更改键空间“db1”才能将新数据中心的名称放入列表中?

c)当前系统将如何横向工作?

d) 我正在使用以下代码使用 nodejs 驱动程序连接 Cassandra。我是否需要将所有节点的 IP 地址放入代码中?如果我不断地按需增加节点数量,我是否需要每次都更改代码?

var client = new cassandra.Client({ contactPoints: ['ipaddress_of_node1'], keyspace: 'db1' });

从以上所有示例中,您可以看到我的基本要求是将大量记录存储到单个表中,将数据分散到不同的服务器,如果数据量增加,我应该能够添加新的服务器。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    a) 如果您向数据中心添加新节点,数据将在节点之间自动共享。使用复制因子 1 和默认设置,每个节点上的数据应该约为 50%,尽管在添加新节点后在节点之间重新分配数据可能需要一些时间。 'nodetool status' 可以显示哪个节点拥有该密钥空间的多少。

    b) 是的,我相信你必须这样做(尽管不是 100%)。

    c) 在您的设置水平上,它会线性扩展(假设机器相等并且具有相同的 num_tokens 值),方法是按照 1 除以节点数(1 个节点 = 100%,2 = 50%)分配数据, 3 = 33% 等),吞吐量和存储容量都会扩展。

    d) 不,假设 nodejs 驱动程序像 Cassandra 的 C++ 和 Python 驱动程序一样工作(应该!),在连接到 Cassandra 后,它会知道集群中的其他节点。

    【讨论】:

      【解决方案2】:

      dbrats 的回答可以回答您的大部分问题。

      我是否需要更改键空间“db1”才能将新数据中心的名称放入列表中?

      不需要。只有在添加新数据中心或更改复制因子时,您才希望进行更改。

      我需要把所有节点的ip地址都写在代码里吗?

      不需要。但是添加多个接触点可确保更高的可用性。 万一您的联络点出现故障,驱动程序可以连接到另一个。一旦连接上,就可以得到所有的节点列表。

      【讨论】:

        猜你喜欢
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 2015-04-05
        • 2016-12-02
        • 2013-04-23
        • 2013-09-22
        • 1970-01-01
        相关资源
        最近更新 更多