Я использую MongoDB с примерно 4 миллионами документов и размером базы 5-6 ГБ. Аппарат имеет 10 ГБ оперативной памяти, и бесплатно доступны только около 3,7 ГБ. База данных используется для веб-сайта, ориентированного на видеоигры (рейтинг), разделенного по региону.MongoDB High Avg. Flush Time - Write Heavy
Это довольно тяжелая операция записи, но по-прежнему получает значительное количество сообщений. Мы используем программу обновления, которая запрашивает внешний источник каждый час или два. Затем этот модуль обновления обрабатывает документы и обновляет документы в базе данных. Обновитель обрабатывает только один регион за раз (см. Предыдущий параграф), поэтому обновляется примерно 33% базы данных.
Когда программа обновления работает и в течение всего времени ее запуска, среднее время промывки увеличивается примерно до 35-40 секунд, и мы наблюдаем общее замедление с другими запросами. Обновитель является RAN на SEPARATE MACHINE и только запрашивает MongoDB в конце, когда все данные были получены и обработаны от третьего лица.
Некоторые люди предложили замедлить количество обновлений или только обновить игроков, которые изменились, но проблема сводится к ранжированию. Поскольку мы поддерживаем связи между игроками, нам нужно предварительно вычислить ряды - так что, если только несколько пользователей действительно изменили ряды, нам все равно необходимо обновить остальные ранжирования пользователей соответственно. По крайней мере, так было с MySQL - я не уверен, есть ли хорошее решение с MongoDB для ранжирования ~ 800K-> 1,2 миллиона документов при поддержке связей.
Мой вопрос: как мы можем улучшить флеш и замедление, которые мы испытываем? Почему это так высоко? Отключить ведение журнала (чтобы взять некоторую нагрузку с помощью ввода-вывода), поскольку потеря данных не является чем-то, что меня беспокоит, поскольку база данных часто обновляется независимо?
Статус сервера: http://pastebin.com/w1ETfPWs
http://docs.mongodb.org/manual/reference/command/serverStatus/ – Hariharan
Я добавил ссылку на статус сервера. –
Отключение журнала поможет в некоторой степени, когда сервер очень занят. Но это будет не очень эффективно. MongoDB по умолчанию очищает все грязные страницы каждые 60 секунд и когда обновляется 33% данных, что означает, что все страницы (~ ГБ страниц) загрязнены, поэтому я не думаю, что 35-40 секунд - очень большое число. На мой взгляд, логику проектирования нужно учитывать, так как вышеуказанный метод не будет масштабироваться. –