관계형DB
- 집합 이론을 기반으로 하는 시스템인 관계형 데이터베이스 관리 시스템 (RDBMS)
- row를 기준으로 데이터를 추가하고 처리됨
- row-oriented 데이터베이스
- 역사가 가장 오래됨
- 방대한 툴킷(트리거, 저장프로시저, 진보된 인덱스)
- ACID(Atomic: 원자성, Consistent: 일관성, Isolated:독립성, Durable:지속성)준수에 따른 데이터 안정성
- 데이터의 무결성을 완벽하게 보장 → 데이터가 유실되거나 중복되면 안되는 금융쪽에선 무조건사용
- 뛰어난 쿼리처리 능력. 다른 데이터 스토어와 다르게 저장된 데이터를 사용하기 위한 계획을 알 필요가 없다. 우리가 필요한 것이 무엇인지만 알려주면 된다.
- 강력한 인덱스 기능, 트렌젝션 기능을 통해 데이터의 분류, 정렬, 탐색속도가 빠르다
- 관계 스키마가 잘 정규화되어있다면, 쿼리의 유연성이 좋아진다.
- 데이터를 명확하게 처리할수있고, 이해하기 쉽다. → 많은 기업들에서 사용.. 거의 모든 IT 기업
- ex) mysql, oracle, PostgreSQL
- 컬럼을 미리 정의하고, 각 컬럼에 대응한 값들을 열로 나열하여 저장
- 스키마를 통해 컬럼들을 지정 (create table)
- 값들을 row단위로 insert함 (insert)
PostgreSQL
- 가장 오래되고 실무에 제일 많이 사용된 데이터베이스이다.
- 자연어 분석 플러그인, 다차원 인덱싱, 지리적 쿼리, 커스텀 데이터 타입 및 그외의 더 많은 특성과 기능들을 가지고 있다.
- 정교한 트랜잭션 처리
- 여러 언어를 위한 저장 프로시저 기능
- 다양한 플랫폼에서 실행
- 유니코드 지원
- 시퀀스와 테이블 상속 및 서브 쿼리 기능
- ANSI SQL(American National Standards Institute)을 가장 잘 준수
문제점
- 대부분의 관계형 DB는 부하를 분석하기 어렵다
- 선형적인 확장이 불가능함
→ 빅데이터를 처리하기에 비효율적
컬럼형DB
- amazon redshift, cassandra
- 관계형 DB의 한계인 대용량 데이터 처리와 확장성을 고려한DB
- 컬럼형으로 데이터를 저장한다는 특징
- 선형확장 가능
- 빅데이터 처리에 유리함
→ 대용량 처리가 필요한 경우 많은 기업들이 활용 중이다
아파치 카산드라
- 컬럼 패밀리 데이터베이스
- 컬럼 패밀리라고 불리는 특정 몇개의 컬럼들을 기준으로, 파티션 키를 지정
- 해당 파티션 키 아래에 데이터들이 저장
- Cassandra query lanaguage에서 컬럼패밀리를 사용하여 테이블을 생성하고 insert 할수있다.
- 테이블의 생성은 일반적인 관계형 DB와 비슷하다. 중요한 점은 파티션 키를 설정해야한다는 점
- 파티션 키로 설정된 컬럼은 카산드러의 클러스터 노드 중 특정 노드에 저장되도록 설정된다
- 클라이언트가 데이터를 불러올때는 반드시 파티션키를 사용해야한다.
→ 파티션 키를 통해 어느 노드에 데이터가 들어있는지 확인할 수 있기 때문이다. 파티션키를 통해 key value와 유사한 느낌으로 node를 찾기 수월해진다.
장점
- 파티션 key를 통해 insert와 select를 수행함
- 데이터를 분산저장
- 데이터 양에 따라 노드를 수백개로 늘려서 선형으로 scale out이 가능하게 된다.
단점
- 이미 생성된 파티션키를 수정할 수 없다
- 테이블 설계가 잘못되어 수정할땐 테이블을 삭제하고 다시 만들 수 밖에 없다.
- 파티션 키가 아닌 데이터를 where 절로 필터링이 어렵다
- secondry index를 사용하면, 파티션 키가 아닌 데이터에 대해 제한적인 필터링을 제공하지만...
- 전체 데이터를 스켄하기에 성능이슈가 있어, 서비스에 활용하긴 어렵다...