1

我正在为我们在 Cassandra 中的用例设计列族。我打算使用动态列结构。

以下是我对每个用例的要求-

user-id   column1                                        column2                                     column3
123      (Column1-Value  Column1-SchemaName  LMD)       (Column2-Value Column2-SchemaName  LMD)     (Column3-Value  Column3-SchemaName  LMD)

对于每个用户 ID,我们将存储 column1 及其值,并且该值将始终存储这三件事-

(Column1-Value   Column1-SchemaName     LMD)

在上面的示例中,我只显示了三列,但它可能有更多列。

现在我不确定,如何将这三件事始终存储在列值级别?我应该在列级别使用复合列吗?如果是,那么我不确定如何在 Cassandra 中创建这样的列族。

Column1-value will be in binary, Column1-SchemaName will be String, LMD will be DateType.

这是我目前所拥有的——

create column family USER_DATA
with key_validation_class = 'UTF8Type'
and comparator = 'UTF8Type'
and default_validation_class = 'UTF8Type'
and gc_grace = 86400
and column_metadata = [ {column_name : 'lmd', validation_class : DateType}];

任何人都可以帮助我为此设计列族吗?

4

2 回答 2

1

@TechGeeky

将比较器更改为:

comparator = 'CompositeType(ByteType,UTF8Type,DateType)'

列值的字节类型

列-SCHemaName 的 UTF8Type

LMD 的日期类型

不过要小心,使用这种设计,查询您的数据而不是通过用户 ID 会很困难。特别是如果您事先知道它们,您将能够通过提供列数据(以字节为单位)来获取列切片......

于 2013-09-18T07:38:45.577 回答
1

我建议你使用 CQL3。如果您使用 Cassandra 1.2+ 和 CQL3,下表将产生您描述的分区(行)布局。

CREATE TABLE user_data (
    userid text,
    data bytes,
    schema_name string,
    lmd timestamp,
    PRIMARY KEY (userid, data, schema_name, lmd)
)

您可以查看以下文章,了解有关 CQL3 如何最终成为复合列并使其更易于使用的更多信息:
http ://www.datastax.com/dev/blog/cql3-for-cassandra-experts

于 2013-09-18T14:57:39.853 回答