2013-11-02 1 views
1

저는 Astyanax 클라이언트를 사용하여 Cassandra의 한 컬럼과 그 데이터를 제외하고 모든 컬럼과 그 데이터를 삭제해야하는 프로젝트를 진행 중입니다.Astyanax 클라이언트를 사용하여 하나의 열을 제외한 모든 열과 데이터를 삭제 하시겠습니까?

필자는 아래와 같은 동적 열 패밀리를 보유하고 있으며 이미 열 패밀리에 2 백만 개의 레코드가 있습니다.

create column family USER_TEST 
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}]; 

내가 가지고있는 rowKey와 다른 열이 같은 것입니다 나는이 user_id이 -

a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,lmd 

가 지금은 a15 열을 제외한 모든 열 및 데이터를 삭제해야합니다.

- 의미, 나는 이미 특정 rowKey에 대한 아 스티 아낙 스 클라이언트를 사용하여 카산드라에서 데이터를 삭제하는 방법을 알고 a15 열과 열 및 데이터의 모든 user_id(rowKey) 및 삭제 나머지 데이터 ..

을 유지하려면

public void deleteRecord(final String rowKey) { 

    try { 
     MutationBatch m = AstyanaxConnection.getInstance().getKeyspace().prepareMutationBatch(); 

     m.withRow(AstyanaxConnection.getInstance().getEmp_cf(), rowKey).delete(); 

     m.execute(); 

    } catch (ConnectionException e) { 
     // some code 
    } catch (Exception e) { 
     // some code 
    } 
} 
지금 어떻게 효율적으로 아 스티 아낙 스 클라이언트를 사용하여

어떤 생각을 할 수있는 방법을 ... 내 rowKey 모든 사용자 ID에 대한 하나의 열을 제외한 모든 열 및 데이터를 삭제하는 방법?

답변

2

Astyanax는 현재 스토리지 엔진과 Thrift API에 추가 된 슬라이스 삭제 기능을 지원하지 않습니다. 절약 API 참조를 보면 : http://wiki.apache.org/cassandra/API10 삭제 작업은 열 목록 또는 SliceRange 중 하나를 취할 수있는 SlicePredicate를 사용하는 것을 볼 수 있습니다. SliceRange는 유지하고자하는 열보다 크거나 작은 모든 열을 지정할 수 있으므로 두 개의 슬라이스 삭제 작업을 수행하여 행의 열 하나를 제외한 모든 열을 삭제할 수 있습니다.

아쉽게도 Astyanax는 전체 행 또는 정의 된 열 목록을 삭제할 수 있으며 전체 SlicePredicate 기능을 래핑하지 않습니다. 따라서 다음과 같은 두 가지 옵션이 있습니다 : 1) 원시 슬리 프 슬라이스 삭제, Astyanax 랩퍼 무시 또는 참조 2) 열 삭제 후 행 삭제와 열 쓰기 수행. 이상적으로는 효율적이지는 않지만 너무 자주하지 않으면 금지되어서는 안됩니다. 또는 3) 전체 행을 읽고 보존하려는 열 이외의 모든 열을 명시 적으로 삭제하십시오.

저장소 엔진과 thrift API가 모두 조각 삭제를 지원하지만 CQL에서도 명시 적으로 지원하지는 않습니다.

이 티켓을 제출하여 마지막 제한 사항을 해결했습니다. https://issues.apache.org/jira/browse/CASSANDRA-6292

관련 문제