Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复合柱的Cassandra柱族?_Java_Cassandra_Composite - Fatal编程技术网

Java 复合柱的Cassandra柱族?

Java 复合柱的Cassandra柱族?,java,cassandra,composite,Java,Cassandra,Composite,我正在为Cassandra中的用例设计列族。我计划使用动态柱结构 下面是我对每个用例的要求- user-id column1 column2 column3 123 (Column1-Value Column1-SchemaName LMD) (Column2-Value Column2-SchemaName LMD

我正在为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}];
有人能帮我设计这个专栏系列吗?

@TechGeeky

将比较器更改为:

comparator = 'CompositeType(ByteType,UTF8Type,DateType)'
列值的ByteType

列模式名的UTF8Type

LMD的日期类型


但是要小心,使用这种设计,除了按用户id查询数据外,很难查询数据。特别是,如果您事先知道列数据,您可以通过提供列数据(以字节为单位)来获取列的切片…

我建议您使用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如何最终成为引擎盖下的复合柱并使其更易于使用的更多信息,请参见以下文章:

我对这种方法感到困惑<代码>比较器用于列名。。对吗?但我需要复合值。。每列都有复合值。在我的例子中,我需要在一个列中有三个值。而该列名可以是
e1
e2
e3
或我的情况下的任何东西..“comparator是指列名..对吗?”-->准确。在这种情况下,列名将是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的解决方案。但是在走这条路之前,有没有办法使用卡桑德拉本身的任何特性呢?