MongoDB vs. 카산드라 [닫기]


738

최고의 마이그레이션 옵션이 무엇인지 평가하고 있습니다.

현재 샤드 MySQL (수평 파티션)을 사용하고 있으며 대부분의 데이터는 JSON blob에 저장되어 있습니다. 복잡한 SQL 쿼리가 없습니다 (DB를 파티션 한 이후 이미 마이그레이션되었습니다).

지금은 MongoDB와 Cassandra가 모두 옵션 일 것 같습니다. 내 상황 :

  • 모든 쿼리에서 많은 읽기, 덜 정기적 인 쓰기
  • "대규모"확장성에 대해 걱정하지 않음
  • 간단한 설정, 유지 관리 및 코드에 대해 더 걱정
  • 하드웨어 / 서버 비용 최소화

4
공식 성능 벤치 마크 통계를 사용할 수 있습니다. Cassandra vs MongoDB vs HBase
Ravi

1
> 모든 쿼리에서 많은 양의 읽기, 덜 규칙적인 쓰기 => CQRS 찾기 (이벤트 소싱없이 쓰기에서 읽기와 분리하지만 읽기 모델을 비동기 적으로 업데이트 할 수 있는지 확인하십시오. 동기화도 작동 할 수 있습니다.
bodrin

2
이것은 실제로 좋은 질문입니다. 업데이트 버전이 있는지 궁금합니다. 이것은 매우 오래되었습니다
slashdottir

답변:


584

모든 쿼리에서 많은 양의 읽기, 적은 정기적 인 쓰기

두 데이터베이스 모두 핫 데이터 세트가 메모리에 적합한 읽기에서 잘 수행됩니다. MongoDB의 인덱스가 현재 더 유연하지만 둘 다 조인없는 데이터 모델을 강조하고 대신 비정규 화를 권장하고 문서 또는 에 인덱스를 제공합니다 .

Cassandra의 스토리지 엔진은 데이터 세트가 아무리 커지더라도 일정한 시간 쓰기를 제공합니다. MongoDB에서는 쓰기가 더 문제가됩니다. 부분적으로 b- 트리 기반 스토리지 엔진 때문이지만 다중 단위 잠금 때문에 발생합니다.

MongoDB는 분석을 위해 맞춤형 맵 / 감소 구현을 제공합니다. Cassandra는 Hive (Hadoop 맵 / 리 듀스에 구축 된 SQL 데이터웨어 하우스) 및 Pig (많은 사람들이 SQL보다 맵 / 리덕션 워크로드에 더 적합하다고 생각하는 Hadoop 특정 분석 언어)를 포함하여 기본 Hadoop 지원을 제공합니다 . Cassandra는 Spark 사용도 지원합니다 .

"대규모"확장성에 대해 걱정하지 않음

단일 서버를보고 있다면 MongoDB가 더 적합 할 것입니다. 확장에 더 관심이있는 사람들을 위해 Cassandra의 단일 실패 지점 아키텍처는 설정이 쉽고 안정적입니다. (MongoDB의 전역 쓰기 잠금도 더욱 고통스러워지는 경향이 있습니다.) Cassandra는 여러 데이터 센터 지원을 포함하여 복제 작동 방식을 훨씬 더 많이 제어 할 수 있습니다.

간단한 설정, 유지 관리 및 코드에 대해 더 걱정

둘 다 설정하기가 쉽지 않으며 단일 서버에 대해 기본적으로 적합한 기본값이 있습니다. Cassandra는 걱정할 특수 역할 노드가 없기 때문에 다중 서버 구성에서 설정하는 것이 더 간단합니다.

현재 JSON Blob을 사용하고 있다면 MongoDB는 BSON을 사용하여 데이터를 저장한다는 점에서 유스 케이스에 매우 적합합니다. 현재 데이터베이스보다 더 풍부하고 쿼리 가능한 데이터를 가질 수 있습니다. 이것은 몽고에게 가장 중요한 승리입니다.


86
완전히 다른 의견은 충분히 크지 않지만 ... Cassandra는 선형으로 확장 가능한 (암시 적 일정한 시간 읽기 및 쓰기) dynamo / google bigtable 하이브리드로 데이터 크기에 관계없이 빠른 쓰기 기능을 제공합니다. 이 기능 세트는 주문 된 키 값 저장소의 기능을 뛰어 넘는 최소한의 기능입니다. MongoDB는 내구성이 뛰어나고 기능이 뛰어나고 빠른 문서 저장소이며 쓰기 지속성을 보장합니다 (즉시 디스크에 기록되지 않기 때문에). 그들은 다른 철학을 가진 다른 짐승입니다. MongoDB는 RDMS 대체물에 더 가깝습니다.
Michael

28
Cassandra는 낮은 수준이지만 uber 확장을 허용하지만 (Twitter / Digg / Facebook 참조) 유연한 쿼리가 허용되지 않으므로 데이터 레이아웃, 보조 인덱스 작성 방법 등을 신중하게 고려해야합니다.
Michael

11
모두가 Cassandra와 관련하여 트위터를 언급했기 때문에 트위터를 유지하기 위해 Cassandra를 사용하지 않고 여전히 MySQL을 사용합니다 ( engineering.twitter.com/2010/07/cassandra-at-twitter-today.html ). 좋습니다, 그러나 그들은 여전히 ​​Cassandra에 다른 목적을 위해 많은 데이터를 저장한다고 상상할 수 있습니다.
H6.

7
Mongo 2.2에서 전역 쓰기 잠금이 제거 된 것 같습니다 ...
Matt Farmer

16
프로젝트가 시작되기 전에도 Mongodb의 어려움을 느끼고 있습니다. 핫 백업은 기본 요구 사항입니다. Linux 서버에서 핫 백업을 수행하려면 먼저 LVM 파티션을 설정하고 (흔하지는 않음) 모든 백업 세션 전에 스냅 샷을 작성해야합니다. 또 다른 쉬운 방법은 Mongodb 유료 백업 서비스를 사용하는 것입니다. 그러나 그 서비스는 비싸다 (2.3 $ / GB / 월). 곧 내결함성을위한 복제 세트가 필요합니다. 오픈 소스 버전을 사용하면 노드는 일반 텍스트로만 데이터를 교환 할 수 있습니다. SSL의 경우 Entprise 에디션과 함께 사용해야합니다. 그리고 그것은 10,000 $입니다. 안녕 Mongodb. Cassandra로 코드를 리팩토링했습니다.
Karthik Sankar

146

나는 계층 적 데이터 관리 시스템을 구축하면서 MongoDB를 광범위하게 (지난 6 개월 동안) 사용했으며, 설치의 용이성 (설치, 실행, 사용!)과 속도를 모두 보증 할 수있다. 인덱스에 대해 신중하게 생각하는 한 절대 속도로 비명을지를 수 있습니다.

MongoDB 팀이 패리티를 위해 노력하고 있지만 Cassandra는 Twitter와 같은 대규모 프로젝트에서 사용하기 때문에 더 나은 확장 기능을 가지고 있습니다. 시험 실행 단계 이후에 카산드라를 사용하지 않았으므로 세부 사항을 말할 수는 없습니다.

우리가 NoSQL 데이터베이스를 평가할 때 실제 스윙 어는 쿼리였습니다. Cassandra는 기본적으로 거대한 키 / 값 저장소이며 쿼리는 약간 이상합니다 (최소한 MongoDB와 비교). 따라서 성능을 위해서는 일종의 수동 색인으로 많은 양의 데이터를 복제하십시오. 반면에 MongoDB는 "query by example"모델을 사용합니다.

예를 들어 Users가 포함 된 Collection (RDMS 테이블과 동등한 몽고 DB 용어)이 있다고 가정합니다. MongoDB는 기본적으로 바이너리 JSON 객체 인 Documents로 레코드를 저장합니다. 예 :

{
   FirstName: "John",
   LastName: "Smith",
   Email: "john@smith.com",
   Groups: ["Admin", "User", "SuperUser"]
}

관리자 권한이있는 Smith라는 모든 사용자를 찾으려면 Javascript를 사용하여 관리 콘솔에서 또는 선택한 언어를 사용하여 프로덕션에서 새 문서를 작성하면됩니다.

{
   LastName: "Smith",
   Groups: "Admin"
}

... 그리고 쿼리를 실행하십시오. 그게 다야. 비교, RegEx 필터링 등을위한 추가 연산자가 있지만 모두 매우 간단하며 위키 기반 문서는 매우 좋습니다.


54
업데이트 (2011 년 8 월 8 일) : 아마존 아일랜드 EC2 데이터 센터는 어젯밤 번개 관련 사건이 발생했으며 서버 복구를 정렬 할 때 한 가지 중요한 점을 발견했습니다. '설정하기 쉽습니다') Arbiter 노드가 있는지 확인하십시오. 따라서 하나가 다운되면 다른 하나가 패닉하지 않고 보조 모드에서 정지합니다! 저를 믿으십시오, 그것은 큰 데이터베이스를 정리하는 데 어려움을 겪습니다.
Richard K.

