2013-07-16 3 views
0

내가 CQL & 복합 키에 새로운 (나는 이전에 사용 CLI)입니다 내가 대신 복합 키를 사용하여 내 오랜 슈퍼 열 가족을 구현하기 위해 찾고 있어요. 한마디로 내 룩업 모델은 다음과 같습니다카산드라 CQL3 복합 키는 중복 된 값을 반환

/*Example insertions*/ 
INSERT INTO blocks (file_id, start_position, block_id,size) VALUES ('test_schema_file', 0, 'testblock1', 500); 
INSERT INTO blocks (file_id, start_position, block_id,size) VALUES ('test_schema_file', 500, '2testblock2', 501); 

I 조회 :

CREATE TABLE blocks (
file_id text, 
start_position bigint, 
block_id text, 
size bigint, 
PRIMARY KEY (file_id, start_position,block_id) 
); 

내가 이러한 샘플 값을 삽입 :
blocks[file_id][position][block_id]=size 

내가 복합 키를 사용하여 folowing CQL 테이블이

OperationResult result = m_keyspace.prepareQuery(m_BlocksTable).getKey(file).execute(); 

     ColumnList<BlockKey> columns = (ColumnList<BlockKey>) result.getResult(); 
     for (Column<BlockKey> column : columns) { 
      System.out.println(StaticUtils.fieldsToString(column.getName())); 
      try{ 
      long value=column.getLongValue(); 
       System.out.println(value); 
      }catch(Exception e){ 
       System.out.println("Can't get size"); 
      } 

     } 
,369이 아 스티 아낙 스 코드를 사용하여

결과를 반복 할 때 각 열에 대해 2 개의 결과를 얻습니다. 하나는 "크기"를 포함하고 다른 하나는 "크기"열이 존재하지 않는 것입니다. 블록 [FILE_ID] [위치] block_id = 사이즈 : 이론적

  1. 내가는 복합 키의 값이어야 크기 열을 필요로하지 않는다 :

    recorder.data.models.BlockKey Object { 
        m_StartPosition: 0 
        m_BlockId: testblock1 
        m_Extra: null 
    } 
    Can't get size 
    recorder.data.models.BlockKey Object { 
        m_StartPosition: 0 
        m_BlockId: testblock1 
        m_Extra: size 
    } 
    500 
    recorder.data.models.BlockKey Object { 
        m_StartPosition: 500 
        m_BlockId: 2testblock2 
        m_Extra: null 
    } 
    Can't get size 
    recorder.data.models.BlockKey Object { 
        m_StartPosition: 500 
        m_BlockId: 2testblock2 
        m_Extra: size 
    } 
    501 
    

    그래서 두 질문 블록 대신 [file_id] [위치] [block_id] [ '크기'] = 크기. . 어떻게 중복 크기 열을 만들지 않고이 데이터를 CQL3에 올바르게 삽입합니까? 나는 그런 행을 삽입하지 않을 경우

  2. 이유는, '크기'하지 않고 여분의 열을 무엇입니까? CQL와 별도의 메타 데이터를 저장하는 여분의 삽입 절약 열의 존재 때문에 "중복 '

답변

2

이다. 귀하의 예제와 함께,에서 카산드라 - CLI 당신은 무슨 일이 일어나고 있는지 볼 수 있습니다 : 당신이 CQL에 데이터를 삽입하는 경우, 당신이 너무 CQL으로 조회해야

[[email protected]] list blocks; 
------------------- RowKey: test_schema_file 
=> (column=0:testblock1:, value=, timestamp=1373966136246000) 
=> (column=0:testblock1:size, value=00000000000001f4, timestamp=1373966136246000) 
=> (column=500:2testblock2:, value=, timestamp=1373966136756000) 
=> (column=500:2testblock2:size, value=00000000000001f5, timestamp=1373966136756000) 

. m_keyspace.prepareCqlStatement().withCql("SELECT * FROM blocks").execute();을 사용하여 Astyanax에서이 작업을 수행 할 수 있습니다. 답에 대한

+0

감사합니다. 메타 데이터의 성격을 아십니까? – eshalev