2016-07-18 6 views
2

MongoDB 데이터베이스를 처음 사용하고 있으며 일부는 MongoDB로 이전 할 계획입니다. 낙관적 인 동시성을 처리해야하는 곳. MongoDB에서 사용 가능한 최상의 방법은 무엇입니까?MongoDB에서 동시성을 관리하는 방법은 무엇입니까?

MongoDB는 동시성이 필요한 응용 프로그램에 적합한 선택입니까?

답변

4

예 MongoDB는 동시성에 적합한 선택입니다.

MongoDB 잠금은 RDBMS의 잠금과 다릅니다.

MongoDB는 전역, 데이터베이스 또는 컬렉션 수준에서 작업을 잠글 수있는 멀티 입상 잠금 (유선 호랑이 참조)을 사용하며 개별 저장소 엔진이 컬렉션 수준 아래에서 자신의 동시성 제어를 구현할 수 있도록합니다 (예 : WiredTiger의 문서 수준).

MongoDB는 동시 읽기 기능을 사용하여 데이터베이스 나 컬렉션과 같은 리소스에 대한 공유 액세스를 허용하지만 MMAPv1에서는 단일 쓰기 작업에 단독 액세스를 허용합니다.

WiredTiger은 낙관적 동시성 제어를 사용합니다. WiredTiger는 글로벌, 데이터베이스 및 수집 수준에서 의도 잠금 만 사용합니다. 스토리지 엔진이 두 작업 간의 충돌을 감지하면 쓰기 충돌이 발생하여 MongoDB가 해당 작업을 투명하게 다시 시도합니다.

MongoDB에는 각 데이터베이스에 대한 읽기/쓰기 래치가 있습니다.

래치는 다중 판독기, 단일 기록기이며 작가가 욕심이 많으므로 데이터베이스에 동시 판독기를 무제한으로 가질 수 있지만 어떤 컬렉션에도 한 번에 하나의 작성기 만있을 수 있습니다 어느 한 데이터베이스에서.

"writer-greedy"는 쓰기에 우선 순위를 부여하므로 쓰기 요청을 받으면 쓰기가 완료 될 때까지 모든 읽기 요청이 차단됩니다.

여기 잠금 장치는 잠금 장치보다 가볍고 마이크로 초 안에 작업을 수행하기 때문에 래치라고합니다.

MongoDB는 많은 동시 쿼리를 실행할 수 있습니다.

희망 하시겠습니까!

참조

https://docs.mongodb.com/manual/faq/concurrency/

https://docs.mongodb.com/manual/reference/command/findAndModify/

관련 문제