[DB] Apache Cassandra(카산드라)

mongoDB와 비교

Posted by Wonyong Jang on December 14, 2024 · 4 mins read

1. 카산드라(Cassandra) 개요

아파치 카산드라(Apache Cassandra)는 비정형 데이터를 여러 노드에 분산 저장하여 대량의 트래픽을 신속히 처리하는 분산 저장형 데이터베이스이다.
클러스터 중단 없이 노드 수를 손쉽게 증가할 수 있어 확장성과 고가용성이 필요한 대용량 데이터 관리에 최적화되어 있다.

1-1) 카산드라 특징

카산드라는 SQL과 비슷한 Cassandra Query Language(CQL)을 이용한다.

1-2) 카산드라 장점

고성능 분산처리

카산드라는 여러 노드에 클러스터를 분산하여 저장할 수 있다.
링 구조로 된 노드들은 마스터 노드가 따로 존재하지 않고 모든 노드가 각자 들어온 요청을 처리하는 구조이므로 대용량 데이터를 신속하게 병렬 처리 가능하다.

빠른 쓰기 성능

로그 구조화된 병합 트리(Log-Structured Merge Tree) 구조로 인해 쓰기 성능이 뛰어 나다.

탄력적인 확장성

하드웨어 용량을 늘리는 수직 확장 대신 노드를 추가하여 요청을 분산해서 처리하는 수평 확장으로 간편하게 클러스터 처리 용량을 확대할 수 있다.
노드는 클러스터 재구성 없이 손쉽게 증가, 감소 시킬수 있으며 트랜잭션 처리 성능은 노드를 추가한 만큼 선형적으로 증가한다.

1-3) 카산드라 단점

높은 진입장벽

컬럼형 데이터베이스로 로우형 데이터베이스인 관계형 데이터베이스와는 다른 생소한 개념이라 진입장벽이 높다.

복잡한 조건의 검색 불가

복잡한 조건의 검색이 불가능하며, 대량이지만 검색 조건은 단순한 서비스에 적합하다.

조인, 서브쿼리 등 복잡한 쿼리를 지원하지 않는다.

강력한 일관성의 어려움

완벽한 강한 일관성을 보장하기 어렵다.

1-4) 카산드라 데이터 구조

카산드라의 데이터 구조는 비교적 간단하다.
최상위에 논리적 데이터(Data) 저장소인 키 스페이스(keyspace)가 있고, 키 스페이스 아래에는 테이블이 존재한다.

테이블은 다수의 row 들로 구성되어 있으며 각 row는 키 값(key value)으로 이루어진 컬럼들로 구성된다.

스크린샷 2024-12-14 오후 5 29 15

카산드라는 기본적으로 링(Ring) 구조를 가지며, 링을 구성하는 각 노드에 데이터를 분산하여 저장한다.
파티션 키라고 불리는 데이터의 해시(hash)값을 기준으로 데이터를 분산하게 된다.

스크린샷 2024-12-14 오후 5 32 03


2. Cassandra VS MongoDB

MongoDB는 NoSQL 도큐먼트 데이터베이스이며, 클러스터는 두 종류의 데이터 보유 멤버로 이루어져 있다.
primary는 마스터 노드이며 모든 쓰기 작업을 수신한다.
secondary는 primary에게서 복제된 데이터를 수신하여 동일한 데이터셋을 유지한다.

이러한 그룹을 레플리카셋이라고 부른다.

기본적으로 primary 멤버가 모든 읽기와 쓰기를 처리하지만 선택적으로 일부 또는 모든 읽기 작업을 secondary 멤버에게 보낼 수 있다.
쓰기 작업은 반드시 primary에게 보내야 한다.

primary 가 중단되면 secondary 중에서 새로운 primary를 선택하기 전까지 모든 쓰기 작업이 멈추게 된다.

반면 Cassandra 클러스터는 마스터 노드가 따로 존재하지 않고 모든 노드가 모든 데이터베이스 작업들을 하며 각자 클라이언트 요청을 처리할 수 있다.

데이터는 파티션 키의 일관적인 해시를 기준으로 노드들에 파티션 된다.
데이터에는 얼마나 많은 복사본을 만들지 정하는 복제 변수가 있으며 복사본들은 자동적으로 다른 노드에 저장된다.

클라이언트에게서 요청을 받는 첫번째 노드를 coordindator라고 한다.
데이터를 가지고 있는 노드에 이 요청을 전달하는 것이 coordinator의 임무이며, 그 결과를 받는 것도 coordinator이다.
클러스터의 어느 노드던지 coordinator가 될 수 있다.


Referrence

https://blog.nullbus.net/91
https://meetup.nhncloud.com/posts/58