8
@Richard K가 말한 것을 추가하려면 복제 세트에 짝수의 노드 (기본 + 보조)가있을 때 중재자 노드가 있어야합니다.
Amareswar 2013

데이터 분석에서 더 많은 집계를 수행 할 때 mongodb을 고려하십시오.
user1503117

As long as you think about indexes carefully, it can absolutely scream along, speed-wise.실제 메모리가 가득 차고 OS에서 페이지 오류가 발생하기 시작할 때까지 기다리십시오. lol
sturcotte06

117

기존 데이터베이스와 NoSQL 데이터 저장소 중에서 선택해야하는 이유는 무엇입니까? 둘 다 사용하십시오! 초기 학습 곡선 이외의 NoSQL 솔루션의 문제점은 트랜잭션이 부족하다는 것입니다. MySQL에 대한 모든 업데이트를 수행하고 MySQL이 NoSQL 데이터 저장소에 읽기를 수행하도록하면 각 기술의 장점을 활용할 수 있습니다. 이것은 더 복잡해 지지만 이미 MySQL 쪽이 있습니다 .MongoDB, Cassandra 등을 믹스에 추가하십시오.

NoSQL 데이터 스토어는 일반적으로 동일한 사양으로 기존 DB보다 확장 성이 뛰어납니다. Facebook, Twitter, Google 및 대부분의 신생 기업이 NoSQL 솔루션을 사용하는 이유가 있습니다. 새로운 기술에 관심을 가진 사람들은 아닙니다.


