我正在为Cassandra的用例设计Column Family。我打算采用动态列结构。
以下是我的用例 -
user-id column1 column2 column3
123 (Column1-Value Column1-SchemaName LMD) (Column2-Value Column2-SchemaName LMD) (Column3-Value Column3-SchemaName LMD)
对于每个user-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}];
有人可以帮我设计色谱柱系列吗?
答案 0 :(得分:1)
@TechGeeky
将比较器更改为:
comparator = 'CompositeType(ByteType,UTF8Type,DateType)'
列值的字节值
Column-SChemaName的UTF8Type
LMD的DateType
但请注意,使用此设计,查询您的数据而非用户ID将很难。特别是你可以通过提供列数据(以字节为单位)获得列片,如果你事先知道它们的话......
答案 1 :(得分: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