티스토리 뷰
본 글은 해석한 내용이며 원문 링크는 하단에 있습니다.
Cassandra vs. MongoDB
Cassandra나 MongoDB를 다음 프로젝트의 데이터베이스로 생각하고 있으신가요? 두 데이터베이스를 비교하고 싶으신가요? Cassandra 와 MongoDB 모두 NoSQL 데이터베이스이지만 사실 둘은 매우 다릅니다. 그들은 매우 다른 능력과 방향성을 갖고 있으므로 미묘한 차이를 갖고 있습니다. 두 데이터베이스 중 어느 것도 RDBMS를 대체하지는 않으며 ACID를 보장하지도 않습니다. 만약 당신이 이러한 트랜잭션 단위의 작업이 주된 요구사항이라면 이러한 데이터베이스는 적합하지 않습니다. 이러한 경우에는 MySQL이나 PostgreSQL, Oracle과 같은 트랜잭션을 지원하는 관계형 데이터베이스를 사용하는 것이 더 적합합니다. 이제 관계형 데이터베이스는 배제하고 이야기 해봅시다. Cassandra와 MongoDB 간의 주된 차이점을 비교해보는 것이 결정하는데 도움이 될 것입니다. 이 포스팅에서는 결정을 내리는데 도움을 주기 위해서 데이터베이스에 대한 구체적인 기능에 대해 논하는 것 대신 고차원의 전략적 차이점을 논할 것입니다.
1. Expensive Object Model
2. Secondary Indexes
3. High Availability
MongoDB는 하나의 마스터노드(Master node)와 다수의 슬레이브노드(Slave node)로 구성된 Single Master 모델을 지원합니다. 만약 마스터노드에 장애가 발생한 경우에 슬레이브노드의 하나가 마스터로 설정됩니다. 이러한 과정은 자동으로 이뤄지지만 10초에서 40초 가량의 시간이 소요됩니다. 기존의 슬레이브노드가 리더로서 선정되는 동안 다른 쓰기작업을 할 수 없습니다. 대부분의 응용프로그램에게 있어서 이러한 작업이 수행되지만 결국은 사용자에 필요에 의해 결정됩니다. Cassandra는 Multiple master 모델을 지원합니다. 클러스터 중에 단일노드가 유실되더라도 쓰기작업에 대해 영향을 미치지 않습니다. 그러므로 100% 가용성을 유지할 수 있습니다. 만약 100% 가동시간을 확보하고 싶다면 Cassandra가 더욱 적합할 것입니다.
4. Write Scalability
5. Query Language Support
6. Performance Benchmarks
Database Model - 데이터베이스의 모델이나 스키마가 가장 큰 차이를 만드는 것으로 테스트 되었습니다. 어떠한 스키마는 MongoDB에 적합하였고 또 다른 것은 Cassandra에 적합하였습니다. 우리가 데이터베이스를 비교할때 각각의 데이터베이스에 합리적으로 작동하도록 모델을 적용하는 것이 매우 중요합니다.
Load characteristic - 벤치마크 부하의 형질이 매우 중요합니다. 예를 들어 쓰기에 비중을 둔 벤치마크라면 Cassandra가 MongoDB보다 앞설것이며, 읽기에 비중을 둔 테스트라면 MongoDB와 Cassandra가 비슷한 성능을 낼것입니다.
Consistency requirements - 이 것은 꽤나 까다로운 문제입니다. 당신이 읽기/쓰기의 일관성이 두 데이터베이스에 동일하여 다른 한 쪽에 편향되지 않도록 주의해아합니다. 매우 많은 마케팅 벤치마크에서는 다른 쪽을 불리하게 조정합니다. 그러므로 일관성을 조정하는데 주의를 기울여야 할 것입니다.
7. Ease of Use
8. Native Aggregation
9. Schema-less Model
MongoDB에서 당신은 도큐먼트(Document)에 어떠한 스키마도 강제하지 않도록 설정할 수 있습니다. 이전 버전에서는 이것이 기본설정이었지만 새로운 버전에서는 도큐먼트에 스키마를 강제하도록 하는 옵션을 설정할 수 있게 되었습니다. MongoDB에서의 각 도큐먼트는 다른 구조를 가질 수 있었고 이를 해석하여 사용하는 일은 어플리케이션에 달려있습니다. 이러한 경우는 대부분의 어플리케이션에서 적절하지 않지만 유연성이 필요한 특정 케이스에서는 중요합니다. CQL을 기본 언어로 하는 새로운 버전의 Cassandra에서는 정적타입(static typing)을 지원합니다. 당신은 컬럼의 타입을 사전에 정의해아합니다.
* 모든 오역은 피드백 주시면 반영하도록 하겠습니다.