IT Log
Cassandra 본문
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