2017-01-25 1 views
1

나는 최근에 this 기사를 통해 No-SQL 및 Cassandra를 배우기 시작했습니다. 저자는이 그림을 통해 데이터 모델을 설명합니다 enter image description here카산드라 데이터 모델 이해

저자는 또한 아래에 열 가족의 예를 제공합니다

Book { 

key: 9352130677{ name: “Hadoop The Definitive Guide”, author:” Tom White”, publisher:”Oreilly”, priceInr;650, category: “hadoop”, edition:4}, 

key: 8177228137{ name”” Hadoop in Action”, author: “Chuck Lam”, publisher:”manning”, priceInr;590, category: “hadoop”}, 

key: 8177228137{ name:” Cassandra: The Definitive Guide”, author: “Eben Hewitt”, publisher:” Oreilly”, priceInr:600, category: “cassandra”}, 

} 

하지만 튜토리얼 내가 겪었 다른 모든 튜토리얼

다음 생성 끝을 카산드라의 정기 테이블. 나는 카산 다르 모델을 내가 만들고있는 모델과 연결할 수 없다. 예를 들어

, 나는 아래로 직원이라는 열 가족을 만들어 : 나는 일부 데이터를 삽입 이제

create columnfamily Employee(empid int primary key,empName text,age int); 

내 열 가족이 같이 보입니다 : 나이 들어 enter image description here

는 일반처럼 보인다 관계형 테이블이 아니며 작성자가 설명한 데이터 모델과 다릅니다. 각 행이 다른 속성을 가진 직원을 나타내는 Employee 열 패밀리는 어떻게 작성합니까? 뭔가 같은 :

Employee{ 
101:{name:Emp1,age:20} 
102:{name:Emp2,salary:1000} 
102:{manager_name:Emp3,age:45} 
} 

}

+2

참조한 사이트가 * 매우 * 오래된 것 같습니다. 그들은 다른 페이지 중 하나에서 언급했습니다. "Cassandra 1.2를 사용하는 기본 방법은 cqlsh입니다." 게다가 그들은 "수퍼 컬럼"에 대해서 이야기하고 있습니다. 진지하게, 새로운 문서를 찾아라. DataStax Academy는 갈 방법입니다 : https://academy.datastax.com/courses/ – Aaron

답변

3
  1. 도움이 될 것입니다

    희망, 일반 관계형 테이블처럼 보일 수 있지만 카산드라의 행의 내부 구조는 완전히 다르다. 그것은 각 직원마다 서로 다른 속성 집합을 저장하고 있으며 cql로 쿼리하는 동안 볼 수있는 null은 빈/존재하지 않는 셀을 나타내는 것일뿐입니다.

  2. 달성하려는 것은 비정형 데이터 모델입니다. Cassandra는이 모델로 시작했으며 읽은 튜토리얼에 설명 된대로 작동하지만 구조화되지 않은 데이터 디자인은 개발에 좋지 않으며 문제 해결보다 문제가 많습니다. 그래서, 언젠가, Cassandra는 "구조화 된"데이터 구조 (그리고 thrift에서 cql로)로 옮겼습니다. 모든 키/행에 대한 모든 속성을 저장해야한다는 의미는 아니며, 모든 행의 속성 수가 동일하다는 것을 의미하지는 않습니다. 속성을 사용하기 전에 속성을 선언해야한다는 의미입니다.

  3. Map, List, Set 등의 데이터 형식, UDT (사용자 정의 형식)를 사용하거나 데이터를 json 문자열로 저장하고 응용 프로그램 측면에서 구문 분석하여 일종의 비 체계적인 데이터 모델링을 수행 할 수 있습니다.

-2

카산드라는 compositie 키라는 특별한 기본 키를 사용합니다. 이것은 파티션의 표현입니다. 이것은 카산드라가 잘 저울러지는 또 하나의 이유이기도합니다. 복합 키는 행이 저장되는 노드를 판별하는 데 사용됩니다.

콘솔의 결과는 행의 결과 집합이 될 수 있지만, cassandra의 인턴 조직은 그 것과 다릅니다. 기본 키가없는 테이블을 쿼리 해 본 적이 있습니까? 파티셔닝 때문에 융통성있는 것을 쿼리 할 수 ​​없다는 것을 빨리 알 수 있습니다.

그런 다음 왜 cassandra에 대한 쿼리 우선 디자인을 사용해야하는지 이해하게 될 것입니다. 이것은 RDBBS와 완전히 다릅니다.

1

이해하신 내용이 맞습니다. 그냥 믿어. 내부적으로 cassandra는 귀하의 질문에있는 이미지와 정확히 같은 열을 저장합니다. 이제 Employee 테이블을 만드는 동안 정의되지 않은 열을 삽입하면됩니다. 동적 열의 경우 항상지도 데이터 유형을 사용할 수 있습니다. 예를

create table Employee(
empid int primary key, 
empName text, 
age int, 
attributes Map<text,text>); 

를 들어

는 쿼리 아래에 사용할 수있는 새로운 속성을 추가합니다.

insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','age','25') ; 
insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','manager','emp2') ; 
insert into Employee (empid,empName,attribute,attributevalue) values (102,'Emp1','department','hr') ; 

이 데이터 구조는 생성됩니다 -

UPDATE Employee SET attributes = { manager_name : Emp3, age:45 } WHERE empid = 102; 

은 업데이트 -

 create table Employee(
    empid int primary key, 
    empName text, 
    attribute text, 
    attributevalue text, 
    primary key (empid,empName,attribute) 
    ); 

몇 삽입을 수 있습니다 아래와 같이

동적 열 모델을 만들 수있는 또 다른 방법입니다 동적 행처럼 동작합니다. 기본 키 empid를 볼 수 있으며 이름은 세 행 모두에 공통적이며 속성 및 값만 변경됩니다.이 당신은 표현을 사용 CQL에서 것을 이해할 필요가