Подключение к сегментам отдельно только для чтения, производительность скорости

#mongodb #performance #pymongo

#mongodb #Производительность #pymongo

Вопрос:

Проблема. Мне нужно прочитать документы из Mongodb, 500M документов, он разделен на 10 сегментов.

Моя самая большая проблема — это скорость, прямо сейчас.

Я подключился к каждому сегменту отдельно и прочитал каждый из них как отдельную задачу, предполагая, что моя скорость увеличится в 10 раз.

Это несколько быстрее, но все же недостаточно быстро.

Есть предложения по увеличению скорости?

Примечание: я читаю документ за документом с помощью курсора. Стараюсь не занимать меньше памяти. Прямо сейчас требуется

26 сек для просмотра более 100 тыс. документов, на 1 сегменте 4,5 мин для просмотра более 1 млн документов, на 10 сегментах

Итак, отсюда, похоже, потребуется 37,5 часов, чтобы преодолеть 500 метров.

Кто-нибудь сталкивался с проблемой оптимизации скорости?

Ответ №1:

Вот несколько советов по повышению скорости с некоторыми допущениями

  1. MongoDB — это база данных nosql, которая использует quorum для обеспечения согласованности и надежности. В вашем случае, хотя вы читаете из сегментов отдельно, MongoDB по умолчанию использует кворум 3. (это означает, что чтение будет происходить из 3 реплик, а затем будут предоставлены самые новые / согласованные результаты). Здесь я предполагаю, что ваша среда реплицируется с коэффициентом 3, что делает значение кворума 1 более быстрым, но может быть непоследовательным / старым.
  2. Индексирование обычно используется во всех базах данных для чтения записей (и только обязательных полей) намного быстрее, чем обычное чтение.
  3. Использование твердотельных накопителей вместо вращающихся дисков повысит пропускную способность (хотя может быть неприменимо в текущем случае, но должно быть полезно в будущем)
  4. Версия MongoDB 3.0 использует движок WiredTiger, который утверждал, что он намного быстрее (в 5-7 раз), чем более старая версия.

Другой вариант, который вы можете рассмотреть, если у вас больше денег, — добавить больше сегментов в систему и масштабировать ее по горизонтали

Прежде чем перейти к оптимизации задержки чтения, зачем вам нужно читать все 500M записей в БД? Чтение всех записей из базы данных не имеет смысла в обычных реальных транзакциях oltp.

Комментарии:

1. Спасибо! 3. У меня есть тестовая среда, и разработчик находится на AWS. 4. Mongo 3.2.9. Я считываю данные для выполнения аналитической работы над ними, и они не очень хорошо работают с точки зрения скорости. Я искал способы его оптимизации. В любом случае спасибо. Мне нужно найти решение с использованием pymongo.