Cassandra中的数据复制

Cassandra中的数据复制,cassandra,Cassandra,我试图理解Cassandra中的数据复制。在我的例子中,我必须基于yymmddhh主键分区将大量记录存储到单个表中 我有两个数据中心(DC1和DC2),我使用下面的CQL创建了一个键空间 CREATE KEYSPACE db1 WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 1 }; 然后使用下面的CQL创建一个新表tbl_数据 CREATE TABLE db1.tbl_data (

我试图理解Cassandra中的数据复制。在我的例子中,我必须基于yymmddhh主键分区将大量记录存储到单个表中

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

CREATE KEYSPACE db1 WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 1 };
然后使用下面的CQL创建一个新表tbl_数据

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' });
从以上所有示例可以看出,我的基本要求是将大量记录存储到一个表中,将数据分散到不同的服务器上,如果数据量增加,我应该能够在这些服务器上添加新的服务器。

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

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

c) 通过将数据按1除以节点数(1个节点=100%,2个节点=50%,3个节点=33%等)进行分布,在水平方向上,通过您的设置,它将线性扩展(假设机器相等且具有相同的num_令牌值),吞吐量和存储容量都将扩展

< Nojjs驱动程序工作时,卡桑德拉(Pythand)的C++和Python驱动程序(应该是!),连接到CasDANRA后,它会知道集群中的其他节点。

< P> A),如果向数据中心添加新节点,数据将自动在节点之间共享。使用复制系数1和默认设置,每个节点上的复制系数应为~50%,但在添加新节点后,在节点之间重新分发数据可能需要一些时间。”nodetool status'可以显示哪个节点拥有多少键空间

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

c) 通过将数据按1除以节点数(1个节点=100%,2个节点=50%,3个节点=33%等)进行分布,在水平方向上,通过您的设置,它将线性扩展(假设机器相等且具有相同的num_令牌值),吞吐量和存储容量都将扩展

< Nojjs驱动程序工作的C++(卡桑德拉)和Python驱动程序(应该是!),在连接到CasDANRA之后,它会知道集群中的其他节点。 我是否需要更改键空间“db1”以将新数据中心的名称放入列表中

不需要。只有在添加新数据中心或更改复制系数时,才需要更改

我需要在代码中输入所有节点的ip地址吗

不需要。但添加多个联系人可以确保更高的可用性。 如果您的触点断开,驾驶员可以连接到另一个触点。一旦连接,它就可以得到所有节点的列表。

回答您的大部分问题

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

不需要。只有在添加新数据中心或更改复制系数时,才需要更改

我需要在代码中输入所有节点的ip地址吗

不需要。但添加多个联系人可以确保更高的可用性。 如果您的触点断开,驾驶员可以连接到另一个触点。一旦连接,它就可以获得所有节点列表