몽고DB 데이터는 유실된다?
얼마전 한 유튜브 강의에서 몽고DB 는 데이터가 유실될 수 있다는(왜?는 말씀하지 않으심) 이야기를 듣고
조금 의아하여 구글링을 조금 해보았다.
그랬더니 많은 블로그에서 데이터 유실이 있다는 부분을 작성하였는데
언제, 얼마나, 왜 발생하는지에 대한 내용은 작성되어 있지 않았다.
DB관리자로써 나는 이걸알고 싶은데..
그래서 한국문서를 넘어 해외문서를 뒤적거리고나서 어느정도 원하는 답을 알게 되었다.
그러나 찾아본 자료가 이분들이 말하는 유실과 같은의미를 담고있는지는 잘 모르겠다.
MongoDB 꼬꼬마로써 발견하지 못한 자료가 더 있을지는 모르겠다.
다른점으로도 Memory Map 을 사용하고 주기적으로 flush 하는 동작이기 때문에
이 사이에 발생하는 장애로 인한 유실도 배제할 수는 없겠다.
몽고DB 데이터는 유실되나?
먼저 MongoDB 는 ACID 트랜잭션을 통해 '강력한 데이터 일관성, 정확성, 안정성을 보장' 한다고 말하고 있는 분산 문서 데이터베이스이다.
그러나 MongoDB 의 기본쓰기 수준은 단일 노드에 의한 승인이다.
쓰기 작업이 보조 작업에 복제되기 전에 중단되면 데이터가 롤백될 수 있다.
또 MongoDB 의 기본읽기 수준은 Dirty Read 이다.
커밋되지 않은 데이터를 읽기 때문에 나중에 롤백될 수 있는 데이터를 조회한다.
따라서 클라이언트 입장에서는 일관되지 않은 데이터를 얼마든지 조회할 가능성이 있다.
관련해서 아래 사이트에서 매우 자세하게 작성해 두었다.
* 영문이라 머리에서 열나는 건 덤
https://jepsen.io/analyses/mongodb-4.2.6
몽고DB 가 말하고자 하는 것
위에서 작성한 것처럼 기본 쓰기/읽기 레벨로 인해 일관성을 유지하지 못하며
일관성을 유지하기 위해서는 더 높은 격리레벨을 지정해야 한다.
그러나 MongoDB 는 설계된 대로 작동하고 있다고 마감했다.
왜?
MongoDB 는 속도가 매우 빠른 데이터베이스 중 하나로 알려져 있다.
속도를 빠르게 하기위해 격리성을 낮춰 응답속도를 높였다고 보면 된다.
자고로 격리성을 높이다 보면 동시성은 약해지지만 응답시간이 늘어난다.
MongoDB 는 이러한 부분을 어쩌면 내려놓지 않았나 싶다.
참고
MongoDB 의 데이터 유실이 심각하다면 이렇게 유명해지지도 못했고 기업에서도 사용하지 못하겠지,,
이 구조에 대해 알고 잘 이용한다면 얼마나 좋은 데이터베이스인가?
MongoDB Developer 사이트에서 Myth 7: MongoDB Loses Data 에 대해 짧게 작성해놓아 가져와봤다.
https://www.mongodb.com/developer/products/mongodb/everything-you-know-is-wrong/
아직 MongoDB 초보자 입니다..
잘 못 작성된 부분이 있다면 말씀주시면 감사하겠습니다.
'Database > MongoDB' 카테고리의 다른 글
[MongoDB] MongoDB 라이센스와 버전정책 (1) | 2024.04.18 |
---|---|
[MongoDB] 스키마를 설계해보자 (1) | 2024.02.29 |
[MongoDB] MongoDB 의 파일구조 (1) | 2024.02.22 |
[MongoDB] mongosh OpenSSL configuration error 해결 (0) | 2024.02.22 |
[MongoDB] Amazon Linux 2023 리눅스에 MongoDB 설치 (0) | 2024.02.22 |