2011-11-28 6 views
3

와 슈퍼 열에 대한 카산드라 스키마를 만들어 내가 주소와 주소를 가진 사람이 예를 들어메타 데이터

-cli 카산드라 내 데이터베이스에서 다음과 같은 구조가 우편 번호를 포함하려면, housenumber 등 회로도 그것은 다음과 같습니다 :

name: "address", 
value: { 
    city: {name: "city", value: "San Francisco"}, 
    street: {name: "street", value: "555 Union Street"}, 
    zip: {name: "zipcode", value: "94105"}, 
} 

저는 수퍼 컬럼과 일반 컬럼을 만드는 방법을 알고 있습니다. 하지만 column_metadata를 사용하여 수퍼 컬럼의 열의 모양을 지정하고 싶습니다.

Create column family person 
with comparator = UTF8Type 
and key_validation_class=UTF8Type 
and default_validation_class = UTF8Type 
and compression_options = 
{sstable_compression:SnappyCompressor, chunk_length_kb:64} 
and column_metadata = [ 
{column_type: super, column_name: address, validation_class: UTF8Type 
column_metadata =[ 
{column_name: city, validation_class: UTF8Type} 
{column_name: Street, validation_class: UTF8Type} 
{column_name: zip, validation_class: UTF8Type} 
{column_name: housnumber, validation_class: LongType} 
]; 

이 전혀 가능 : 는 그래서 이런 일을 끝낼 것인가?

수퍼 컬럼을 다른 수퍼 컬럼에 넣을 수 있다면 더 좋을 것입니다. 이 방법으로 수퍼 컬럼 "주소"는 여러 개의 수퍼 컬럼 "주소"와 컬럼 "거리", "우편 번호"등을 포함 할 수 있습니다.

답변

7

슈퍼 컬럼의 컬럼 메타 데이터는 이미 서브 컬럼 자체에 적용됩니다. 위의 예에서 super 열에 대한 validation_class를 UTF8Type으로 설정합니다. 수퍼 컬럼의 값 자체가 UTF8이 아니기 때문에 이것은 실제로 이해가되지 않습니다. 수퍼 컬럼 이름은 UTF8Type으로 설정 한 비교기 유형에 따라 이미 유효성이 검사되고 정렬됩니다.

그래서 당신이 필요로하는 무엇을 :

column_metadata = [ 
    {column_name: city, validation_class: UTF8Type} 
    {column_name: Street, validation_class: UTF8Type} 
    {column_name: zip, validation_class: UTF8Type} 
    {column_name: housnumber, validation_class: LongType} 
]; 

그것은이 메타 데이터가 행의 모든 ​​슈퍼 컬럼에 적용된다는 점에 주목할 필요가있다. 따라서 '도시'라는 하위 열이있는 수퍼 열이 여러 개인 경우 유효성 검사가 모두 적용됩니다.

수퍼 컬럼의 사용에는 일반적으로 몇 가지 단점이 있으므로 권장하지 않습니다. 하나의 서브 컬럼을 읽을 때 수퍼 컬럼의 모든 서브 컬럼을 직렬화 해제해야하며 수퍼 컬럼에 2 차 인덱스를 설정할 수 없습니다. 또한 한 단계의 중첩 만 지원합니다.

http://www.datastax.com/docs/1.0/ddl/column_family#about-super-columns

는 정기적으로 열 가족에 열 비교기로의 CompositeType을 사용할 수 있습니다 중첩의 임의의 수준을 달성합니다. 불행히도 지금은 CompositeType에 대한 많은 문서가 없습니다. 나는 더 많은 정보 src/java/org/apache/cassandra/db/marshal/CompositeType.java에 대한 소스를 살펴볼 것을 제안한다.

+0

일반 열과 수퍼 열을 섞을 수 없다는 것을 알았습니다. 안 됐구나. 그러나 열 메타 데이터에 대한 설명에 대한 감사는 하위 열에 직접 적용됩니다. 나는 그것을 몰랐다. – Rubenski