카산드라는 아마존의 다이나모(Dynamo) 설계에 참여한 Avinash Lakshman과 페이스북의 Prashant Malik 가 최초로 만들었고페이스북에 적용하여 사용하다가 2008년 구글 코드를 통해서 오픈 소스로 배포가 되었고 2009 3월에는 아파치 인큐베이터 프로젝트로 등록이 되었습니다.

 

카산드라는 자바 언어를 통하여 만들어졌으며 Ruby, Perl, Python, Scala, Java, PHP등 다양한 언어들을 지원합니다또한 관계형 데이터베이스에서 사용하는 테이블간의 관계 정의(Foreign Key)가 필요 없으며대용량 데이터 처리가 필요한 페이스북과 같은 소셜네트워크 시스템(SNS)에서 많이 사용되고 있습니다.

 

 

논리 스토리지 구조

아래 그림과 같이 카산드라는 클러스터(Cluster)’ 하위에 키스페이스(Keyspace) 모임으로 구성되어져 있고 키스페이스는 컬럼패밀리(Column Family)’ 모임으로 구성되어져 있습니다또한 컬럼패밀리’ 하위는 컬럼(Column)’ 모임 또는 슈퍼 컬럼(Super Column)’ 모임으로 구성되어져 있고, ‘슈퍼 컬럼은 컬럼’ 모임으로 이루어져 있습니다카산드라의 가장 하부 조직인 컬럼(Column)’은 이름(name)’과 (value)’으로 구성되어져 있습니다.

 

 

카산드라의 논리 스토리지 구조 ]

 

Column

컬럼은 이름’ 과 ’ 으로 이루어진 데이터 구조체를 말합니다.

 

 {title:“Blog”, content:”My Blog”}

 

Super Column

슈퍼 컬럼은 컬럼 구조체 안에 다시 컬럼이 들어가 있는 구조체를 말합니다.

 

 {name:{first:”kim”, last:”Hyudai”}}

 

Column Family

컬럼 패밀리는 컬럼과 슈퍼 컬럼들의 집합이며컬럼 패밀리간의 구분은 (Key)’ 에 의해서 식별을 할 수 있습니다.

 

 PersonalStruct={

   Info1={name:”RHK”, age:”20”}

   Info2={name:”KEY”, age:”25”, email:”abc@aaa.com”}

   Info3={name:”KKE”, age:”30”, address:”Korea seoul”}

}


여기에서 컬럼 패밀리는 ‘PersonalStruct’ 이며각 행(row)에 대한 키들은 ‘Info1’, ‘Info2’, ‘Info3’ 이며각 행들은 여러 개의 컬럼(Column)으로 구성되어 있습니다.그리고 각 행(row)의 데이터 구조는 서로 다를 수가 있습니다.

 

Keyspace

키스페이스는 컬럼패밀리를 묶어주는 개념입니다예를 들면 블로그에 저장되는 게시물이라고 표현할 수 있습니다하나의 블로그 게시물이 컬럼 패밀리가 되며이러한 블로그 게시물들의 모임을 키스페이스라고 말합니다.

 

 

물리 스토리지 구조

노드(Node)’는 하나의 서버에서 구동되는 카산드라 프로세스를 말합니다보통 하나의 서버에서는 하나의 프로세스만 구동되므로 노드는 서버 한대를 지칭합니다저장공간에 대한 물리적 구조는 여러대의 서버가 링의 형태로 연결된 것을 말하지만 논리적으로는 물리적 구조의 여러 서버들을 클러스터라는 확장 공간에서 하나의 저장공간처럼 사용하는 것입니다.

 

노드들은 토큰링(Token ring)을 구성하고 노드의 수에 따라서 구간을 분할합니다데이터를 저장할 때에는 키(Key)값을 해싱하여 해싱된 값을 가지고 어느 노드에 데이터를 저장시킬지를 결정합니다저장되기 전에 노드의 어느 영역에 저장할지가 결정되기 때문에 데이터를 어느 영역에 위치시키는 것은 어렵지 않습니다.

 

 

카산드라 토큰링의 구조 ]

 

카산드라는 자바로 구현되어 있어 JVM에 익숙할 필요가 있습니다. API는 쓰리프트(Thrift) 게이트웨이를 통해서 많은 언어의 클라이언트를 제공합니다쿼리 언어는 별도로 없습니다대신 컬럼 패밀리 문법을 이용해서 API로 어플리케이션에서 프로그래밍할 수 있습니다많은 다른 키-밸류 저장소와 컬럼 패밀리 저장소와 틀리게 카산드라는 일부 제약이 있는 이차 인덱스를 지원합니다이는 행(row)의 키보다는 값에 의해 레코드를 찾을 수 있게 해 줍니다.

 

카산드라 2.0에서는 SQL과 비슷한 CQL의 지원과 트랜잭션 두 부분에 대해서 많은 기능들을 제공하고 있습니다. CQL 기능은 카산드라에서 쿼리 언어(Query Language)를 사용할 수 있도록 합니다카산드라가 이러한 기능들을 지원하는 이유는 많은 분석가와 사용자들에게 관계형 데이터베이스에서 느꼈던 분석에 대한 편리성을 제공하여 더 많은 사람들을 끌어들이기 위한 포석으로 보입니다.

'빅데이터 > No SQL' 카테고리의 다른 글

네오포제이(Neo4j)  (0) 2017.08.04
H베이스(HBase)  (0) 2017.08.04
카우치DB(Couch DB)  (0) 2017.08.04
몽고DB(Mongo DB)  (0) 2017.08.04
멤캐시(Memcach)  (0) 2017.08.04

+ Recent posts