본문 바로가기
Ect.

NoSQL, Cassandra 란?

by 쿠리의일상 2023. 6. 17.

자유 오픈 소스 분산형 NoSQL 데이터베이스 관리 시스템 중 하나

단일 장애 없이 고성능을 제공하면서 수많은 서버 간의 대용량의 데이터를 관리하기 위한 설계

Big Table 과 Dynamo 의 특징을 합쳐놓았다.

디스코드에서 데이터베이스 마이그레이션을 했다는 컬럼을 읽고 카산드라가 무얼까 간단하게 정리해봤다.

 

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

  • 여러 개의 데이터베이스가 복제
  • 짧은 지연시간
  • 온라인 부하 분산
  • 분할된 키 지향 쿼리
  • 유연한 스키마
  • 프로세스가 추가될 때마다 선형 처리량 증가

등의 특징이 있다.

 

카산드라의 장점에는

분산화와 집중화

카산드라는 단일 노드로 동작하지만 분산형이므로 여러 머신에서 동작한다. 다만 사용자에게 하나로 보일 뿐이다. 물리적으로 떨어져 있는 데이터 센터 간에도 단일 카산드라 클러스터를 운영할 수 있다. (P2P 프로토콜)

MySQL 같은 데이터 저장소를 확장하려면 일부 노드를 마스터로 설정하여 다른 노드를 조직화해야하는데, 카산드라는 비집중화이므로 모든 노드가 같다. 그래서 조직화 연산을 수행하는 마스터가 따로 없으며, 활성 노드와 비활성 노드의 목록을 동기화하고 유지 관리 한다.

확장성

성능의 저하가 있긴하지만 많은 요청을 처리할 수 있는 시스템 아키텍처

수평 확장(머신을 추가하여 요청처리를 여러 머신이 나눠 갖는 방법 <-> 수직 확장 : 기존 머신에 많은 메모리와 용량을 추가)으로 클러스터의 중단 없이 규모를 확대하거나 축소할 수 있다.

고가용성과 결함 허용

클러스터에서 시스템을 중단하지 않고 장애가 발생한 노드를 교체할 수 있고 다중 데이터 센터에 데이터를 복제하여 로컬 성능을 개선할 수 있다. 그리고 데이터 센터에 무슨 일이 생겨도 데이터를 복제하여 서비스 중단을 예방할 수도 있다.

 

카산드라의 단점

진입장벽이 높음

복잡한 조건 검색 불가

많은 사용자를 대상, 대량 데이터를 다루는 서비스가 아닐 경우 쓸 필요가 없다.

로우키와 칼럼 2가지에 대한 인덱스만 가능하기에 복잡한 조건의 검색이 불가능한 단순한 서비스에 적합하다.

데이터 입력 시 자동화 처리가 어려움

데이터에 대한 락을 사용하려면 주키퍼 같은 전체 분산 서버를 관리하는 프로그램을 추가하여 별도로 설정해줘야 한다.

데이터에 대한 동시 갱신 요청이 발생할 가능성이 높거나 자동화한 트랜잭션이 필요한 경우 다른 DBMS을 고려할 것.

 

카산드라 데이터 구조

  1. keysapce : 논리적 데이터 저장소, 데이터베이스와 유사한 개념
  2. table : 데이터 스키마
  3. partition : 모든 행에 있어야 하는 기본키의 필수 부분 정의
  4. row : 파티션 키 및 추가 클러스터링 키, 구성된 고유한 기본키로 식별되는 열 모음
  5. column : 해당 테이블에서 행에 속하는 열

카산드라 Cluster는 기본적으로 Ring 구조를 띄고 있으며, 링을 구성하는 각 노드에 데이터를 분산하여 저장한다. 분산 기준은 partition key 라고 불리는 데이터의 hash 값을 기준으로 데이터를 분산하게 된다. -> hash 값을 token 이라고 부른다.

 

CQL (Cassandra Query Language)

CQL shell (cqlsh) 를 사용하여 CRUD 수행

주 타입은 Built-in type, Collection(Map, Set, List), User-defined type 이 있음

Built-in type

Data Type 저장 데이터 설명
Boolean True, False T/F 둘 중 하나만 선택 가능
Blob Binary large objects 16진수로 표기
ASCII 65(A), 97(a) 등 US-ASCII 문자열
Bigint -2^32  ~  2^32 정수 (64비트)
Counter 1, 2, 3, ... 증감 카운터 (64비트 정수)
Timestamp 2020-01-03 01:02:00+0000 millisecond +0000(GMT)
Double -2^32  ~  2^32 실수 (64비트)
Int -2^16  ~  2^16 정수
Varchar string UTF8 encoded 문자열

 

Keyspace의 C,U,D

CREATE KEYSPACE [ IF NOT EXISTS ]
	keyspace_name WITH options
    
ALTER KEYSPACE keyspace_name WITH options

DROP KEYSPACE [ IF EXISTS ] keyspace_name

 

Partition Key 는 데이터를 분산하기 위한 unique key 로 테이블을 구성할 때 1개 이상 정해야 한다.

Cluster Key 는 Row 에 속한 Column 을 정렬하기 위한 키

Primary Key 는 테이블에서 Row 를 각자 unique 하게 결정해주는 Column

Composite Key 는 2개 이상의 CQL Column으로 구성된 Primary Key

'Ect.' 카테고리의 다른 글

DLP, DRM 개념  (0) 2023.12.28
SQL - Cursor (커서)  (2) 2023.12.07
Git commit convention  (0) 2023.08.11
크롬 개발자 도구 살펴보기  (0) 2023.07.26