2011-11-23 2 views
0

커서가 몇 개 닫히고 정상적인 동작을하는 경우 mongoid로 페이지 요청 당 [ 'system.namespaces'] ?커서가 많아 지거나 닫히고 mongoid로 'system.namespaces'에 요청하십시오.

내가 무엇을 얻을의 샘플 :

Started GET "/index.html" for 127.0.0.1 at 2011-11-23 12:06:55 +0100 
MONGODB ugs['system.namespaces'].find({}) 
...a request to MongoDB via Mongoid... 
Processing by Websites::PagesController#index as */* 
MONGODB ugs['system.namespaces'].find({}) 
MONGODB [DEBUG] Cursor#close 4936656287055121097 
...a request to MongoDB via Mongoid... 
MONGODB ugs['system.namespaces'].find({}) 
...a request to MongoDB via Mongoid...  
MONGODB [DEBUG] Cursor#close 6165957166476725254 
...a request to MongoDB via Mongoid... 
MONGODB [DEBUG] Cursor#close 6639712559104429118 
...a request to MongoDB via Mongoid... 
MONGODB [DEBUG] Cursor#close 6639712559104429118 
...a request to MongoDB via Mongoid... 
MONGODB [DEBUG] Cursor#close 4128671431420447906 
Completed 200 OK in 694ms (Views: 693.8ms) 

그것은 아래로 성능을 절단하는 것, 어떤 아이디어는이 문제를 방지하려면?

다음을 사용 : Rails 3.1.2, Ruby 1.9.2, Mongoid 2.3.3, Mongo 1.4.0 및 MongoDB 2.0.1.

Mongoid.yml는 :

development: 
    host: xx.xx.xx.xx (distant) 
    username: xx 
    password: xx 
    database: xx 
    max_retries_on_connection_failure: 5 
    identity_map_enabled: true 

답변

2

이 mongoid 정상 보인다.

연결 풀링 때문일 수도 있습니다. 일부 MongoDB 드라이버는 동시 요청을 가능하게하기 위해 연결 풀링을 사용합니다. 그 here

에 대한 몇 가지 정보를, 잘 모르겠어요하지만 코드를 보지 않고있다

, 그것은 당신이 당신의 쿼리를 설정 한 방법이 될 수 있습니다.

드라이버는 연결 풀링을 구현합니다

은 루비 드라이버의 문서에서 살펴 수 있습니다. 기본적으로 하나의 소켓 연결 만 MongoDB에 열립니다. 그러나 다중 스레드 응용 프로그램을 실행하는 경우 풀에 이전 연결을 기다리는 최대 풀 크기 및 최대 시간 제한을 지정할 수 있습니다.

@conn = Connection.new ("localhost"를, 27017, : pool_size => 5 : 타임 아웃 => 5) 풀링 아키텍처 비록

는 하나의 MongoDB의 인스턴스 풀링 된 연결을 설정하려면 의심의 여지없이 진화 할 것이고, ActiveRecord와 PyMongo의 연결 풀링 구현에 많은 기여를하고 있습니다.

기본적으로 하나의 연결 만 열어야합니다. mongoid가 성능 향상을 위해 설정을 변경하는지 여부는 알 수 없습니다. 어쩌면 우리 코드 중 일부를 살펴볼 수 있을까요? 희망이 정보는 도움이됩니다.

관련 문제