Cassandra Super Column Family Schema Creation

时间:2012-05-19 03:43:11

标签: nosql cassandra time-series

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

{ '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 个答案:

答案 0 :(得分:4)

非常强烈建议您不要使用超级列,尤其是在新设计中。它们从来没有出现过问题,现在它们已被弃用,并且更有能力被复合键取代。

您的数据可以在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中转换为存储引擎范围行的详细信息,请参阅this article

答案 1 :(得分:2)

我可以知道您使用的是哪种API吗? 如果是赫克托耳,那么我可能会帮助你。但我个人而言 建议你不要使用超级列,因为,获取子列表 来自超级专栏是一件令人头疼的事。此外,还有很多与性能相关的问题。 此外,超级列已被弃用。最好使用复合键。