2017-04-06 4 views
0

내 응용 프로그램이 하나 이상의 프로세스/스레드가 특정 콜렉션에서 읽는 경우 나쁜 일이 발생하는 Mongo db에 액세스해야합니다.어떻게 MongoDB에 읽기 잠금을 설정합니까?

컬렉션 (또는 필요한 경우 db)에서 읽을 수있는 프로세스 그룹의 기능을 제한해야합니다. 예를 들어, 여러 프로세스가 데이터베이스에서 읽으 려하면 연속적으로 이 아닌을 병렬로 읽습니다.

+0

컬렉션에서 하나 이상의 프로세스가 _reading_하면 나쁜 일이 발생합니까? 비정상적인 상황처럼 들리지만, 더 많이 말해 줄 수 있습니까? –

+0

@VinceBowdren 예. 컬렉션에있는 문서는 컬렉션에 배치 할 다음 문서를 결정합니다. 컬렉션에 복제본이 없어야합니다. 따라서 두 프로세스가 동시에 콜렉션에서 읽는 경우, 동일한 데이터를 읽고 동일한 다음 문서를 계산 한 다음 동일한 알고리즘을 사용하여 동일한 문서를 작성할 수 있습니다. – user3919624

답변

1

드라이버 수준에서 수행 할 수 있습니다. 연결 풀 크기를 1로 설정하면 데이터베이스에 대한 모든 액세스가 순서대로 수행됩니다. 이것은 당신이 병렬로 을 열어 얼마나 많은 TCP 연결을 제어 할 수 있습니다,

poolSize : 문서에서

MongoClient.connect(url, { 
    poolSize: 1 
}); 

: nodejs에서

당신은 드라이버를 설정할 수 있습니다. 이 값의 기본값은 5이지만, 원하는만큼 높게 으로 설정할 수 있습니다. 드라이버는 라운드 로빈 전략을 사용하여 을 디스패치하고 TCP 연결에서 읽습니다.

+0

'MongoClient' 인스턴스가 여러 프로세스에서 시작된 경우에도이 작업을 수행 할 수 있습니까? 예를 들어, 두 프로세스가 둘 다'MongoClient.connect (url, {poolSize : 1});'을 실행한다면, 데이터베이스는 두 프로세스의 연결을 순차적으로 받아 들일 것인가? @kozakvoj – user3919624

+0

아니요.하지만 데이터베이스에 순차적으로 액세스해야하는 경우 (그리고 언급 된 @VinceBowdren과 같은 비정상적인 상황) 메시지 대기열을 사용할 수 있습니다. 스레드는 db 읽기를 대기열에 위임 할 수 있습니다.이 작업은 완료 될 때 다시 알려줍니다 (비동기식으로). – kozakvoj