2017-12-25 57 views
1

읽기 부부/쓰기 성능,MongoDb 대 Cassandra : 읽기/쓰기 신화? 카산드라 대 MongoDB에 관한 그물에 기사의

쓰기

일반적으로 데이터가 엄청난 경우 카산드라는 성능이 몽고보다 더 쓰기 있다고한다 읽었다. 아래 내용을 참조하십시오

카산드라의 스토리지 엔진은 데이터 세트가 커질수록 큰 데이터를 제공합니다. 쓰기는 MongoDB에서 더 문제가되는데, 부분적으로 b-tree 기반의 저장 엔진 때문이기도하지만, 데이터베이스 당 쓰기 잠금이 이기 때문입니다.

여기 내 질문이 있습니다. -이 진술은 여전히 ​​맞습니까? Mongo는 데이터베이스 당 대신 문서 당 잠금을 지원합니다. 권리? 그래서 현재 캐스 산드라는 몽고 공연보다 여전히 뛰어나다 고 할 수 있겠습니까? 그렇다면 왜?

읽기

일반적으로 몽고 성능 카산드라보다 낫다하지만 카산드라보다 읽기에 더 나은 몽고을 만드는 것 어떤 이유를 찾지 못했습니다 읽으라고?

업데이트 : - 자레드 응답에서

this forum

읽어에서 그들이 카산드라 에보다 MongoDB를의 스토리지 엔진에서 더 효율적이다. Cassandra의 스토리지 엔진은 데이터를 추가 전용 형식으로 저장하므로 쓰기가 매우 잘 수행됩니다 ( ). 이것은 검색 시간이 불량한 회전 디스크 드라이브의 을 유용하게 사용하지만 시리얼을 수행 할 수 있습니다. 매우 빠르게 씁니다. 그러나 단점은 읽음을 할 때 은 가장 최근 버전 인 을 호출자에게 반환하기 위해 여러 버전의 개체를 검사해야하는 경우가 종종 있습니다. MongoDB는 장소의 데이터를 업데이트합니다. 이것은 쓰기가 처리 될 때 더 많은 랜덤 IO를 수행한다는 것을 의미합니다. 은 하나의 b- 트리 룩업에서 디스크상의 객체의 정확한 위치를 찾을 수 있기 때문에 읽기 처리시 더 빠르다는 이점이 있습니다.

그것은 나를 그냥 먼저 검색 한 다음 편집 할 수있다 몽고 같은 장소 편집에 마침내 대신에 그것을 추가하기 때문에 카산드라는 기록을 기존에/편집 삭제하면서 빠르게 이해하는 데 도움을 주었다. 이 몽고

보다 쓰기에 더 나은 카산드라하게하지만 똑같은 일이 몽고 카산드라가 호출자

다른를로 돌아가려면 최신 버전을 얻기 위해 같은 레코드의 여러 버전을 통해 스캔하기 때문에 카산드라보다 느리게한다 이 blog의 이유는 왜 카산드라 쓰기

에만 차에 쓰기를 취할 수는 "단일 마스터"모델

MongoDB를 더 나은입니다. 보조 서버는 읽기 전용으로 만 사용할 수 있습니다.그래서 기본적으로 3 개의 노드 복제본 세트가있는 경우 마스터는 쓰기를 수행하는 이고 나머지 두 노드는 읽기 전용입니다. 이 은 쓰기 확장 성을 크게 제한합니다. 여러 개의 샤드를 배포 할 수 있지만 은 데이터 노드 중 1/3만이 쓸 수 있습니다. Cassandra 의 "다중 마스터"모델은 모든 서버에서 쓰기 작업을 수행 할 수 있습니다. 기본적으로 쓰기 확장 성은 클러스터에있는 서버 수인 수에 의해 제한됩니다. 클러스터에있는 서버가 많을수록 크기가 더 커집니다. 몽고 카산드라보다는 읽기에 더 나은 이유 같은 blog에서

보조 인덱스는 MongoDB의에서 일류의 구조입니다. 이렇게하면 이 중첩되어 있어도 MongoDB에 저장된 객체의 모든 속성을 쉽게 색인화 할 수 있습니다. 따라서이 보조 인덱스를 기반으로 쿼리하는 것이 매우 쉽습니다. 카산드라는 보조 색인 색인만을 지원합니다. 보조 색인은 단일 열 및 동등 비교로 제한됩니다. 대부분 기본 키로 질의 할 예정이라면 Cassandra가 잘 작동합니다.

답변

2

질문에 대한 대답 : 예. 최신 mongoDB는 문서 당 잠금을 지원합니다. https://docs.mongodb.com/manual/core/wiredtiger/

여기에 쓰기 작업의 벤치 마크 :카산드라 규모에서 더 좋은 성능을 벤치 마크에 따르면 https://www.datastax.com/nosql-databases/benchmarks-cassandra-vs-mongodb-vs-hbase (클러스터 노드의 높은 숫자에)

은 당신을 도울 것입니다 바랍니다. 여기

또한 무거운 쓰기에 최적화되어 LSM-트리를 사용

카산드라 카산드라에 관한

도움이 될 귀하의 질문에 대한 몇 가지 세부 사항입니다. https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_manage_ondisk_c.html

일부 세부 사항

쓰기를 수행, 데이터는 즉시 커밋 로그에 기록됩니다. ? L 트 로그는 응급 복구 메커니즘입니다. 쓰기는 커밋 로그에 기록 될 때까지 성공한 것으로 간주되지 않습니다. 데이터가 커밋 로그에 기록되면 memtable에 기록됩니다. 최신 버전의 Cassandra memtables는 대부분 JVM 힙이 아닌 원시 메모리에 저장됩니다. 따라서 성능도 향상됩니다.

memtable에 저장된 개체의 수가 임계 값에 도달하면 memtable의 내용이 SSTable이라는 파일로 디스크로 플러시됩니다. 그러면 새로운 memtable이 생성됩니다. memtable이 SSTable로 플러시되면, 그것은 변경 불가능합니다.

모든 쓰기가 추가 작업이기 때문에 Cassandra에 값을 쓰는 데 어떤 종류의 읽기 또는 탐색도 필요하지 않습니다.기본 몽고으로 MongoDB를

에 대해서는

(https://docs.mongodb.com/manual/core/mmapv1/)을 B-나무를 사용하고 MMAPv1 스토리지 엔진을 사용하고 있지만, MongoDB의 최신 버전은 LSM-트리를 지원할 수 WiredTiger 스토리지 엔진 (https://docs.mongodb.com/manual/core/wiredtiger/)를 사용합니다.

잠금과 관련하여 : WiredTiger MongoDB는 문서 수준 잠금을 지원하지만 MMAPv1은 수집 수준 동시성 제어를 지원합니다.

몇 가지 유용한 기사 : https://dba.stackexchange.com/questions/121160/mongodb-mmapv1-vs-wiredtiger-storage-engines https://docs.mongodb.com/manual/faq/concurrency/ https://www.percona.com/blog/2016/01/06/mongodb-revs-you-up-what-storage-engine-is-right-part-1/

+0

한 수정/설명 : 여기 MongoDB를 3.2 이후 (~ 2 년 전 출시) 기본 스토리지 엔진이 WiredTiger있다가 (HTTPS를 참조하십시오 //docs.mongodb를. co.kr/manual/core/storage-engines)을 참조하십시오. – IanWhalen

+0

하지만 Cassandra보다 읽기 성능이 빠른 이유는 무엇입니까? – emilly