IT Log

Cassandra 본문

기타

Cassandra

newly0513 2019. 5. 7. 09:51
728x90
반응형

Cassandra란?

자유-오픈 소스 분산형 NoSQL 데이터베이스 관리 시스템의 하나로, 단일 장애점 없이 고성능을 제공하면서 수많은 서버 간의 대용량의 데이터를 관리하기 위해 설계되었다

 

구조

  • 단일 장애 지점없이 여러 노드에서 대규모 데이터 작업 부하를 처리
  • 노드를 통해 피어 투 피어 분산 시스템을 사용하고 데이터는 클러스터의 모든 노드에 분산
  • 클러스터의 모든 노드는 동일한 역할, 각 노드는 독립적이며 다른 노드와 동시에 사호 연결
  • 클러스터의 각 노드는 실제로 데이터가 클러스터에 있는 위치와 상관없이 읽기 및 쓰기 요청을 허용
  • 노드가 다운되면 읽기/쓰기 요청이 네트워크의 다른 노드에서 제공
  • Cassandra에서는 클러스터의 하나 이상의 노드가 주어진 데이터 조각에 대한 복제본 역할
  • 일부 노드가 만료 된 값으로 응답한 것으로 감지되면 Cassandra는 최신 값을 클라이언트에 반환, 가장 최근 값을 반환한 후 Cassandra는 백그라운드에서 읽기 복구를 수행하여 부실 값을 업데이트

 

구성 요소

  • Node : 데이터가 저장되는 저장소
  • Data center : 관련 노드 모음
  • Cluster : 클러스터는 하나 이상의 데이터센터를 포함하는 구성요소
  • Commit log : 카산드라의 충돌 복구 매커니즘
  • Mem-table : 메모리 상주 데이터 구조, Commit log후에 데이터는 mem-table에 기록
  • SSTable : 내용이 임계 값에 도달하면 mem 테이블에서 데이터가 플러시되는 디스크파일
  • Bloom filter : 요소가 집합의 구성원인지 여부를 테스트하기 위한 빠르고 비 결정적인 알고리즘

 

Cassandra 데이터 모델

Relational Model Cassandra Model
Database Keyspae
Table Column family(CF)
Primary Key Row Key
Column name Column name/key
  • Keyspace : 데이터 그룹의 가장 바깥쪽에 위치하는 개념, 모든 Column Family가 하나의 Keyspace 안에 포함, 일반적으로 어플리케이션의 이름과 동일
  • Replication factor : 동일한 데이터의 사본을 수신할 클러스터의 시스템 수
  • Replica placement strategy : 복제본을 링에 배치하는 simplestrategy, Localstrategy, nentwork topology strategy
  • Column Family : 키 공간은 하나 이상의 열 패밀리 목록의 컨테이너
  • Column(Row) : 데이터를 이루는 가장 작은 단위, 컬럼이름과 값으로 이루어진 데이터 구조체, 컬럼의 Value는 컬럼 자체가 들어갈 수도 있다.
  • SuperColumn : 컬럼이름과 값으로 이루어진 데이터 구조체, 컬럼의 이름이 각각의 키, 컬럼의 이름이 각각의 키, 컬럼의 값은 문자열 / 슈퍼컬럼의 값은 컬럼들의 Map
CREATE KEYSPACE Keyspace name
WITH replication = {'class':'SimpleStrategy', 'replication_factor':3};
  • keys_cached : SSTable당 캐시할 위치의 수
  • rows_cached : 전체 내용이 메모리에 캐시될 행의 수
  • preload_row_cache : 행 캐시를 미리 채울지 여부를 지정

Data Type

  • Native Type
  • Collection
  • User-Defined Type
  • Tuple
  • Custom Type

Cassandra Query Language (CQL)

Data Definition

명령어 설명
CREATE KEYSPACE KEYSPACE를 생성
USE 생성된 KEYSPACE에 접속
ALTER KEYSPAE KEYSPACE의 옵션을 수정
DROP KEYSPACE KEYSPACE를 삭제
CREATE TABLE 새 테이블 생성
ALTER TABLE 기존 테이블을 변경
DROP TABLE 테이블을 삭제
TRUNCATE 테이블에서 기존의 모든 데이터가 제거 (테이블 자체 제거X)

 

Data Manipulation

명령어 설명
SELECT 테이블에 하나 이상의 행에 대해 하나 이상의 열을 읽는다.
INSERT 테이블의 주어진 행에 대해 하나 이상의 열을 추가한다.
UPDATE 테이블의 주어진 행에 대해 하나 이상의 열을 수정한다.
DELETE 행과 열을 삭제한다.
BATCH 여러 수정문(INSERT/UPDATE/DELETE)을 단일문으로 그룹화 한다.

 

Secondary Indexs

명령어 설명
CREATE INDEX 테이블에 보조 인덱스를 생성
DROP INDEX 보조 인덱스를 삭제

Shell Commands

명령어 설명
help 도움말
CAPTURE '/경로/파일' 명령 출력을 CPATURE해서 파일에 저장
CONSISTENCY 현재 일관성 레벨을 표시하거나 새 일관성 레벨을 설정
COPY 테이블 TO '파일' 데이터를 파일로 복사
DESCRIBE TYPES 모든 사용자 정의 데이터 유형을 나열
expend on 출력을 확장
show host 현재 cqlsh 세션의 세부 사항을 표시
source '/경로/파일'  파일에서 명령을 실행

Sharding

  • Cassandra는 마스터 없이 동작, 데이터 분산이나 복구를 관장하는 별도의 서버가 없다.
  • Row key를 token으로 변환해주는 모듈을 Partitioner라고 한다.
  • Random Partitioner, Murmur3 Partitioner, ByteOrdered Partitioner라는 3가지 유형 제공
    • Random Partitioner는 Row key를 MD5로 hashing하여 token을 생성
    • Murmur3 Partitioner는 Murmur3로 Hashing하여 token을 생성
    • ByteOrdered Partitioner는 Row key를 16진수 형태로 변환하여 이 값을 token으로 사용
  • Default Partitioner는 Murmur3 Partitioner이다.
  • 모든 데이터를 비교적 균일하게 모든 노드에 분산

Replication

  • 처음 Keyspace 생성할 때 Replication의 배치 전략과 그 전략에 맞는 Replication 복제 개수, 위치를 결정할 수 있다.
  • ㅣ러한 기능을 지원하기 위해서 conf/cassandra.yaml의 endpoin_snitch항목에 snitch의 종류를 세팅
  • no single point of failure를  위해서는 replication factor는 3개가 되어야 한다.
  • Replication Strategy
    • SimpleStrategy : 하나의 Data Center를 이용할 때, Ring구조에서 시계방향으로 노드가 선택
    • NetworkTopologyStrategy : 두개 이상의 Data Center를 이용할 때

 

 

728x90
반응형

'기타' 카테고리의 다른 글

Tensorflow (2)  (0) 2019.05.08
TensorFlow  (0) 2019.05.07
Redis  (0) 2019.05.07
MongoDB  (0) 2019.05.07
NoSQL  (0) 2019.05.07
Comments