Cassandra
NoSQL DB이고, 분산 DB이지만, SPOF 가 없음.. ㄷㄷ
이 말인 즉슨, 마스터 노드가 없다는 뜻이고, 가용성에 우선순위를 두고 개발함.
- 강사님은 NoSQL with a twist라고 설명함
- 암튼, Join이나, 정규화 작업은 불가능.
- HBase처럼 Transaction 쿼리에 특화됨
CQL
Cassandra Query Language라는게 있긴 함. SQL은 없지만.. sQL이랑 흡사하긴 한데, SQL은 아님.
결국은 데이터를 Primary Key로 나누어서 클러스터에 분산함.
왜 만들었을까?
CAP 이론에 대해서 알아야 함
- Consistency (일관성)
- Availability (가용성)
- Partition Tolerance (파티션 저항성?)
여러 논문에 의하면, 이 셋을 모두 가질 순 없고, 두 가지를 선택해야 함. → 물론 요즘엔 기술의 발전 덕분에 꼭 그렇지만도 않음
- 일관성 - DB에 무언가를 작성했을 때, 무슨 일이 있더라도 나중에는 결국 응답을 받는다는 의미
- 분산 DB가 있고, 그 안에 새로운 값을 작성한다고 했을 때, 완전히 일관성이 있는 DB에선 무슨 일이 있든 결국 결과를 받아야 함
- 이 개념은 Cassandra가 제공하는 “Eventually Consistency”이라는 개념에 해당하며, 이는 어떤 값을 작성했을 때, 값이 1~2초 정도 돌아오지 않아도 괜찮다는 개념이다.
- SNS에서 누군가 페이스북에 새 글을 썼을 때, 그 글을 모든 사람이 즉각적으로 보지 못하면 큰일이 나나? 아니잖아. 이런 경우엔 일관성을 다른 것과 교환할 수 있음.
- 가용성 - DB가 항상 작동하여 신뢰할 수 있고, 많은 예비 데이터를 구축해 놓았음을 의미
- 파티션 저항성(?) - 데이터가 쉽게 나눠지고 클러스터에 분산될 수 있음을 의미
- Oracle DB는 파티션 저항성이 없음.
- 근데, Hadoop 클러스터는 절대로 이 파티션 저항성을 포기할 수 없음. 클러스터에 데이터를 분산해서 저장하려면 꼭 필요한 요소임.
- 그러면 이제 이걸 일관성과 가용성 사이에서 둘 중에 하나를 선택해야 하는데, Cassandra는 ‘가용성'을 우선시하고 있음.
- 그렇지만, ‘Eventually Consistent’하기 때문에, Cassandra에 무엇을 작성하면 그 결과를 즉각적으로는 받지 못할 수 있음. 이 변화를 클러스터 전체에 전파하려면 어느정도의 시간이 소요되니까.
- 대신에 더 높은 가용성을 제공하고 있음.
- 그래서 Cassandra에선 이걸 “Tunable Consistency”라고 표현함.
- 쿼리의 일부로서 일관성의 정도를 지정할 수가 있음! 클러스터 내의 얼마나 많은 노드가 동의해야 그 결과를 인정할 것인지 결정하는 파라미터.
- 이런 방식으로 사용자가 가용성과 일관성 사이에서 타협점을 조절할 수 있음.
여기에 대해서, HBase는 단일 마스터 노드를 가지고 있고, 마스터 노드의 복제본이 있어 어느정도는 가용성이 있다고 볼 수 있지만, 결국 HBase 마스터나 Zookeeper가 죽으면 끝난다. → 논문에서도 이 이슈를 지적하고 있으며, 이를 가용성 이슈가 있는 것으로 볼 수 있고, 결국 일관성을 가용성보다 우선시한다고 볼 수 있다.