Cassandra 설치 및 쿼리

# 구글의 Bigtable과 아마존 Dynamo 의 특징을 합쳐서 만듦
# 장비추가의 과정이 단순(새로운 장비를 추가하고 설정을 바꾼 후 cassandra 재시작)
# 어떤 노드에 장애가 발생하더라도 전체 시스템이 멈추지 않음
# Availability(유효성)과 Consistency(일관성) 사이의 균형을 사용자가 선택해 사용(Read replica count, write replica count를 설정하여)
# Column 을 모아 저장하는 Column oriented DB 라사 연관된 데이터를 읽기에 적합
# SSTable(Sorted String Table)에 데이터를 추가후 SSTable 통째로 저장하기 때문에 데이터를 넣을 위치를 찾을 필요가 없어 Write 가 빠름
# 사용방법 : CLI(Command Line Interface) 쉘을 이용하거나 카산드라 쓰리프트(interface/thrift)를 이용한 프로그램 개발
# 데이터모델
# 클러스터(Cluster) : 여러대의 서버로 구성된 카산드라 클러스터 자체
# 키스페이스(KeySpace) : RDB 의 스키마에 해당하는 개념으로 하나의 카산드라 클러스터는 여러개의 키 스페이스를 가질 수 있음
# 칼럼패밀리(ColumnFamily) : RDB 의 테이블에 대응하는 개념으로 키 스페이스는 여러개의 칼럼 패밀리를 가질 수 있음
# 칼럼(Column) : 카산드라에서 저장되는 데이터의 최소 단위이며, 이름, 값, 타임스탬프를 가짐(이름이 키역할을 함)
# 슈퍼칼럼(SuperColumn) : 여러 개의 칼럼을 묶어 관리하는 단위이며, 칼럼 패밀리 정의 시 ColumnType=Super 로 명시해야함

# 다운로드
wget http://mirror.apache-kr.org/cassandra/1.2.5/apache-cassandra-1.2.5-bin.tar.gz
tar zxvf apache-cassandra-1.2.5-bin.tar.gz
cd apache-cassandra-1.2.5

# 설정 수정
vi conf/cassandra.yaml
data_file_directories:
    - /home/ysoftman/apache-cassandra-1.2.5/ysoftman_db/data
commitlog_directory: /home/ysoftman/apache-cassandra-1.2.5/ysoftman_db/commitlog
saved_caches_directory: /home/ysoftman/apache-cassandra-1.2.5/ysoftman_db/saved_caches

vi conf/log4j-server.properties
log4j.appender.R.File=/home/ysoftman/apache-cassandra-1.2.5/ysoftman_db/log/system.log

# Cassandra 구성 하기
# JDK 설치(http://www.oracle.com/technetwork/java/javase/downloads/index.html)

# 다음 처럼 set
set CASSANDRA_HOME=/home/ysoftman/apache-cassandra-1.2.5

# Cassandra node tool
# 디스크 강제 쓰기
bin/nodetool -h localhost flush

# 요청 작업 상태 보기
bin/nodetool -h localhost tpstats

# thrift 상태 보기
bin/nodetool -h localhost statusthrift

# cfg 상태 보기(db 크기등..)
bin/nodetool -h localhost cfstats

#Cassandra 실행
bin/cassandra -f > null &

# Cassandra 쿼리하기
# Cassandra-cli (Command Line Interface) 실행하고 접속하기(포트 30000 사용)
bin/cassandra-cli
connect localhost/30000;

# 또는 한번에 시작하면서 접속하기
bin/cassandra-cli --host localhost --port 30000

# 클러스터 목록 보기
show cluster name;

# 키스페이스 목록 보기
show keyspaces;

# 키스페이스 생성
create keyspace testdb;

# 키스페이스 제거
drop keyspace testdb;

# 키스페이스 선택
use testdb;

# 컬럼패밀리(cf) 생성
create column family col1 with comparator=UTF8Type and subcomparator=UTF8Type and column_type=Super and key_validation_class=UTF8Type and default_validation_class=UTF8Type;

# cf 의 rows_cache 크기 변경
update column family col1 with rows_cached=5000;

# cf 의 keys_cache 크기 변경
update column family col1 with keys_cached=2000;

# cf 의 secondary index 설정
# rowkey 가 첫번째 인덱스
# super column 에 인덱스 지원 안됨
update column family col1 with column_metadata= [{column_name:temp, validation_class:UTF8Type, index_type:KEYS}];

# cf=col1에 rowkey=1234, super컬럼=Map, MapID_100컬럼=1000 저장
set col1[1234][Map][MapID_100]='1000';

# cf=col1에 rowkey=1234, super컬럼=Map, Score_100컬럽=100 저장
set col1[1234][Map][Socre_100]=100;

# cf=col1에 rowkey=1234, 모든 컬럼 조회
get col1[1234];

# cf=col1에 rowkey=1234, 컬럼 10개 까지만 조회
get col1[1234] limit 10;

# cf=col1에 rowkey=1234, Map의 Score_100 컬럼 삭제
del col1[1234][Map][Score_100];

# cf=col1에 rowkey=1234, 데이터의 모든 컬럼 삭제
del col1[1234];

# cf col1 모든 데이터 1000 개까지 조회
list col1 limit 1000

# cf=col1에 rowkey=1234, 컬럼 개수
count col1[1234];

comments:

댓글 쓰기