复合柱的 Cassandra 柱族?

Posted

技术标签:

【中文标题】复合柱的 Cassandra 柱族?【英文标题】:Cassandra column family for Composite Columns? 【发布时间】:2013-09-17 23:42:08 【问题描述】:

我正在为 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];

谁能帮助我为此设计列族?

【问题讨论】:

【参考方案1】:

@TechGeeky

将比较器更改为:

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

列值的字节类型

列-SCHemaName 的 UTF8Type

LMD 的日期类型

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

【讨论】:

我对这种方法感到困惑。comparator 用于列名。对吗?但我需要复合值。每列都有复合值。就我而言,我需要在单个列中包含三个值。该列名称可以是 e1e2e3 或任何在我的情况下.. "比较器用于列名。对吗?" --> 准确。在这种情况下,您的列名将是 v1:v2:v3 的复合值。 v1 是一个字节[],v2 是一个字符串,v3 是一个日期 我明白了,但我需要的是 - columnName 应该是像 e1 这样的单个字符串,并且列值应该是 v1:v2:v3 的复合值。 v1 是一个字节[],v2 是一个字符串,v3 是一个日期。这可能吗? " 列值应该是 v1:v2:v3 的复合值" --> 在这种情况下,在 Java 中创建一个封装 v1、v2 和 v3 的类。然后将此类序列化为 JSON。您可以通过将列值类型定义为 UTF8Type 来存储此 JSON 有效负载 感谢 doanduyhai 的建议。这是我将所有内容序列化为 JSON 的最后一个解决方案。但是在走这条路之前,有什么办法可以使用 Cassandra 本身的任何功能吗?【参考方案2】:

我建议你使用 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

【讨论】:

以上是关于复合柱的 Cassandra 柱族?的主要内容,如果未能解决你的问题,请参考以下文章

cassandra安装配置

Cassandra 不使用本机方法

cassandra 查询超时

Oracle 到 Apache Cassandra 数据迁移

Cassandra 1.1 存储引擎如何存储复合材料?

cassandra集群缩容与剔除问题节点