4

このような構造を複製する Super Column Family を作成しようとしています。

{ '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)

スーパーカラムファミリーとは何かを正しく理解していないかもしれませんが、どんな助けも素晴らしいでしょう.

ありがとう。

4

2 に答える 2

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 でストレージ エンジン全体の行に変換される方法の詳細については、この記事を参照してください。

于 2012-05-19T17:37:05.580 に答える
2

どのAPIを使用しているのかわかりますか?それがヘクターなら、私はあなたを助けるかもしれません。ただし、個人的には、スーパー列からサブ列リストを取得するのは頭痛の種であるため、スーパー列を使用しないことをお勧めします。さらに、パフォーマンスに関連する問題がたくさんあります。さらに、スーパーカラムは非推奨になりつつあります。したがって、複合キーを使用することをお勧めします。

于 2012-05-20T07:56:57.370 に答える