카 산 드 라 3 예 뒤의 모형

더 읽 기
/**
   * 글 쓴 이 ahuaxuan (장 용화)
   * date 2010-2-25
   */
카 산 드 라 3 예 뒤의 모형
지난 글 에서 ahuaxuan 은 여러분 과 함께 카 산 드 라 의 insert 와 get 의 예 를 썼 습 니 다.이 예 에서 우 리 는 카 산 드 라 를 조작 하 는 가장 기본 적 인 절 차 를 알 게 되 었 다.
그 밖 에 우 리 는 카 산 드 라 의 데이터 모델 을 초보 적 으로 이 해 했 지만 천박 하 게 이 해 했 을 뿐 이 었 다. 그러면 우 리 는 지난 편의 화 제 를 이 어 이 문 제 를 계속 논술 했다.
우리 가 데 이 터 를 조작 하 는 코드 에서:
      
 String table = "Keyspace1";
        String row = "row007";
        ColumnPath col = new ColumnPath("Standard1", null, "ahuaxuan".getBytes());


        cassandraClient.insert(table, row, col, " first cassandra sample of ahuaxuan".getBytes(), 1, 1);




 
우 리 는 세 가지 개념 을 만 났 다. 첫 번 째 는 키 스페이스, 두 번 째 는 ColumnFamily, 세 번 째 는 Row 이다.
앞의 두 속성, 우 리 는 데이터베이스 와 표 의 관계 로 볼 수 있 습 니 다. 그러면 세 번 째 속성 은 요?
카 산 드 라 글 에 서 는 ColumnFamily 의 데 이 터 는 정렬 한 후에 단독 파일 에 저 장 됩 니 다. row 는 정렬 인자 입 니 다. 그 row 는 사실 우리 의 key 일 수 있 습 니 다.
사실 카 산 드 라 의 소스 코드 에서 row 는 key 입 니 다. 예 를 들 어 우 리 는 이 소스 코드 를 봅 니 다.
위의 이 방법의 두 번 째 매개 변 수 를 보면 사실은 key 입 니 다.
그래서 이곳 을 보고 우 리 는 기본적으로 카 산 드 라 의 저장 모델 을 확정 했다.
Keyspace 1 - row 007 - Standard 1, 어떤 keyspace 에 있 는 키 의 어떤 Column Family 를 확인 할 수 있 습 니 다.
그리고 Column Name 과 Column Value 를 포함 한 Column 을 만 들 고 timestamp 도 포함 합 니 다.
여기 서 주의해 야 할 것 은 같은 key 중 하나 이 며, 같은 Column Family 에 서 는 column 의 이름 이 유일 해 야 합 니 다. 중복 되면 덮어 쓸 수 있 습 니 다.코드 를 보 겠 습 니 다.
 
