* big data 처리를 위해 NoSql이 가지는 주요 특징

1. clustering : 데이터가 클러스터 안 여러 노드에 복제된다. 따라서 fault tolerance를 보장한다. 여러 노드에서 access 가능해 성능이 향상한다.

2. flexible schema : 데이터 변화에 맞춰 유연하게 스키마 변경이 가능하다.

3. Relax consistency : eventual consistency 정책을 받아들여 빠른 쓰기가 가능하다.

4. Denormalization of data : 데이터 중복을 통해 쿼리를 최적화한다.



* 카산드라란? 왜 카산드라?

: Cassandra is a fully distributed, masterless database, offering superior scalability, and fault tolerance.

1. horizontal scalability : 카산드라는 클러스터 안 노드들이 서로를 알고 있다. 외부 app 입장에서 클러스터는 하나의 entity로 보여 데이터가 어느 노드에 있는 지 신경쓰지 않아도 된다. 노드에 요청이 오면 노드는 실제 데이터가 있는 노드에 요청을 forward한다. 클러스터에 노드 추가는 쉽다. 추가할 때 데이터는 균등하게  rebalancing된다. 그래서 카산드라 클러스터의 읽기/쓰기 처리량은 노드가 증가할 때마다 linear하게 향상된다.

2. high availability : 데이터를 쓰고 지우는 데 single point of failure가 없다. masterless해 어떤 노드든지 쓰기/읽기 operation을 받을 수 있다. 데이터는 여러 노드에 복제되 노드가 failure 되어도 정상 동작한다. 

3. write optimization : RDB는 읽기에 최적화되어 있다. 따라서 데이터를 쓸 때 읽기에 효과적인 데이터 구조로 유지시키는 과정을 거쳐 쓰기 성능이 비싸다. 반면 카산드라는 데이터를 쓸 때, 데이터 변경을 하지 않고 데이터를 파일에 추가하기 때문에 쓰기 성능에 최적화 되어 있다. 그래서 데이터를 중복해서 쓸 수 있다. 그렇다고 카산드라의 읽기 성능이 나쁜 것은 아니다. 데이터 모델링을 효과적으로 하면 읽기 성능을 충분히 개선시킬 수 있다. 

4. Structured records : RDB와 같이 table, row, columns을 가지는 structured record를 가진다. 

5. Secondary indexes : RDB는 index를 통해 빠른 select가 가능하다. 카산드라도 이와 비슷한 secondary indexes가 있다. 카산드라의 secondary indexes는 RDB index만큼의 높은 수준의 index는 아니다. 적절한 상황에서 사용해야 좋은 성능을 기대할 수 있는 단점이 있다.

6. Materialized views : secondary indexes는 인덱스로 지정한 칼럼에 중복된 데이터가 많을 시 성능이 급격히 저하되는 문제가 있다. 이를 보완해 주는게 Materialized views이다. Materialized views는 특정 쿼리문의 결과를 유지하고 있는 가상 테이블로 빠른 lookup을 가능하게 한다. 대신, view를 가진 table의 쓰기는 데이터를 update하기 때문에 약간의 지연이 발생한다.

7. Efficient result ordering : 카산드라는 지정된 cluster colums을 기준으로 정렬한 채로 데이터를 저장한다. 따라서 쉽게 정렬된 결과를 얻을 수 있다.

8. tunable consistency : 카산드라는 consistency의 정도를 조절할 수 있다. 

9. writable collections : 필드의 타입으로 collection을 사용할 수 있다. collection을 사용할 수 없다면 collection을 직렬화해서 text형식으로 저장할 것이다. 이를 업데이트할 때는 클라이언트가 데이터를 읽은 후 업데이트 연산 app단에서 진행하고 다시 직렬화 후 write 해야 한다. 이는 번거롭다. 카산드라는 카산드라 자체에서 리스트 append와 같은 collection 연산을 지원해준다.

10. Rich and flexible data model : Cassandra Query Language(CQL)은 일반 rdb sql문과 유사해 친숙하게 사용할 수 있다. 스키마는 유연해 쉽게 칼럼을 추가할 수 있고 collection type을 지원한다. 하지만 join은 지원하지 않는다.

 

+ Recent posts