2016-10-26 3 views
0

저는 최근에 카산드라를 사용하기 시작했습니다. 저는 전통적인 관계형 데이타베이스 배경에서 왔습니다. 그래서 확실히 다릅니다. 내가 항상하는 일 중 하나는 각 행 (OID 등)에 대해 고유 한 ID를 생성하는 것입니다. 그래서 Cassandra에서 작성한 테이블에 대해서는 각 테이블에 UUID 열을 추가하고 UUID를 생성했습니다. 제 질문은 ... 이것이 정말로 "필요한 것"입니까? 나는 UUID를 파티션 키의 일부로 사용하지 않기 때문에 현재로서는 아무 것도 쓰지 않고 있지만, 깨지기는 힘든 습관이다. 몇 가지 조언이 좋을 것입니다!카산드라의 UUID가 실제로 "필요합니까?"

답변

2

정확히 필요하지 않습니다. 그러나 어떤 경우 UUID를 테이블에 도입하는 것이 유용 할 수 있습니다. 이 표는 로그인하여 사용자를 쿼리 할 수 ​​있습니다

CREATE TABLE user (
    id uuid, 
    name text, 
    login text, 
    day_of_birth date 
) PRIMARY KEY (login); 

: 예를 들어 은 같은 테이블이 상상한다. 이제 이름으로 사용자를 쿼리하려고한다고 가정 해보십시오. 물론 이런 종류의 쿼리를 몇 시간 만 실행하면 SECONDARY INDEX을 만들 수 있습니다. 당신이 좋은 읽기 성능을 갖고 싶어 그러나, 당신은 같은 테이블 구조를 갖는하여 데이터를 비정규 수 있습니다

CREATE TABLE user (
    id uuid, 
    name text, 
    login text, 
    day_of_birth date 
) PRIMARY KEY (id); 

CREATE TABLE user_by_name (
    id uuid, 
    name text 
) PRIMARY KEY (name); 

CREATE TABLE user (
    id uuid, 
    login text 
) PRIMARY KEY (login); 

하지만이 구조로, 당신은 데이터를 유지하기 위해 3 개 테이블에 삽입 및 업데이트해야합니다. 다른 두 개의 테이블을 만드는 대신 MATERIALIZED VIEW을 사용하면 하나의 테이블 만 유지할 수 있습니다.

CREATE TABLE user (
    id uuid, 
    name text, 
    login text, 
    day_of_birth date 
) PRIMARY KEY (id); 

CREATE MATERIALIZED VIEW user_by_name 
AS 
SELECT * 
FROM user 
WHERE id IS NOT NULL 
    AND name IS NOT NULL 
PRIMARY KEY ((name), id); 

CREATE MATERIALIZED VIEW user_by_login 
AS 
SELECT * 
FROM user 
WHERE id IS NOT NULL 
    AND login IS NOT NULL 
PRIMARY KEY ((login), id); 
+0

오, 멋지다! 나는 카산드라가 Materialized Views를 가지고 있다는 것을 몰랐다. 그게 실제로 내가 새로운 테이블을 만들어야한다고 생각한 시나리오에서 나를 엄청나게 도와 줄거야. 감사! – cloudwalker

+0

구체화 된보기가 cassandra> = 3.0에서만 지원된다는 사실을 잊어 버렸습니다. –

관련 문제