2014-11-05 7 views
1

Я использую pymongo, чтобы вставить большое количество jsons в MongoDBgridFS + некоторые данные в коллекцию. То, что я заметил некоторое время назад, это то, что MongoDB потребляет просто сумасшедшее количество оперативной памяти в одном соединении. Как только я закрываю это соединение, он освобождает его. Объем оперативной памяти примерно 10-12 ГБ в комплекте и 200 МБ. Фактический размер коллекции фактически составляет ~ 300 МБ с хранилищем 10-18 ГБ gridFS.MongoDB Расход RAM на соединениях

Почему это происходит? Как открыть новое соединение для любой громоздкой операции может быть намного меньше ресурса, чем использование одного единственного соединения для всего? Это как-то связано с журналом?

ответ

2

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

  1. Хорошо известно, что MongoDB является RAM голодный, он будет пытаться использовать столько оперативной памяти, насколько это возможно.
  2. GridFS имеет тенденцию хранить файлы в коллекции fs.chunks и соответствующие метаданные в fs.files. Файлы, хранящиеся в GridFS, разбиваются на куски по 256 КБ каждый.

Когда вы читаете данные GridFS, открыв соединение, куски, принадлежащие файлу (-ам), должны быть загружены в ОЗУ с диска (если он еще не присутствует в ОЗУ). Таким образом, использование ОЗУ прямо пропорционально количеству хранимых данных и, самое главное, частоте доступа к данным GridFS. Просто для повторной итерации данные GridFS попадают в ОЗУ, если запрос ссылается на него.

Если у вас есть активное соединение для большого количества данных GridFS, вам следует ожидать интенсивного использования ОЗУ. Но если частота запросов низкая (просто пишите, но читайте редко), то использование ОЗУ будет относительно низким. Если вы в основном записываете данные, тогда убедитесь, что соединение закрыто после выполненной операции.

  1. Чем больше количество открытых подключений, тем больше объем использования вашей ОЗУ.
  2. Это не связано с ведением журнала.

Примечание: GridFS также поддерживает шардинг, который будет стремиться, чтобы решить вашу проблему чрезмерного использования памяти.

Надеюсь, это уточнит.

+0

Я только пишу tho. Кроме того, данные, которые я вставляю, блокируются и после считывания корректно закрывают файл. – dimon222

+0

Ответ обновлен, sharding должен решить вашу проблему. – vmr

Смежные вопросы