[cassandra] 카산드라 살펴보기 👁️
와 포스팅 진짜 오랜만이다... 반성해라
1일 1포스팅 하겠다던 다짐 다 사라졌냐고..
카산드라(Cassandra)
분산형, 고성능, 확장 가능한 NoSQL 데이터 베이스 . 대량의 데이터를 처리하고 빠른 읽기 및 쓰기 성능 제공
카산드라 특징
① 분산 아키텍처
여러 대의 서버에 데이터를 분산하여 저장하고 처리, 고 가용성과 확장성 제공, 서버 간 데이터를 자동으로 복제하여 장애 복구 및 데이터 손실 방지 기능을 갖춤
② 고성능
높은 처리량, 낮은 지연시간을 제공하기 위해 설계. 데이터는 여러 노드에 분산되어 저장, 데이터 병렬 처리 가능 , 분산된 데이터를 읽고 쓰는 기능을 통해 뛰어난 성능 발휘
③ 행-열 구조 데이터 모델
테이블은 행과 열로 구성되며 테이블 간의 관계가 없음. 유연한 스키마를 지원하므로 데이터 모델을 동적으로 변경 가능
④ 분산 데이터 저장
데이터를 여러 노드에 분산하여 저장. 데이터는 파티션 키에 따라 여러 노드에 분할, 각 노드는 여러개의 컬럼으로 저장됨. 데이터 규모를 수평으로 확장할 수 있는 장점 제공
⑤ 고가용성
여러 노드에 데이터를 자동으로 복제하여 고가용성 보장. 복제 노드는 원본 데이터와 동기화되며 한 노드가 장애가 발생하더라도 다른 복제 노드에서 데이터를 제공하여 연속적인 서비스 유지
- ex ) student 테이블 생성
CREATE TABLE key.student
(name TEXT,
hakbun INT,
major TEXT,
age int,
reg_date TEXT,
PRIMARY KEY ((name, hakbun), reg_date );
해당 문법에서 partition key 는 primary key의 제일 첫번째 (name, hakbun) 가 해당되며 reg_date 컬럼은 pk가 됨
- ex) python(django) 에서 cassandra 세션 연결 및 종료 메소드 생성
from cassandra.cluster import Cluster
#세션 연결
def connect_to_cass():
cluster = Cluster(['localhost']) #setting.py에 연동하거나 다른 방법으로 db 정보 가져옴
session = cluster.connect()
session.set_keyspace('key')
return session
#세션 종료
def close_cass_connection(session):
session.cluster.shutdown()
- ex) python(django) 에서 cassandra 데이터 insert
#데이터 삽입
def insert_data_to_cassandra(students):
session = connect_to_cass() #세션 연결
# set query
query = """INSERT INTO student
(name, hakbun, major, age, reg_date)
VALUES (?, ?, ?, ?, ?)"""
prepared_query = session.prepare(query)
#students 데이터는 list안의 여러개의 dict 형태로 전달받은 데이터라고 가정
#[{'name' : 'dotorizz' , 'hakbun' : '20140000' , 'major' : 'statistics',
# 'age' : '29', 'reg_date' : '2014-03-02'}, {.....}, .... , {.....}]
# student 정보 삽입
for student in students:
#동기 방식
session.execute(prepared_query,
(student['name'], student['hakbun'], student['major'],
student['age'], student['reg_date']))
#비동기 방식
#session.execute_async(prepared_query,
#(student['name'], student['hakbun'], student['major'],
#student['age'], student['reg_date']))
close_cass_connection(session) # 연결 종료
- ex) python(django)에서 cassandra 데이터 select
@api_view(['POST'])
def select_data_to_cassandra(request):
name = request.data.get('name')
hakbun = request.data.get('hakbun')
session = connect_to_cass() # 세션 연결
query = f"SELECT * FROM key.student WHERE name = '{name}' AND hakbun = '{hakbun}'"
result = session.execute(query)
close_cass_connection(session) # 연결 종료
# 결과 처리
student_data = []
for row in result:
student_info = {
'name': row.name,
'hakbun': row.hakbun,
'major': row.major,
'age': row.age,
'reg_date': row.reg_date,
}
data.append(student_info)
return Response(student_data)
# return Response(list(result)) 형태로 간결하게 작성도 가능
아파치 카산드라 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 헬레노스(Helenos)는 카산드라를 위한 그래픽 사용자 인터페이스이다. 아파치 카산드라(Apache Cassandra)는 자유-오픈 소스 분산형 NoSQL 데이터베이스 관리 시스템의
ko.wikipedia.org
기타 유튜브 보면서 카산드라 자료 좀 더 공부해야겠다