8
전적으로 동의합니다. 내가 설계 할 예정인 제품 중 하나에서 mongodb + mysql을 사용하고 있습니다. 다가오는 금융 상품 클라우드입니다. mysql은 트랜잭션 기능이 절대적으로 필요한 곳에 사용됩니다. mongodb는 필요할 때 풀업해야하는 비계산 복잡한 데이터 구조를 저장하는 데 사용됩니다. 지금까지 잘 작동합니다. :)
Ram on Rails-n-React

또한 대부분의 프로젝트에서 이러한 이중 접근 방식을 사용했으며 일부 경우 NFS 마운트 파일 시스템이 PostgreSQL과 함께 사용되어 경우에 따라 1Gb에 가까운 지진 블롭을 사용했습니다. 경로는 키 값 데이터베이스에 대한 일종의 쿼리입니다.
Audrius Meskauskas

1
다음은 SQL 및 NoSQL 데이터베이스를 모두 설계하는 방법에 대한 질문에 대한 링크입니다. dba.stackexchange.com/questions/102053/… 몇 가지 통찰력을 사용할 수 있습니다.
j는

그는 이미 좋은 거래를 피했다 => 이제 무한한 확장 성이 가능할 것이다 .. 그렇지 않으면-> : :)
bodrin

1
귀하의 데이터가 분산 된 경우 이것은 좋은 해결책이 아닙니다
Esteban Verbel

60

아마 이상한 사람이 될지 모르지만 MySQL을 유지해야한다고 생각합니다. 실제로 해결해야 할 실제 문제에 대해서는 설명하지 않았으며, MySQL / InnoDB는 BLOB / JSON 데이터에도 탁월한 스토리지 백엔드입니다.

