Много курсоров Drop / Close и запрос к 'system.namespaces' с помощью mongoid - PullRequest
0 голосов
/ 23 ноября 2011

Интересно, нормально ли это, когда несколько курсоров закрываются и несколько запросов к ['system.namespaces]] на запрос страницы с помощью mongoid?

Пример того, что я получаю:

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 и MongoDB2.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

1 Ответ

2 голосов
/ 23 ноября 2011

Это выглядит нормально для mongoid.

Это также может быть связано с пулом соединений.Некоторые драйверы MongoDB используют пул соединений для обеспечения возможности одновременных запросов.

Есть некоторая информация об этом здесь

Хотя я не вижу ваш код, я не уверен, это может быть способ, которым вы настроили свои запросы.

Давайте посмотрим на документы для драйвера ruby:

Драйвер реализует пул соединений.По умолчанию только одно сокетное соединение будет открыто для MongoDB.Однако, если вы работаете в многопоточном приложении, вы можете указать максимальный размер пула и максимальное время ожидания для ожидания выхода старых соединений в пул.

Чтобы установить пул соединения содин экземпляр MongoDB:

@ conn = Connection.new ("localhost", 27017,: pool_size => 5,: timeout => 5) Хотя архитектура пула, несомненно, будет развиваться, в настоящее время она многим обязанаРеализации пула соединений в ActiveRecord и PyMongo.

Хорошо, поэтому по умолчанию должно быть открыто только одно соединение.Я не знаю, меняет ли mongoid этот параметр, чтобы повысить производительность.Может быть, мы могли бы взглянуть на некоторые из вашего кода?Надеюсь, эта информация поможет.

...