public static void main(String[] args) throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException {
        init();
        String table = "Keyspace1";
        String row = "row007";
        ColumnPath col = new ColumnPath("Standard1", null, "ahuaxuan".getBytes());
        ColumnPath col2 = new ColumnPath("Standard2", null, "ahuaxuan".getBytes());


        cassandraClient.insert(table, row, col, " first cassandra sample of ahuaxuan".getBytes(), 3, 1);
        cassandraClient.insert(table, row, col2, " second cassandra sample of ahuaxuan ".getBytes(), 4, 1);
        Column column = cassandraClient.get(table, row, col, 1).column;
        Column column2 = cassandraClient.get(table, row, col2, 1).column;


        System.out.println("read row " + row);
        System.out.println("column name: " + new String(column.name));
        System.out.println("column value" + ": " + new String(column.value));
        System.out.println("column timestamp" + ":" + (column.timestamp));


        System.out.println("\r
read row " + row); System.out.println("column name: " + new String(column2.name)); System.out.println("column value" + ": " + new String(column2.value)); System.out.println("column timestamp" + ": " + (column2.timestamp)); }
 
처음으로 Keyspace 1 - row 007 - Standard 1 에 넣 었 습 니 다. 열 이름 은 ahuaxuan 이 고 열 값 은 first cassandra sample of ahuaxuan 이 며 timestamp 는 3 입 니 다.
이어서 저 는 Keyspace 1 - row 007 - Standard 1 을 업 데 이 트 했 습 니 다. 열 이름 은 ahuaxuan 이 고 열 값 은 second cassandra sample of ahuaxuan 이 며 timestamp 는 2 입 니 다.
결 과 는 업데이트 에 성공 하지 못 했 습 니 다. 하지만 제 가 timestamp 를 4 로 바 꾸 면 업데이트 에 성공 할 수 있 습 니 다.
그리고 위의 이 예 에서 우 리 는 키 스페이스 - row - columnpfamily 중 하나 가 다 르 면 덮어 쓰 는 문제 가 발생 하지 않 는 다 는 것 을 알 수 있다.
그래서 우 리 는 여기 서 덮어 쓸 수 있 습 니 다. 덮어 쓸 지 여 부 는 코드 에 있 는 timestamp 에 의 해 결 정 됩 니 다. 현재 카 산 드 라 에 있 는 그 데이터 의 timestamp 가 삽입 할 데이터 보다 크다 면 덮어 쓰 지 않 고 반대로 덮어 쓰 지 않 습 니 다.
그러나 본질 적 으로 반드시 덮어 쓰 는 것 은 아니다. bigtable 의 논문 에서 명확 하 게 썼 기 때문에 예전 의 버 전 은 보 존 될 것 이다. 즉, 오래된 데 이 터 는 존재 할 것 이다. 물론 우 리 는 모든 오래된 버 전 데 이 터 를 유지 할 수 없다. 그러면 반드시 한도 값 이 있 을 것 이다.
구체 적 으로 몇 개의 오래된 버 전 을 유지 해 야 하 는 지 를 제어 하 다.그 논문 은 다음 과 같이 썼 다.
저 희 는 각 열 족 에 대해 두 개의 설정 을 지원 하여 Bigtable 이 표 항목 의 버 전 을 자동 으로 쓰레기 를 제거 할 수 있 도록 합 니 다.사용 자 는 표 항목 의 마지막 n 개 버 전 만 유지 하거나 새로운 버 전 만 유지 할 수 있 습 니 다 (예 를 들 어 최근 7 일의 내용 만 유지 합 니 다).
이렇게 실제 적 인 의미 가 없 는 예 를 쓰 면 사람들 로 하여 금 비교적 공허 함 을 느끼 게 하기 때문에 여기 ahuaxuan 은 bigtable 논문 중의 한 예 를 인용 하여 다음 과 같은 모델 이 적용 되 는 장면 을 묘사 하 는 것 을 참 을 수 없다.
위의 그림 에서 보 듯 이
 이것 은 웹 페이지 를 저장 하 는 범례 목록 세 션 입 니 다.줄 이름 은 역방향 URL (즉 com. cnn. ww 곶 입 니 다.contents 열 족 (원문 은 family 로 번역 하고 족 으로 번역 합 니 다. 상세 한 것 은 열 족 곶 이 웹 페이지 내용 을 저장 하고 anchor 열 족 은 이 웹 페이지 를 참조 하 는 닻 링크 텍스트 를 저장 합 니 다.CNN 홈 페이지 는 Sports Illustrater (이른바 SI, CNN 의 간판 스포츠 프로그램 곶 과 MY - look 홈 페이지 에 인용 되 어 있 기 때문에 이 줄 에는 'anchor: cnnsi. com' 과 'anchhor: my. look. ca' 라 는 열 이 포함 되 어 있다.각 닻 링크 는 하나의 버 전 (시간 스탬프 표지, 예 를 들 어 t9, t8 곶;한편, contents 열 은 세 가지 버 전이 있 는데 각각 시간 스탬프 t3, t5, t6 표지 이다.
물론 이런 데이터 모델 을 사용 할 수 있 는 장면 이 매우 많 습 니 다. 우 리 는 이 를 key - value 시스템 으로 사용 할 수 있 습 니 다. 버 전 번호 의 특징 이 있 기 때문에 일부 데이터 일치 성 문 제 를 해결 할 수 있 습 니 다 (이 문 제 는 매우 중요 합 니 다. 우 리 는 뒤의 문장 에서 상세 하 게 논술 할 것 입 니 다).
그렇다면 다음 문 제 는 카 산 드 라 가 이 모델 을 어떻게 실현 하 느 냐 하 는 것 입 니 다. 이어서 내 려 다 보 세 요.
to be continued

좋은 웹페이지 즐겨찾기