2009-11-21 3 views
1

처음으로 MongoDB를 사용하고 성능을 향상 시키려고합니다. 저는 Windows 7 64 비트 호스트가있는 VirtualBox Ubuntu 9.10 게스트에서 루비를 실행하고 있습니다. MongoDB는 원격 호스트에 있지만 인터넷 클라우드 어딘가에있는 것은 아닙니다."핑"타이밍이 너무 높을 때 내 Ruby "Time.now"타이밍이 너무 낮을 수 있습니까?

time1 = Time.now 
rows = coll.find(some_criteria) 
puts ((Time.now - time1) * 1000).to_s 

문제는, 시간이 너무 작아서, 내가보고있는 무슨 생각하지 않는다 :

여기 내 코드입니다. 내 컴퓨터와 원격 몽고 컴퓨터 간의 핑 시간은 약 40 밀리초 동안 나는, 100, 50 200 MICRO초을 번보고 있어요. 유닛을 오해하고 있습니까? 핑 (핑)이 너무 높을 때 나의 타이밍은 어떻게 그렇게 낮을 수 있습니까?

+0

서식을 수정해야합니다. –

+0

40 밀리 초 내가 MongoDB를의 자세한 출력을 시청에 원격 호스트에 ssh'ed있어 – ADAM

답변

1

당신은, 패킷 스니퍼를 시작 IRB를 시작하고 몇 가지 테스트 한 번에 한 줄 명령을 실행할,하지만 당신은 이미 정확하게이 역동적 인 동작을 분석하는 것 수 있습니다.

그래서, 난 당신이 coll = db.collection_names 같은 뭔가 coll있어 가정? 그리고 coll이어야합니다. 열거 형은입니까?

는 그렇다면, 아무것도 정말 each 방법으로 개체의 반환을 제외하고 그 호출에 일어날 필요가 없습니다. 당신이Enumerable에서에서 무언가 를 요청할 때까지 아마 아무것도 실제로 발생하지 않습니다.

당신은 시도 할 수 있습니다 :

time1 = Time.now 
rows = coll.find(some_criteria) 
o = rows.first 
puts ((Time.now - time1) * 1000).to_s 

이 반드시 더 이상 적용되지 않습니다. db.collection_names이 호출되었을 때 작업이 완료되었을 수 있습니다. IRB 시험은 정상에서, ...이 문제에 도움이 되거 수

+0

좋은, 그리고 내가 * 알고 *를 출력에서 ​​진행 네트워크 왕복이있다. 따라서 핑 시간과 루비가 측정 한 시간의 차이에 당황 스럽습니다. –

+1

단순히 'Enumerable'을 반환하고 동기 연산 결과가 필요없는 소켓 연산을 시작할 수도 있습니다. 이것은 왕복 여행을 시작할 것이지만 또한 즉시 돌아올 것입니다. – DigitalRoss

0

간단한 답 :

rows = coll.find(some_criteria) 

구체적으로는 서버와 통신 아니에요 :이 라인은 당신이 기대하는 일을하지 않습니다 .

관련 문제