Cassandra超级列族架构创建

4

我正在尝试创建一个超级列族,它将复制以下结构。

{ 'hd':
    '2008/12/12 10:03': { metric1: 'blah', metric2: 'blah'}
    '2008/12/2 9:03': { metric1: 'blah', metric2: 'blah'}
   'cpu':
    '2008/12/12 10:03': { metric1: 'blah', metric2: 'blah'}
    '2008/12/2 9:03': { metric1: 'blah', metric2: 'blah'}
}

我的当前尝试看起来像这样:

create column family Timestep
with column_type = 'Super'
and comparator = 'AsciiType'
and subcomparator = 'DateType'
and default_validation_class = 'DoubleType'
and key_validation_class = 'AsciiType'
and column_metadata = [
    {column_name : metric1, validation_class : DoubleType}
    {column_name : metric2, validation_class : DoubleType}
];

但如果我尝试在cassandra-cli中运行上述命令:
java.lang.RuntimeException: org.apache.cassandra.db.marshal.MarshalException: unable to coerce 'open' to a  formatted date (long)

也许我没有正确理解超级列族的含义,但任何帮助都将不胜感激。
谢谢。
2个回答

4
强烈建议您不要使用supercolumns,尤其是在新的设计中。它们从来没有毫无问题,现在已经被弃用,并且复合键更有能力取代它们。
例如,在CQL 3中可以很好地表示您的数据:
CREATE TABLE Timestep (
    hardware ascii,
    when timestamp,
    metric1 double,
    metric2 double,
    PRIMARY KEY (hardware, when)
);

或者,根据您期望拥有的具体内容,使用以下方式可能更合理:

CREATE TABLE Timestep (
    hardware ascii,
    metricname ascii,
    when timestamp,
    value double,
    PRIMARY KEY (hardware, metricname, when)
) WITH COMPACT STORAGE;

请参阅本文,了解这些内容如何转换为Cassandra中的存储引擎宽行。


2

请问您使用的是哪个API? 如果是Hector,那么我可以帮助您。但是我个人建议不要使用超级列,因为从超级列中获取子列列表非常麻烦。此外,还存在许多性能相关的问题。 此外,超级列正在逐渐废弃。因此最好使用复合键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接