카 산 드 라 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Twitter에서 NiFi로 데이터를 수집하고 데이터 흐름을 제어하고 Solr + Banana로 시각화해 봅시다.이 블로그는 의 첫 번째 항목입니다. Hortonworks의 전시 부스 등에서 보았을지도 모르지만 Twitter에서 데이터를 NiFi로 수집하고 Apache Solr + Banana에서 시각화하는 데모를 만드는 방법...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.