MongoDB MMAPv1 및 WiredTiger 스토리지 엔진


25

: mongoDB3에서 새로운 스토리지 엔진 나타났다 WiredTiger을 . 그러나 MMAPv1 은 여전히 ​​Mongo의 기본 선택입니다 .

하나는 다른 것보다 낫지 않을 수 있습니다. 종종 유스 케이스와 작업에 적합한 도구를 선택하는 것이 중요합니다. 그러나 어떤 엔진이 어떤 직업에 적합합니까?

실제로 MMAPv1이 기본 엔진이지만 WiredTiger는 거의 모든 분야에서 더 나은 것처럼 보입니다. MMAPv1 plus와 동일한 기능이 있습니다.

  • 더 나은 쓰기 성능
  • 문서 수준의 동시성
  • 압축,
  • 스냅 샷 및 검사 점 시스템.

MongoDB의 블로그 에서 비교 테이블을 찾았습니다 .

WiredTiger와 MMAPv1 비교

Solaris를 사용하는 경우를 제외하고 WiredTiger를 선택하지 않는 이유가 있습니까?


편집하다

다음은 WiredTigerMMAPv1 의 내부를 자세히 설명하는 두 개의 비디오입니다 .


모든 사람들이 여기에 있습니다. 당신은 이 주제에 대한 아주 좋은 설명을 위해 blog.clevertap.com/ 을 방문 할 수 있습니다
therealprashant

답변:


26

개인적으로 지금은 세 가지 이유로 mmapv1 스토리지 엔진을 선호합니다.

이유 1 : 성숙

