Database/MongoDB

[MongoDB] 몽고DB 의 데이터는 유실될 수 있나

꽁담 2024. 2. 29. 10:46

몽고DB 데이터는 유실된다?

얼마전 한 유튜브 강의에서 몽고DB 는 데이터가 유실될 수 있다는(왜?는 말씀하지 않으심) 이야기를 듣고

조금 의아하여 구글링을 조금 해보았다.

 

그랬더니 많은 블로그에서 데이터 유실이 있다는 부분을 작성하였는데

언제, 얼마나, 왜 발생하는지에 대한 내용은 작성되어 있지 않았다.

 

DB관리자로써 나는 이걸알고 싶은데..

그래서 한국문서를 넘어 해외문서를 뒤적거리고나서 어느정도 원하는 답을 알게 되었다.

 

그러나 찾아본 자료가 이분들이 말하는 유실과 같은의미를 담고있는지는 잘 모르겠다.

MongoDB 꼬꼬마로써 발견하지 못한 자료가 더 있을지는 모르겠다.

 

다른점으로도 Memory Map 을 사용하고 주기적으로 flush 하는 동작이기 때문에

이 사이에 발생하는 장애로 인한 유실도 배제할 수는 없겠다.

 

 

몽고DB 데이터는 유실되나?

먼저 MongoDB 는 ACID 트랜잭션을 통해 '강력한 데이터 일관성, 정확성, 안정성을 보장' 한다고 말하고 있는 분산 문서 데이터베이스이다.

 

그러나 MongoDB 의 기본쓰기 수준은 단일 노드에 의한 승인이다.

쓰기 작업이 보조 작업에 복제되기 전에 중단되면 데이터가 롤백될 수 있다.

 

또 MongoDB 의 기본읽기 수준은 Dirty Read 이다.

커밋되지 않은 데이터를 읽기 때문에 나중에 롤백될 수 있는 데이터를 조회한다.

 

따라서 클라이언트 입장에서는 일관되지 않은 데이터를 얼마든지 조회할 가능성이 있다.

 

 

관련해서 아래 사이트에서 매우 자세하게 작성해 두었다.

* 영문이라 머리에서 열나는 건 덤

https://jepsen.io/analyses/mongodb-4.2.6

 

Jepsen: MongoDB 4.2.6

2020-05-26: MongoDB identified a bug in the transaction retry mechanism which they believe was responsible for the anomalies observed in this report; a patch is scheduled for 4.2.8. Our most recent report on MongoDB 3.6.4 focused on causal consistency and

jepsen.io

 

 

몽고DB 가 말하고자 하는 것

위에서 작성한 것처럼 기본 쓰기/읽기 레벨로 인해 일관성을 유지하지 못하며

일관성을 유지하기 위해서는 더 높은 격리레벨을 지정해야 한다.

 

그러나 MongoDB 는 설계된 대로 작동하고 있다고 마감했다.

https://jira.mongodb.org/browse/SERVER-35316?focusedCommentId=2008354&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-2008354

 

Loading...

Original Problem: When running a test against 2 replica set shards, with rc “local” and wc “w1” we get reads returning the base value of the document, nil, despite occurring after acknowledged writes in the session. Each single threaded client is w

jira.mongodb.org

 

왜?

MongoDB 는 속도가 매우 빠른 데이터베이스 중 하나로 알려져 있다.

속도를 빠르게 하기위해 격리성을 낮춰 응답속도를 높였다고 보면 된다.

 

자고로 격리성을 높이다 보면 동시성은 약해지지만 응답시간이 늘어난다.

MongoDB 는 이러한 부분을 어쩌면 내려놓지 않았나 싶다.

 

 

참고

MongoDB 의 데이터 유실이 심각하다면 이렇게 유명해지지도 못했고 기업에서도 사용하지 못하겠지,,

이 구조에 대해 알고 잘 이용한다면 얼마나 좋은 데이터베이스인가?

 

MongoDB Developer 사이트에서 Myth 7: MongoDB Loses Data 에 대해 짧게 작성해놓아 가져와봤다.

https://www.mongodb.com/developer/products/mongodb/everything-you-know-is-wrong/

 

Everything You Know About MongoDB is Wrong! | MongoDB

There are a bunch of myths floating around about MongoDB. Here's where I bust them.

www.mongodb.com

 

 

 

아직 MongoDB 초보자 입니다..

잘 못 작성된 부분이 있다면 말씀주시면 감사하겠습니다.