2013-12-20 17 views
5

보다 훨씬 느립니다 : 두 명령이 올바르게 삽입을 수행MongoDB를의 runCommand 나는이 두 몽고 명령을, 제 생각에 그 같은 결과로 연결되어야 직접 전화

for(var i=0;i<1000;i++){db.test.insert({a:1}); db.getLastError({j:1, w:1});}; 

for(var i=0;i<1000;i++){db.test.insert({a:1}); db.runCommand({getLastError:1, j:1, w:1});}; 

그러나, 두 번째는 CCA의 100 배입니다 (500ms 대 45 초). 아무도 알지 못하는 이유는 무엇입니까? 차이는 {j : 1}이 설정되었을 때만 나타나므로 일부 저널링 문제와 관련이 있습니다.

+0

호기심 - fsync가 true로 설정되면 어떻게됩니까? 저널링이 활성화되어 있습니까? –

+0

fsync는 (적어도 나를 위해) 아무 것도 변경하지 않습니다. 나는 MongoDB를 버전 2.4.8에 가지고 있었고 저널링을위한 기본 옵션을 변경하지 않았으므로 활성화시켜야한다. –

답변

1

두 번째 명령은 실제로 저널 커밋을 기다리는 반면 첫 번째 명령은 커밋되지 않으므로 차이가 있습니다. getLastError 쉘 도우미를 사용할 때 j 옵션을 전달할 수 없습니다. 문서 번호 here과 같이 getlasterror 데이터베이스 명령에 대한 w 매개 변수에 해당하는 숫자 또는 문자열이어야합니다.

+0

답변을 주셔서 감사합니다. 이 정보가 문서의 어딘가에서 사용 가능한지 여부를 아십니까? (getLastError 섹션은 괜찮지 만 getLastError를 쉘 도우미로 사용하는 것에 대해서는 아무 것도 말하지 않습니다) –