2010-07-23 6 views
2

나는 PenWag.com을 위해 MySQL에서 Cassandra로 변환하는 과정에있다. Cassandra에서는 GUID로 키 조작 된 사용자를 저장하지만 사용자는 GUID가 아니라 이메일로 로그인합니다. 사용자를위한 열쇠 인 GUID는 두 가지 이유로 이메일보다 의미가 있습니다. 실용적인 관점에서 모든 SuperColumns를 사용하여 행을 변경하거나 삭제/추가하는 것은 너무 성가신 것 같습니다. 이론적 인 견지에서 볼 때 여전히 동일한 사용자이지만 핵심이 왜 바뀌어야합니까?Cassandra/BigTable 데이터 모델 - 색인을 만드는 가장 좋은 방법은 무엇입니까?

그럼에도 불구하고, 여기 내 질문 : 나는 별도의 ColumnFamily에서 로그인을 지원하기 위해 전자 메일 -> GUID를 매핑하는 색인을 작성하고 있습니다. 표준 형식의 CF입니다. 열 이름이 전자 메일이고 값이 GUID입니다. 모든 매핑에 대해 전체 SC를로드하는 것을 피하기 위해 Super가 아닌 Standard입니다. "이메일 변경"을 지원하는 것은 간단합니다. 단지 삭제/추가 항목 일뿐입니다. 그러나이 방법 대신 인덱스를 열 대신 행으로 저장하는 것이 좋습니다. 행 키는 전자 메일이고 열은 GUID를 보유합니다. 관리 할 열 (GUID) 만 있으므로 해당 행을 삭제/추가하는 것은 번거롭지 않습니다.

두 방법 중 하나라도 작동하는 것으로 보입니다. 각 장단점은 무엇입니까? 모범 사례가 있습니까?

답변

2

내가 더 손에 카산드라 또는 유사한 데이터베이스와 경험이 없기 때문에, 당신은을 사용하여, 당신은 열 각 매핑을 저장하세요 소금 :

의 곡식 내 대답을해야합니다 전자 메일 주소를 열 이름으로 사용하는 경우 엄청난 양의 열이 포함 된 단일 행을 의미합니다. 위키 백과 [1]에 따르면

단일 행 키 아래의 모든 작업에 상관없이 많은 열을 읽거나에 기록되는 방법 복제 당 원자 없습니다.

모든 매핑이 단일 행에 저장되는 경우 이로 인해 심각한 잠금 오버 헤드가 발생할 수 있습니다.

카산드라 위키 [2] 상태 :

로우 키 시스템 데이터가 저장되어 있는지를 판정하는 것이다.

이렇게하면 열 이름보다 행 키를 기반으로하는 조회가 더 효율적이라고 생각합니다. 이 정보를 바탕으로 전자 메일 주소를 행 키로 사용하고 열에 GUID를 저장하는 것이 좋습니다.

+0

나도 이메일을 사용 :

나는 0.7 당신은 당신의 키 입력에 의해-UUID 사용자 데이터의 나머지 행에 이메일 열을 가질 수 및 인덱스에 카산드라를 요구하기 때문에 그 자격 주소는 키이고 GUID는 열입니다. 따라서 하나의 열과 많은 행이 있습니다. 그렇게하면 데이터가 클러스터 전체에 퍼질 수 있습니다. – Zanson