#mongodb #performance #pymongo
#mongodb #Производительность #pymongo
Вопрос:
Проблема. Мне нужно прочитать документы из Mongodb, 500M документов, он разделен на 10 сегментов.
Моя самая большая проблема — это скорость, прямо сейчас.
Я подключился к каждому сегменту отдельно и прочитал каждый из них как отдельную задачу, предполагая, что моя скорость увеличится в 10 раз.
Это несколько быстрее, но все же недостаточно быстро.
Есть предложения по увеличению скорости?
Примечание: я читаю документ за документом с помощью курсора. Стараюсь не занимать меньше памяти. Прямо сейчас требуется
26 сек для просмотра более 100 тыс. документов, на 1 сегменте 4,5 мин для просмотра более 1 млн документов, на 10 сегментах
Итак, отсюда, похоже, потребуется 37,5 часов, чтобы преодолеть 500 метров.
Кто-нибудь сталкивался с проблемой оптимизации скорости?
Ответ №1:
Вот несколько советов по повышению скорости с некоторыми допущениями
- MongoDB — это база данных nosql, которая использует quorum для обеспечения согласованности и надежности. В вашем случае, хотя вы читаете из сегментов отдельно, MongoDB по умолчанию использует кворум 3. (это означает, что чтение будет происходить из 3 реплик, а затем будут предоставлены самые новые / согласованные результаты). Здесь я предполагаю, что ваша среда реплицируется с коэффициентом 3, что делает значение кворума 1 более быстрым, но может быть непоследовательным / старым.
- Индексирование обычно используется во всех базах данных для чтения записей (и только обязательных полей) намного быстрее, чем обычное чтение.
- Использование твердотельных накопителей вместо вращающихся дисков повысит пропускную способность (хотя может быть неприменимо в текущем случае, но должно быть полезно в будущем)
- Версия MongoDB 3.0 использует движок WiredTiger, который утверждал, что он намного быстрее (в 5-7 раз), чем более старая версия.
Другой вариант, который вы можете рассмотреть, если у вас больше денег, — добавить больше сегментов в систему и масштабировать ее по горизонтали
Прежде чем перейти к оптимизации задержки чтения, зачем вам нужно читать все 500M записей в БД? Чтение всех записей из базы данных не имеет смысла в обычных реальных транзакциях oltp.
Комментарии:
1. Спасибо! 3. У меня есть тестовая среда, и разработчик находится на AWS. 4. Mongo 3.2.9. Я считываю данные для выполнения аналитической работы над ними, и они не очень хорошо работают с точки зрения скорости. Я искал способы его оптимизации. В любом случае спасибо. Мне нужно найти решение с использованием pymongo.