WiredTiger가 미성숙 한 것은 아닙니다. 그러나 mmapv1은 잘 이해되어 있으며, 앞뒤로, 위아래로 모든 방법으로 전투 테스트를 거쳤습니다. WiredTiger는 최근 몇 가지 심각한 문제를 겪었으며 (자세한 내용은 http://jira.mongodb.com 참조) 고객이 다음 단계를 어렵게 찾을 수는 없습니다.

이유 2 : 특징

WT는 기본적으로 멋진 기능을 가지고 있습니다. 문제는 : 나는 그들로부터 혜택을받는 사람을 본 적이 없습니다. 압축? 어느 쪽이든, 당신은 다소 저렴한 디스크 공간에 대한 성능을 달성하기 위해 오히려 열심히 희생합니다. 문서를 확장하기위한 문서 마이그레이션 문제가 부족합니까? 글쎄, 우리는 여전히 16MB의 크기 제한을 가지고 있으며 특히 임베딩이 과도하게 진행되는 경우 임베드 된 문서에 복잡성을 추가했습니다.

다른 기능이 있지만 일반적으로 다음과 같은 특징 이 있습니다 .

이유 3 : 총 소유 비용

새로운 프로젝트의 경우 WT는 다음과 같은 사항이 적용되지 않기 때문에 특히 3.2 이후로는 괜찮을 수 있습니다.

데이터 마이그레이션은 비싸다. 계획을 세우고 계획을 모든 이해 당사자들이 합의해야하며 비상 사태 계획을 수립하고 합의해야하며 이주를 준비, 실행 및 검토해야합니다. 이제이 프로세스의 일부인 이해 관계자와 필요한 시간과 데이터 마이그레이션 비용이 크게 증가합니다. 반면에 투자 수익률은 다소 작습니다. 이러한 요소를 고려하면 마이그레이션을 수행하는 대신 상당히 확장 할 수 있습니다. 인상을주기 위해 : 마이그레이션을 계획하고 실행하고 제대로 검토 한 경우 이해 관계자 당 약 1 주일 정도의 시간을 예상합니다. 1 인당 시간당 $ 100의 비용과 3 명 (관리자, DBA 및 개발자)만이 $ 12.000에 달합니다. 이것은 보수적 인 추정치입니다.

결론

위의 모든 요인으로 인해 WT를 사용하지 않는 결론에 도달했습니다. 현재


최신 정보

이 게시물은 몇 달 전에 업데이트되었으므로 업데이트해야합니다.

성숙에

성숙에 대한 나의 원래 의견은 쓸모없는 것입니다. WiredTiger는 현재로서는 큰 문제가 없었으며 MongoDB 3.2에서 기본 스토리지 엔진이되었습니다.

기능

내 원래 의견에는 여전히 타당성이 있습니다.

압축

그러나 예산이 부족하거나 더 일반적으로 말하면 성능이 주요 관심사가 아니며 성능 균형이 다소 작으며 기본적으로 디스크 공간에 대해 약간의 성능 영향 (압축되지 않은 WT와 비교할 때)을 사용하여 유휴 상태 인 것을 활용합니다. 주위 : CPU.

암호화

MongoDB 3.2 Enterprise는 WiredTiger 스토리지를 암호화하는 기능을 도입했습니다. 보안 요구가 강화 된 데이터의 경우 이는 킬러 기능이며 WT를 기술적으로 (MMAPv1은 암호화를 지원하지 않음) 개념적으로 선택하는 유일한 스토리지 엔진입니다. 물론 일부 환경에서는 해당 옵션이 없을 수도 있지만 암호화 된 디스크 파티션의 가능성을 따로 설정하십시오.

문서 레벨 잠금

위의 분석에서 WT의 기능을 기본적으로 생략했음을 인정해야합니다. 주로 원래 답변을 작성할 때 나와 고객에게 적용되지 않았기 때문입니다.

설정에 따라, 주로 동시 쓰기 클라이언트가 많은 경우이 기능은 성능을 크게 향상시킬 수 있습니다.

총 소유 비용

마이그레이션은 여전히 ​​비쌉니다. 그러나 성숙도의 변화와 기능에 대한 변화된 견해를 고려하면 다음과 같은 경우 마이그레이션이 투자 가치가있을 수 있습니다.

  • 암호화가 필요합니다 (Enterprise Edition 만 해당)
  • 성능은 절대적인 주요 관심사가 아니며 압축을 사용하여 장기적으로 (보수적으로 계산) 비용을 절감 할 수 있습니다.
  • 성능이 향상되면 수직 또는 수평 스케일링이 절약 될 수 있으므로 많은 프로세스가 동시에 작성됩니다.

업데이트 된 결론

새 프로젝트의 경우 지금 WiredTiger를 사용합니다. 압축에서 압축되지 않은 WiredTiger 스토리지로의 마이그레이션은 다소 쉬우므로 CPU 사용률을 높이기 위해 압축을 시작하는 경향이 있습니다 ( "벅"에 더 많은 영향을 미침). 압축이 성능이나 UX에 현저한 영향을 미치면 압축되지 않은 WiredTiger로 마이그레이션합니다.

동시 작가가 많은 프로젝트의 경우 프로젝트 예산으로 투자를 금지하지 않는 한 마이그레이션 여부에 대한 대답은 거의 항상 "예"입니다. 장기적으로는 배치가 합리적으로 계획된 경우 성능 향상에 대한 비용을 지불해야합니다. 그러나 경우에 따라 드라이버를 업데이트해야하고 처리해야하는 문제가있을 수 있으므로 계산에 약간의 개발 시간을 추가해야합니다.

예산이 부족하고 현재 디스크 공간을 확보 할 수없는 프로젝트의 경우 압축 된 WiredTiger로 마이그레이션하는 것이 옵션이 될 수 있지만 압축은 CPU에 약간의 부하를가합니다. 또한 이러한 프로젝트의 경우 마이그레이션 비용이 엄청나게 비쌀 수 있습니다.


답변 해 주셔서 감사합니다. 나는 당신의 주장을 이해합니다. 새 프로젝트의 기본값을 MMAPv1로 다시 설정하라고 조언 하시겠습니까? 성능이 문제가된다면 압축을 완전히 비활성화 할 수도 있습니다. 디스크 공간은 저렴하지만 압축은 RAM에 적합한 작업 세트에 도움이 될 수 있으므로 성능이 향상됩니다. 아니면 내가 틀렸어?
Buzut

1
내가 아는 한 압축은 데이터 파일에만 적용됩니다. 새로운 프로젝트에 관해서는 다음과 같이 말하겠습니다. 나는 장단점을 보여주는 경영진 결정을 요구합니다. 나는 개인적으로 내 프로젝트 중 하나에서 WT를 사용하지만 아직 문제가 발생하지 않았지만 SLA (mmapv1 경험을 기반으로 꽤 잘 계산할 수 있음), 예산 부족 (압축 WT를 요구하는 디스크 공간 절약) 및 기타 많은 요소. 위험과 기회의 무게는 DBA의 결정이 아닙니다. DBA는 전화를 걸기 위해 필요한 정보를 제공해야합니다.
Markus W Mahlberg

1
이 기사는 인덱스가 저장되는 방식이 인덱스가 차지하는 공간을 10 배 줄일 수 있기 때문에 매우 큰 이점이라고 지적 합니다. ilearnasigoalong.blogspot.com/2015/03/… 디스크 공간은 저렴하지만 램은 그렇지 않습니다.
BT

나는 기능에 대한 당신의 요점에 대해 약간 혼란스러워합니다. WiredTiger가 가지고 있지 않은 기능이 MMAPv1에 있다고 말하고 있습니까? 해당 섹션이 조금 더 명확하다면 좋을 것입니다.
BT

@BT 전혀 없습니다. 내가 말하려고하는 것은 WT가 일부 유스 케이스에 도움이 될 수 있지만 일반적으로 그렇지 않은 멋진 기능을 가지고 있다는 것입니다. 데이터 스토리지와 관련하여 최첨단 기술보다 전투 테스트를 거친 스토리지 엔진을 선호합니다. 기사에 따르면 : 예, 접두사 압축 으로 RAM을 절약 할 수 있으며 다른 염려가 없다면 좋은 아이디어 일 수 있습니다. 데이터 손실 또는 성능 문제에 대해 신뢰할 수 있다고 생각하십시오.
Markus W Mahlberg

5

내 두 센트 :

WiredTiger의 저널링 은 저널 레코드를 저장하기 위해 인 메모리 버퍼링을 사용하므로 강제 종료시 업데이트가 손실 될 수 있습니다.

쓰기 작업 사이에서 저널 레코드가 WiredTiger 버퍼에 남아있는 동안 mongod를 강제 종료하면 업데이트가 손실 될 수 있습니다.

MMAPv1의 저널링은 디스크상의 저널 파일에 변경 사항을 기록합니다.

데이터 파일에 대한 쓰기를 적용하지 않고 mongod 인스턴스가 충돌 한 경우 저널은 데이터 파일에 대한 최종 쓰기를 위해 공유보기에서 쓰기를 재생할 수 있습니다.


4

우리는 7 배의 미끼로 MMAPv1에서 10 배의 성능 향상으로 WiredTiger로 전환했습니다. WiredTiger 캐시가 100 %에 도달하면 MongoDB가 잠기므로 MMAPv1로 되돌려 야했습니다. 우리는 여기에 우리의 경험을 문서화했습니다-https: //blog.clevertap.com/sleepless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/


2
좋은 글씨. Kinda는 Uber가 2013 년에 MySQL에서 PostgreSQL로, 2016 년 6 월에 MySQL로 돌아간 것을 상기시킵니다.
RolandoMySQLDBA

유선 타이거에 대해서도 같은 경험을했기 때문에 MMAPV1로 개정했습니다
viren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.