2016-05-24 2 views
3

Я отлаживаю медленную конечную точку API в веб-приложении, которое использует mongodb в качестве хранилища. Оказывается, запрос отправляет 8 разных запросов в MongoDB и объединяет данные для возврата. MongoDB живет на другом хосте, поэтому запрос включает 8 обращений.Есть ли эквивалент команды команды redis в MongoDB?

Эти 8 запросов не имеют никакой зависимости между собой, поэтому, если я могу отправить 8 запросов в пакете или параллельно, можно сохранить много времени.

Мне интересно, поддерживает ли Mongo что-то вроде конвейера Редиса или может отправить сценарий (например, сценарий lua в Redis) для извлечения данных, чтобы я мог получить все данные за один раз?

Если нет, есть ли способ отправить запросы параллельно? (Приложение основано на python/tornado/pymongo)

ответ

0

AFAIK, в MongoDB отсутствует трубопроводный механизм.

Я бы попытался использовать server-side scripts.

+0

Выражения db.eval устарели ... – NeoWang

+1

«Структура агрегации MongoDB смоделирована по концепции трубопроводов обработки данных. Документы вводятся в многоэтапный конвейер, который преобразует документы в агрегированный результат». [docs] (https://docs.mongodb.com/manual/aggregation/#aggregation-pipeline) –

+1

@SteveRossiter В Redis конвейеры могут обрабатывать несколько команд в одном запросе. На MongoDB конвейеры предназначены только для получения данных. – warvariuc

1

Существует множество опций для такого рода вещей в mongodb, к которым можно обратиться по адресу python driver pymonogo.

Лучший способ (ИМХО) - это aggregation framework, который позволяет строить трубопровод. Однако некоторые функции ограничены версией mongodb, и есть ли у вас осколочные кластеры.

Другие варианты включают map-reduce или simple operators.

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