카산드라
- 자유 오픈 소스 분산형 노에스큐엘(NoSQL) 데이터베이스 관리 시스템(DBMS)
- 단일 장애 점 없이 고성능을 제공하면서 수많은 서버 간의 대용량의 데이터를 관리하기 위해 설계되었음
- Amazon의 Dynamo 분산 스토리지 및 복제 기술과 Google의 Bigtable 데이터 및 스토리지 엔진 모델이 결합된 모델
RDBMS? NOSQL?
- 데이터의 읽기 쓰기 등 퍼포먼스에 치중한다면 NOSQL, 트랜잭션과 같은 정합성 위주의 시스템을 사용한다면 RDBMS가 유리함.
- RDBMS 컬럼 변경이 용이하지 않고, NOSQL은 컬럼 변경이 용이
- NOSQL의 경우 sorting, join, grouping, range query, index 작업에 매우 취약함.
- RDBMS 학습 비용 x / NOSQL 학습 비용 소요 (운영시 어떤 장애상황이 생길지 예측이 어려움)
NOSQL 가장 큰 장점들 : Scale-Out, RDBMS보다 상대적으로 빠른 쓰기/읽기
카산드라의 특징
- 여러개의 데이터 베이스가 복제된다. (마스터기준)
- 짧은 지연 시간
- 프로세스가 추가될 때마다 선형 처리량 증가
- 온라인 부하분산
- 분할된 키 지향 쿼리
- 유연한 스키마
- CQL (Cassandra Query Language) 사용
- Schemaless (Schema-free)
장점
분산화와 집중화
- 카산드라는 분산형이므로 여러 머신에서 동작하지만, 사용자에게는 통합된 하나로 보임.
탄력적인 확장성
-
약간의 성능 저하를 동반하지만, 계속해서 더 많은 요청을 처리할 수 있는 시스템의 아키텍처 특징
-
수평 확장은 데이터 전체나 일부를 갖는 머신을 추가해서 요청처리를 여러 머신이 나눠 갖는 방법. 탄력적인 확장성(elastic scalability)은 수평 확장의 특별한 속성으로, 클러스터의 중단 없이 규모를 확대하거나 축소할 수 있다는 뜻
고가용성과 결함 허용
-
시스템의 가용성은 요청을 수행하는 능력으로 측정. 고가용성 시스템을 구축하려면 일반적으로 다중네트워크로 구성된 컴퓨터, 클러스터에서 운용할 수 있는 소프트웨어, 노드 장애를 인식하고 시스템의 다른 파티션으로 요청을 대체 할 수 있는 기능
-
클러스터에서 시스템을 중단하지 않고 장애가 발생한 노드를 교체 할 수 있고, 다중 데이터 센터에 데이터를 복제해 로컬 성능을 개선할 수 있음. 또한 한 데이터 센터가 화재나 홍수 같은 치명적인 재앙을 당하더라도 다중 데이터 센터에 데이터를 복제해서 서비스 중단을 예방
카산드라 단점
높은 진입장벽
- 칼럼형 데이터베이스로 로우형 데이터베이스인 관계형 데이터베이스와는 다른 생소한 개념
복잡한 조건의 검색 불가
-
많은 사용자를 대상으로 대량 데이터를 다루는 서비스가 아닐 경우 쓸 필요 X
-
로우 키와 칼럼 두가지에 대한 인덱스만 가능. 따라서 데이터는 대량이지만 검색 조건은 단순한 서비스에 적합
-
Join이나 Transaction을 지원하지 않음. Index 등의 검색을 위한 기능도 매우 단출
데이터 입력시 자동화 처리의 어려움
- 데이터에 대한 동시 갱신 요청이 발생할 가능성이 높거나 자동화한 트랜잭션이 필요한 서비스에서는 다른 데이터베이스를 고려하는게 좋음.
카산드라 데이터 구조
- 스키마 선택적 열 지향 데이터 모델
- 카산드라는 데이터를 노드에 저장 (직접 저장되는 것이 아닌, 테이블이라는 논리적 저장소가 필요함)
- 노드의 연결 구조를 클러스터 or 링이라 함.
- 노드는 키스페이스(Keyspace)를 포함하며 논리적 저장소인 테이블은 키스페이스에 포함. 카산드라에서는 테이블 생성 전에 반드시 키스페이스를 생성해야 함.
- 키스페이스 생성 시 데이터를 몇 개의 노드에 복제할지를 결정하는데 이를 Replication Factor (RF)라 함. (ex) RF가 3으로 선언되면 저장된 인접한 두 개의 노드에 데이터를 복제.
출처
http://wiki.hash.kr/index.php/%EC%B9%B4%EC%82%B0%EB%93%9C%EB%9D%BC#cite_note-.EA.B0.80-1
https://goyunji.tistory.com/95
https://brocess.tistory.com/115