반응형
Cassandra와 더불어 HBase에 대해 궁금하다면 이전에 작성한 포스트를 참고하시기 바랍니다!
학습목표
1. Cassandra DB가 무엇인지, 그 특징과 적용 분야를 설명할 수 있습니다.
2. Cassandra의 기본 구조 및 Read/Write 수행 메커니즘을 알게 됩니다.
NoSQL이란? (3-1) : 카산드라(Cassandra) 개념 및 장단점
1. Cassandra 기초
- 특징
- Cassandra는 HBase와 비슷하게 Java 등의 언어로 작성하며 Column 형태로 저장한다는 방식도 같습니다. 다만 Consistency & Partial Tolerance를 허용하는 HBase와 다르게 Availability, 즉 가용성을 위주로 확장성을 유지한 채 데이터를 핸들링한다는 점이 차이점입니다.
- 그리스 신화의 예언녀 ‘카산드라(Cassandra)’에서 이름을 빌려왔는데, 신화 속의 카산드라가 트로이인들에게 정확한 미래를 예측하고 제공했듯이 빅데이터 시대의 카산드라 데이터베이스도 빅데이터의 불확실한 환경에서 정확성과 미래 예측을 제공하는 주요 구성원으로서의 바람을 담아 명명됐을 것으로 보입니다.
[한국데이터산업진흥원] - 무수히 많은 서버들이 주고받는 데이터를 저장/관리하고자 시작한 Cassandra 프로젝트는, peer-to-peer symmetric 노드를 기본 설계 개념으로 하고 시스템 실패 시 싱글 포인트 에러를 미연에 방지하는 핵심 기능을 제공하는 등 빅데이터 시대의 핵심적인 분산 환경 데이터베이스를 제공합니다.
- Google의 Big Table과 Amazon의 Dynamo를 섞어서 만든 key-value 및 Column 형태의 종합적인 플랫폼이라고 할 수 있습니다. 다만 장점과 약점이 모두 있기 때문에 DB를 선택할 때 어떤 작업을 할 것인지, 데이터 모델링을 어떻게 할 것인지에 따라 정해야 할 것입니다.
- Ring(링) 구조와 Gossip Protocol
- 멀티캐스팅 형태로 어떤 내용을 빠르게 전달할 수 있는 Gossip Protocol과 Peer-to-peer 연결 형태인 Ring 구조를 통해 master - slave 구조 없이도 장애 대응이 가능하다는 것이 장점입니다. - 요약
- 클러스터들에 분산된 데이터
: 클라우드, 데이터 압축
- 분산 환경에서의 리니어한 확장성
: 어디서나 읽고 쓸 수 있는 디자인과 신축성 있는 확장성
- 데이터센터들에 분산 복제된 노드들
: 싱글 포인트 실패 방지
- 튜닝 가능한 데이터 처리 정책
: 보장된 데이터 안정성
- 맵리듀스(MapReduce) 지원
: 캐시/추가적인 하드웨어 불필요
- 자바/파이썬 지원 커스텀 쿼리 언어 CQL
: 융통성 있고 다이내믹한 스키마
- Cassandra는 HBase와 비슷하게 Java 등의 언어로 작성하며 Column 형태로 저장한다는 방식도 같습니다. 다만 Consistency & Partial Tolerance를 허용하는 HBase와 다르게 Availability, 즉 가용성을 위주로 확장성을 유지한 채 데이터를 핸들링한다는 점이 차이점입니다.
2. Cassandra 구조 및 장단점
- 구성요소
- Big Table과 Dynamo의 특장을 합해놓은 Cassandra의 주요 feature는 다음과 같습니다.
Big Table Dynamo 특징 ● 스파스(Sparse) 컬럼 데이터 모델 : 수퍼컬럼 패밀리
● SSTable 디스크 스토리지
- Commit 로그에 적용
- Memtable 버퍼 및 소트
- Immutable SSTable 파일
● 하둡 통합 기능● Symmetric, P2P 아키텍처
● Gossip-based 클러스터 매니지먼트
● 분산 해시 테이블
- Pluggable partitioning
- Pluggable topology discovery
- Pluggable placement strategies
● 튜닝 가능한 eventual consistency
- Big Table과 Dynamo의 특장을 합해놓은 Cassandra의 주요 feature는 다음과 같습니다.
- 장점
- Elastic Scalability
- 노드를 추가하면 성능 처리량이 linear하게 증가하며, 전체 클러스터 재구성 없이도 노드 수를 증가/감소시키는 것이 용이합니다. - High Availability
- 클러스터에서 작동하는 여러 네트워크 컴퓨터로서 노드 장애 인식 기능이 있어, 장애 발생 시 시스템의 다른 부분으로 요청을 전달할 수 있습니다. - Distributed / Decentralized
- 여러 컴퓨터에서 실행 가능하며, SPOF 발생 위험이 없습니다. (peer-to-peer 구조로 master-slave 구조의 문제점 제거) - Tunable Consistency
- Availability vs Consistency 사이에서 Tunable하며, READ 및 WRITE 연산을 별도로 조정할 수 있습니다. 특히 WRITE 성능에 중점을 두기 때문에 해당 연산 동안 충돌 이슈는 발생하지 않습니다. - Cassandra가 적합한 경우
- 간단한 설정과 유지보수
- 코드 검색 기능
- 매우 빠른 Read / Write 연산 ex) 트위터(Twitter)
- 보조 index가 필요하지 않는 경우
- 다양한 Column 형태를 요구하는 경우
- Elastic Scalability
- 단점
- 높은 진입 장벽
- Column형 DB이기 때문에 기존의 Row형 RDB와는 달라 진입 장벽이 높습니다. - 복잡한 Query 불가능
- 대량의 데이터에 적합하나, 검색 조건은 단순한 서비스에 국한됩니다. Row key와 Column에 대한 index만 가능하며 Super Column family의 하위 Column에 대한 indexing은 불가능합니다. - 데이터 자동 입력 어려움
- 데이터 Lock을 위해서는 Zookeeper 등 분산 서버 관리 프로그램을 통해 설정할 수 있습니다. 동시에 DB를 건드리는 요청이 발생한 서비스라면 Cassandra 외의 DB를 고려해야 합니다. - Cassandra가 적합하지 않은 경우
- secondary index
- 관계형 데이터
- Transaction
- Financial Records
- 높은 수준의 보안과 권한이 필요한 데이터
- Dynamic Query
- Low Latency
- 높은 진입 장벽
- 구조
- 키 스페이스(Key Space) 아래 테이블(Table)이 놓여져 있고, 테이블은 행(Row)들이 존재합니다. 각 행에는 키-값(Key-value) 형태로 이루어진 열(Column)로 구성되는데, 관계형 데이터베이스(RDB) 테이블과 구조적으로 유사합니다.
- 링(Ring) 구조를 띠는 카산드라는 링을 구성하는 각 노드(node)에 데이터를 분산 저장합니다. 각 노드가 링을 구성하게 되면 카산드라의 conf/cassandra.yaml 파일에 정의된 설정을 통해 고유한 해시(Hash 또는 token) 값 범위를 부여하게 되고, 외부로부터 데이터 요청 시 Hash 값을 계산하여 어느 노드에서 트랜젝션을 처리할 지 알게 됩니다.
- Cassandra 개발 history
Version | Release | Latest Version | Latest Release | Status |
0.6 | 2010-04-12 | 0.6.13 | 2011-04-18 | 더 이상 지원하지 않음 |
0.7 | 2011-01-10 | 0.7.10 | 2011-10-31 | 더 이상 지원하지 않음 |
0.8 | 2011-06-03 | 0.8.10 | 2012-02-13 | 더 이상 지원하지 않음 |
1.0 | 2011-10-18 | 1.0.12 | 2012-10-04 | 더 이상 지원하지 않음 |
1.1 | 2012-04-24 | 1.1.12 | 2013-05-27 | 더 이상 지원하지 않음 |
1.2 | 2013-01-02 | 1.2.19 | 2014-09-18 | 더 이상 지원하지 않음 |
2.0 | 2013-09-03 | 2.0.17 | 2015-09-21 | 더 이상 지원하지 않음 |
2.1 | 2014-09-16 | 2.1.22 | 2020-08-31 | 더 이상 지원하지 않음 |
2.2 | 2015-07-20 | 2.2.19 | 2020-11-04 | 현재 지원함, critical fixes only |
3.0 | 2015-11-09 | 3.0.24 | 2021-02-28 | 현재 지원함 |
3.11 | 2017-06-23 | 3.11.10 | 2021-02-28 | 현재 지원함 |
4.0 | 2021-07-26 | 4.0.1 | 2021-09-07 | 최신판 |
참고자료
- https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=38&dbnum=176031&mode=detail&type=techreport
- https://en.wikipedia.org/wiki/Apache_Cassandra
- https://goyunji.tistory.com/95
- https://bcho.tistory.com/440
반응형
'SQL > NoSQL' 카테고리의 다른 글
[데이터베이스/DB] NoSQL이란? (4-1) : mongoDB의 개념 및 구조, NoSQL간 차이점 (0) | 2021.10.27 |
---|---|
[데이터베이스/DB] NoSQL이란? (3-2) : 카산드라(Cassandra) DB의 구조 및 CQL 사용법 (1) | 2021.09.25 |
[데이터베이스 DB] NoSQL이란? (2-3) : HBase 사용법 (feat. Hive & Impala) (0) | 2021.09.03 |
[데이터베이스 DB] NoSQL이란? (2-2) : HBase 사용법(Shell, command) (0) | 2021.09.02 |
[데이터베이스 DB] NoSQL이란? (2-1) : HBase의 개념/특징/아키텍처 (0) | 2021.09.01 |
댓글