4

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

http://server1.example.com/some_stuff.htmlhttp://server2.example.com/some_stuff.html应该存储和显示特定服务器独有的数据。如果其中一台服务器死机,则该表及其数据将随之消失。

4

2 回答 2

3

我认为 CQL 不支持表级复制因子(请参阅可用的创建表选项)。一种替代方法是创建一个复制因子 = 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 集群,其中每个集群只有一个节点。

于 2013-08-12T18:52:32.200 回答
1

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

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

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

您的数据的确切存储位置由行键以及此处记录的分区程序确定。这是 DDBS 的固有部分,没有简单的方法可以强制执行此操作。

我能想到的将一台服务器的所有数据物理地放在一个节点上的一个表中的唯一方法是:

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