2012-10-22 47 views
2

进出口新的卡桑德拉和我试着去创建一个模式,这将让我有一个行作为卡桑德拉:创建的CompositeType列

users: { 
    name: <value>, 
    ... 
    phone_numbers:1: <value>, 
    phone_numbers:2: <value>, 
    ... 
    phone_numbers: <value> 
} 

我一直在阅读了关于组合柱,并只能够找到主键是组合的例子。那么是否有可能在一个CF上面有上述内容?

我的尝试是: -

create column family users with comparator=AsciiType 
and key_validation_class=AsciiType 
and column_metadata=[ 
{column_name: name, validation_class: AsciiType, index_type: KEYS}, 
{column_name: phone_numbers, validation_class: CompositeType(AsciiType, IntegerType), index_type: KEYS}]; 

上面的失败。 任何帮助理解 欢呼声

回答

1

的CompositeType在卡桑德拉不仅可以被用来作为comparator [列名的类型]或者key_validation_class [行键的类型]但不作为default_validation_class [列值的类型]

create column family users with 
comparator='CompositeType(UTF8Type, IntegerType)' 
and key_validation_class='UTF8Type' 

应该适合你。我已经在卡桑德拉复合类型的共享的详细post

+0

因此将最好的方式来设计我的模式是两个的CF?一个用于比较= AsciiType和第二个CF的用户是带comparitor = CompositeType(AsciiType,IntegerType)的user_phone_numers? – krone

+0

我以为你的OP是regd创建CompositeTypes:P Incase你需要一些模式的帮助尝试描述你的用例和读取,写入模式 – Tamil

1

在CQL 3你可以声明为:(使用类型ASCII为了简单起见)

创建表的用户(用户ASCII,phoneid ASCII,PHONENUMBER ascii, 主键(用户,电话号码))与紧凑型存储;

填补它作为

插入到用户(用户,phoneid,PHONENUMBER值( '约翰·史密斯', '家', '555-121345')

插入到用户(用户,phoneid,PHONENUMBER值( '约翰·史密斯', '办公室', '555-121346')

和检索它作为

SELECT * FROM用户,其中用户= '约翰·史密斯'

用户,phoneid,PHONENUMBER

'约翰·史密斯', '家', '555-121345'

'约翰·史密斯',”办公室”,‘555-121346’

希望它可以帮助

+1

这有助于很多,所以我仍然只能通过一个键的一部分搜索,但有复合键允许我存储数组。 – krone