Я уже несколько лет использую MongoDB под механизмом хранения MMAPv1, но теперь мне нужно перейти на WiredTiger. (В основном, чтобы я мог использовать потоки событий, но также потому, что mmapv1 был устарел).
В моем приложении для каждого покупателя используется несколько коллекций, что означает МНОГО коллекций. Из-за ограничений файлов пространства имен MMAPv1 они разделены на несколько баз данных. Шардинг не нужен, потому что, хотя коллекций много, они невелики. В принципе, это работает нормально и стабильно.
Однако, переключившись на WiredTiger в моей среде разработки (это Mac OS), я заметил, что WiredTiger не только использует отдельный файл для каждой коллекции и каждого индекса, но и запускает mongod
Я вижу, что ВСЕ ФАЙЛЫ ОТКРЫТЫ до того, как будут доступны какие-либо коллекции.
По моим оценкам, при переносе моей производственной среды (CentOS 7) на использование wiredTiger у меня может получиться около миллиона файлов, и их количество будет расти.
Мне известно о проблеме ulimit, и я прочитал документация. В совете сказано, что рекомендуемые ulimit - 64000. Меня беспокоит, что это намного ниже того, что я получу в итоге.
Итак, мои вопросы ...
Это нормально, что ВСЕ файлы открываются сразу? или это похоже на то, что я что-то делаю не так?
Это проблема только Mac? (Я еще не тестировал миграцию на Linux)
Если я установлю смехотворно высокий ulimit
, повлияет ли это на сервер каким-либо негативным образом?
Как правило, mongodb использует пул подключений. Вы можете ограничить количество входящих подключений с помощью параметра времени выполнения net.maxIncomingConnections. Ограничивая количество входящих подключений, вы можете предотвратить каскадный эффект, когда mongos создает слишком много подключений к экземплярам mongod.
Относительно ваших вопросов мои ответы в строке:
Это нормально, что ВСЕ файлы открываются сразу? или это похоже на то, что я что-то делаю не так? Мой ответ: это не неправильный процесс создания постоянных соединений (пул), поскольку создание соединения является более затратной операцией.
Это проблема только Mac? (Я еще не тестировал миграцию в Linux): Мой ответ: он будет работать таким же образом, только изменения будут ограничениями для каждой среды.
Если я установлю смехотворно высокий ulimit, повлияет ли это на сервер каким-либо негативным образом? Мой ответ: после изменения лимита это обязательно повлияет на потребление ресурсов системы, попробуйте получить количество соединений, требуемых вашим приложением с открытыми потоками, и соответствующим образом настройте параметры.
Надеюсь, что приведенные выше ответы помогут вам.