2012-08-23 2 views
0

libQtCassandra을 썼고 현재 버전은 수퍼 컬럼을 지원하지 않습니다. 이러한 지원을 추가하지 않은 한 가지 이유는 배열 연산자 ([])를 사용하여 데이터에 액세스하고 데이터를 쓰는 방법을 사용자에게 제공하기 위해 라이브러리에서 사용하는 체계를 깨뜨린 것이 었습니다. 당신이 익숙하지 않은 경우libQtCassandra 라이브러리의 수퍼 컬럼을 어떻게 지원합니까?

, 라이브러리하자 당신은 "문맥"(A 카산드라 클러스터에 연결)를 만들고 그 상황에서 당신은 다음과 같이 쓸 수 있습니다 : 그래서

// set value 123 in "column name" of "row key" of "column family": 
context["column family"]["row key"]["column name"] = 123; 
// retrieve that value: 
int value = context["column family"]["row key"]["column name"]; 

을 ... 아주 간단합니다. 그러나 수퍼 컬럼을 도입 할 경우 수퍼 컬럼이 있는지 여부에 따라 하나 이상의 배열 액세스를 추가합니다. 너는 무엇을 할 것이냐?

함수를 사용하여 수퍼 컬럼에 액세스 하시겠습니까?

context["column family"]["row key"].sc("super column")["column name"] = 123; 

다른 매개 변수처럼 수퍼 컬럼을 원활하게 작동 시키시겠습니까?

context["column family"]["row key"]["super column"]["column name"] = 123; 

물론 시스템 (열 패밀리)은 무엇이 무엇인지 압니다. 따라서 어느 방법으로도 구현하기 쉽습니다. 수퍼 컬럼의 배열 구문을 지원하기 위해서는 라이브러리가 상당히 복잡해졌습니다.

행을 지정할 때 사용할 수있는 개체를 추가하는 것이 다른 아이디어였습니다. 하지만 오히려 추한 외모 :

context["column family"][sc("row key", "super column")]["column name"] = 123; 

이 구현하는 것이 더 쉽습니다하지만 최종 코드를 볼 때 너무 좋아 보이지 않습니다.

이러한 문제에 대한 접근 방식은 무엇입니까?

답변

2

supercolumn 지원을 도입 한 것처럼 보이면 더 이상 사용되지 않는 기능을 계속 사용할 수 있습니다. 합성물과 같은 대안의 사용은 수퍼 컬럼으로 사람들을 밀어 넣는 문제를 푸는 데 더 나은 접근법입니다. 노력이 실제로 잘못된 방향으로 움직이는 것이 아닌지 확신 할 수 없습니다. 그 동안 사람들이 C++ 앱에서 수퍼 컬럼에 액세스해야한다면 Thrift를 사용하여 슈퍼 컬럼을 액세스 할 수 있습니다.

제 제안은 libQtCassandra에 합성 지원을 추가하는 방법에 대해 논의하는 것입니다. 왜냐하면 지금은 보이지 않기 때문입니다. 이렇게하면 올바른 구문에 쉽게 액세스 할 수 있으므로 사용자가 현명한 데이터 모델 선택을하도록 권장합니다.

+0

아아 ... 나는 슈퍼 칼럼이 카산드라에서 일종의 해킹 인 것을 알고 있었지만, 나는 그들이 더 이상 사용되지 않을 것이라는 것을 알지 못했다. 마지막으로 내가 읽은 것은 반대였습니다. 더 나은 구현을 위해 (모든 데이터를 열에 저장하고 셀 데이터로드를 수동으로 처리하는 대신 개별적으로 올바르게 처리 할 것입니다. 개체). 어쨌든 ... 나는 대신 복합 열 기능을 살펴보고 수퍼 컬럼 만 남겨 둘 것입니다. 이미 사용 중지 된 경우에는 그럴 가치가 없습니다. –

관련 문제