RDBMS의 모든 기능이 사용되는 것이 아니라는 사실을 깨닫 자마자 웹 엔지니어들에게 더 많은 NoSQL을 사용하려고하는 일반적인 트릭이 있습니다. 대부분의 NoSQL 데이터베이스에는 데이터 엔진 (MySQL이 스토리지 엔진이라고 함)이 열악하기 때문에, 이것만으로는 좋은 이유가 아닙니다.

이제 그런 종류가 아닌 경우 MySQL에서 누락 된 것을 지정 하고 다른 데이터베이스 (예 : 자동 샤딩, 자동 장애 조치, 다중 마스터 복제, 약한 데이터 일관성 보장)를 찾고 있습니다 더 높은 쓰기 처리량 등으로 클러스터 지불


13
샤딩을 사용하고 있습니다. 즉, 데이터가 서버간에 수동으로 분할됩니다. Mongodb는 샤딩을 자동화 할 수 있으며 이는 이점이 될 수 있습니다.
fabspro 2013

18
또한 RDBMS에 주로 JSON Blob을 저장하여 관계형 디자인 (기능)을 쓸모 없게 만듭니다.
다 미르 수 다레 비치

4
데이터 모델과 자동 샤딩은 실제로는 다르지만 데이터베이스를 선택할 때는 먼저 스토리지 엔진을 살펴보고 나머지 벨과 휘파람을 먼저 봐야합니다 . 스토리지 스파이크는로드 스파이크에서 어떻게 수행됩니까? 데이터 유입 스파이크에서 자동 샤딩 기능은 어떻게 수행됩니까? 이러한 중요한 측면에서 데이터베이스에 대한 제어 권한을 포기하기 전에 해당 작업을 수행 할 수 있는지 확인하는 것이 좋습니다.
코스타

7
관계형 모델은 가장 잘 생각되고 구현하기에 효율적이며 검소한 데이터 모델 중 하나입니다. "렌더링 관계형 디자인 기능은 쓸모가 없습니다"는 제약 조건, 트리거 또는 참조 무결성과 관련이있을 수 있지만 모두 사용 당 지불됩니다.
Kostja

20

나는 Cassandra를 사용하지 않았지만 MongoDB를 사용했으며 훌륭하다고 생각합니다.

간단한 설정을 마치면 다음과 같습니다. MongoDB를 untar하고 mongod 데몬을 실행하면 바로 실행됩니다.

분명히 그것은 시작에 불과하지만 시작하기는 쉽습니다.


22
AFAIK는 Cassandra에도 동일하게 적용됩니다. Untar, 데몬을 실행하십시오. 테스트 클러스터가 설정되고 생산 준비가되었습니다!
받음

13

나는 어제 mongodb에 관한 프리젠 테이션을 보았다. 나는 포장을 풀고 발사하는 것처럼 간단하게 셋업이 "간단한"것이라고 말할 수있다. 끝난.

mongodb와 cassandra는 거의 모든 일반 Linux 하드웨어에서 실행되므로 해당 영역에서 많은 장벽을 찾아서는 안됩니다.

나는이 경우 하루가 끝날 때 개인적으로 더 편안하게 느끼고 선호하는 툴 세트가 있다고 생각합니다. mongodb에 대한 프레젠테이션에서 발표자는 mongodb의 툴셋이 매우 가벼우 며 MySQL에서 사용할 수있는 툴과 유사한 툴이 거의 없었습니다. 이것은 물론 YMMV의 경험이었습니다. mongodb에 대해 좋아했던 것 중 하나는 많은 언어 지원이있는 것 같습니다 (Python 및 .NET이 주로 사용하는 두 가지입니다).

mongodb를 사용하는 사이트 목록은 매우 인상적 이며 트위터가 cassandra를 사용하도록 전환 한 것을 알고 있습니다.


4
하루가 끝나면 사과 대 오렌지 비교입니다. 두 데이터베이스 모두 고유 한 장점이 있습니다. 고려해야 할 사항은 다음과 같습니다. 객체 모델, 보조 인덱스, 쓰기 확장 성, 높은 avaialability 등 mongodb와 cassandra의 높은 수준의 전략적 차이점을 설명하는 블로그 게시물이 있습니다 -scalegrid.io/blog/cassandra-vs-mongodb
Dharshan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.