2013-07-15 1 views
0

카산드라를 처음 접했고 카스 산드라가 읽기 타임 아웃 오류를 많이 발생하고 있습니다. 타임 아웃 시간이 길어졌지만 여전히 문제가있을 수 있습니다 (내 응용 프로그램의 경우 카돈 드리는 데이터 수조를 저장할 것으로 예상 됨)) :Rowkey에 대한 설계 접근 방식 카산드라 및 이미 존재 체크 있음

질문 1 : 모든 카산드라 테이블에서 UUID를 로우 키로 사용합니다 ...하지만 유지 관리를위한 몇 가지 테이블의 경우 사용자 테이블에서와 같은 규칙을 위반합니다. 테이블을보고 나는 저장된 데이터를 이해할 수 있습니다 ... 사용자 테이블에 대한 거대한 케이스와 두 번째 접근 방식에 대한 UUID 올바른 접근 방식을 사용하고 있습니까?

질문 2 : startNodeId, relationTypeId, endNodeId가있는 관계 테이블이 하나 있습니다 ... 그 rowkey는 relationId 인 UUID입니다. startNode, relationType, endNode에 대한 2 차 인덱스를 정의합니다. 비즈니스 케이스에 의해 그들 중 하나 ......... 때문에 각 새로운 행에 대한 기존의 관계를 확인하거나 이미 .... .... 기존의 검사를 피하기 위해 하나의 접근 방식입니다 : 나는 startNodeId, relationTypeId, endNodeId 정렬하고 해시 코드를 만들고이를 ROWKEY로 사용하십시오 ... 그래서 이미 명시 적으로 여기를 피하는 것이 여기에서 피할 수 있습니다 ..........이 오른쪽 접근입니까 ???????

내가 이런 생각에 붙어 나를 인도 해주십시오 ... 어떤지도 정말이 아닌 UUID 값으로 rowkey을 취급 편안 때까지하지 않는 한, 첫 번째 질문에 대한 응답 나에게 가장 큰를

답변

0

도움이 될 것입니다 또한 추적하기가 쉬우 며 UUID로 이동하십시오.

두 번째 질문에 대해서는 compound key을 사용해 보시기 바랍니다. 해시 코드를 Cassandra에 그대로 두지 않아도됩니다.

+0

지도를 주셔서 감사합니다 ... 내가 쓰리 피스 API를 사용하고 있습니다 ... CQL을 사용하지 않고 있습니다 ... 내 사례가 테라 바이트의 데이터를 처리 할 때 CQL이 약간의 오버 헤드 ... 중고품이나 CLI에서 복합 키를 사용할 수 있습니까 ?? – user2572801

+0

당신은 cassandra 1.2 + 시리즈 – abhi

+0

실제로 코드의 대부분을 이미 작성된 cql3 시도해야 ... 그래서 CQL에서 모든 API를 재작 성하는 옵션이 없어 .... 내 주요 의심은 행 키가 UUIDS되지 않은 경우입니다 ... 우리는 커스텀 스티팅을 사용하면 cassandra의 성능이 저하됩니다. – user2572801

-1

1) UUID가 아닌 자연 키를 사용하는 것이 더 좋습니다. 전자 메일, 타임 스탬프, 복합 기본 키 등. UUID를 사용하는 RDBMS 세계에서 접근이다, 당신은 카산드라에서 그것을 피해야한다

2) 읽기 - 수정 - 업데이트 카산드라에 대한 잘못된 패턴입니다. 비즈니스 사례에서 허용하는 경우 데이터를 다시 작성하십시오. 아니면 타임 스탬프를 사용하고 최신 타임 스탬프가있는 행을 가져 오십시오 (TTL을 잊지 마세요).

+0

대단히 감사합니다. 링크를 제공 할 수 있다면 도움이 될 것입니다. UUID에 대한 대안으로 참조 코드 ... 그게 정말 도움이 될 것입니다 .... 둘째 네 나는 readmodifyupdate 접근 방식을 바꾸고 있습니다. 몇 테이블에 대해 저주에서 벗어나서 CQL을 사용하여 복합 키를 정의 할 수 있습니다. .. 내부적으로 cql 테이블 스토리지는 기존 키가 업데이트되었는지 확인합니다 ... 나는 datastax java 드라이버를 사용하기 시작했으나 "핸들러가 스트림 0으로 설정되지 않았습니다.".. 나를 안내 해주십시오. – user2572801