是否有可能没有复制的Cassandra表?

时间:2013-08-12 12:32:59

标签: cassandra cql cql3

系统中有一个特定的表,我实际上希望在每台服务器上保持唯一。

即。 http://server1.example.com/some_stuff.htmlhttp://server2.example.com/some_stuff.html应存储和显示该特定服务器的唯一数据。如果其中一个服务器死掉,那么该表及其数据就会随之而来。

2 个答案:

答案 0 :(得分:3)

我认为CQL不支持表级复制因子(参见可用的create table options)。另一种方法是创建一个复制因子= 1的键空间:

    CREATE KEYSPACE <ksname>
        WITH replication = {'class':'<strategy>' [,'<option>':<val>]};

    Example:
     To create a keyspace with SimpleStrategy and "replication_factor" option
     with a value of "1" you would use this statement:
        CREATE KEYSPACE <ksname>
            WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};

然后在该密钥空间中创建的所有表都没有复制。

如果您想为每个节点创建一个表,那么我认为Cassandra并不直接支持这一点。一种解决方法是为每个节点启动一个额外的Cassandra集群,其中每个集群只有一个节点。

答案 1 :(得分:1)

我不确定你为什么要那样做,但这是我对此的看法:

在Cassandra集群中的节点之间分配实际数据由行键确定。

仅将复制因子设置为1不会将来自一个列族/表的所有数据放在1个节点上。数据仍将根据您的行密钥进行拆分/分发。

确切地说,您的数据将存储在哪里is determined by the row key along with the partitioner as documented here。这是DDBS的固有部分,并没有简单的方法来强迫它。

我能想到的唯一方法是在一个节点上的一个表中以一个服务器的形式获取一个服务器的所有数据:

  1. 每个服务器使用一行密钥并创建(非常)宽行(可能使用复合列密钥)
  2. 并欺骗您的令牌选择,以便所有行键令牌映射到您期望的节点(http://wiki.apache.org/cassandra/Operations#Token_selection