长宁复合材料在卡桑德拉的关键

时间:2017-08-04 10:58:39

标签: cassandra data-modeling

我想改变我的cassandra表。我知道如果我需要添加额外的主键,我必须创建另一个表。例如,我想转此表

        create table sample1 (
              p1 int,
              p2 timestamp,
              c1 text,
              c2 text,
              c3 text,
              c4 text,
              x1 int,
              x2 int,
              x3 int
              PRIMARY KEY((p1,p2),c1,c2,c3,c4)      
        );

进入此表

        create table sample1 (
              p1 int,
              p2 timestamp,
              c1 text,
              c2 text,
              c3 text,
              c4 text,
              c5 text,
              c6 text,
              x1 int,
              x2 int,
              x3 int
              PRIMARY KEY((p1,p2),c1,c2,c3,c4,c5,c6)      
        );

这种情况将再次发生,我将不得不再次更改此表。

我正在考虑创建这样的表。你觉得这是最好的方法吗?或者还有另一种方式吗?

create table sample1 (
          p1 int,
          p2 timestamp,
          combined_six_field text,
          c1 text,
          c2 text,
          c3 text,
          c4 text,
          c5 text,
          c6 text,
          x1 int,
          x2 int,
          x3 int
          PRIMARY KEY((p1,p2), combined_six_field)      
    );

1 个答案:

答案 0 :(得分:1)

您可以将冻结地图用作群集列。

示例:

CREATE TABLE sample1 (
      p1 int,
      p2 timestamp,
      c frozen<map<text, text>>,
      x1 int,
      x2 int,
      x3 int
      PRIMARY KEY((p1,p2), c)      
);

插入示例:

INSERT INTO sample1(pk1, pk2, c, x1, x2, x3) VALUES (
     1,
     toTimestamp(now()),
     {'c1' : 'v1', 'c2' : 'v2', 'c3' : 'v3'},
     10,
     100,
     1000
);

INSERT INTO sample1(pk1, pk2, c, x1, x2, x3) VALUES (
     2,
     toTimestamp(now()),
     {'c1' : 'v1', 'c2' : 'v2', 'c3' : 'v3', 'c4' : 'v4', 'c5' : 'v5', 'c6' : 'v6'},
     20,
     200,
     2000
);