sortarage
@sortarage
Я тучка-тучка-тучка, я вовсе не медведь

Как правильно работать с выборкой из Mongodb во избежание лишних обращений к базе?

Доброе утро.

Ситуация: я получаю из Mongodb ряд записей по нужным мне параметрам, например:

tasks_query = task_base.find({
    "$and": [{
        "order_id": x
    }, {
        "site": y
    }, {
        "category": z
    }]
})

Затем мне нужно несколько тысяч раз циклками пройтись по этим данным в цикле, делая выборку из Cursor по определенному параметру, образно:

for task in task_query:
    if task['order_id'] = 234:
        return task['category']


Суть: я не хочу делать несколько тысяч обращений в базу, а хочу получить одну большую выборку в память, а потом уже делать итерации по ней. Но:
  • Если я превращу выборку из базы в список словарей, мне придется каждый раз проверять всю выборку for циклами, чтобы найти нужное, что очень долго и ресурсоемко
  • При превращении в словарь будет +- то же самое, ибо индексы в разных выборках разные.

Вопрос: если я просто сохраню полученный Mongo Cursor в переменную, то смогу ли я делать выборку из него через find() как из обычной базы, без необходимости каждый раз обращаться в базу?

Если есть какое-то другое решение (например, другая струткура данных, поддерживающая индексы) или я упустил что-то важное, буду благодарен за любой совет :)
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
  • p00h
    @p00h
    Фехтовальщик-стропальщик
    Монго невероятно быстра на чтение. Пусть именно она занимается поиском и сортировкой, а не python; именно для этого она и предназначена. Не бойтесь грузить ее запросами.
    В конце концов сделайте очень простой тест. Потратьте время и опишите необходимый функционал в обоих вариантах: монга и питон. Измерьте время работы. И все встанет на свои места.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 1
  • @lega
    Затем мне нужно несколько тысяч раз циклками пройтись...
    Нет смысла, т.к. в результате будет только один order_id.

    При превращении в словарь будет +- то же самое
    Один словарь - один индекс, если нужно несколько индексов - делайте несколько словарей. Это самое быстрое - O(1), если все в память влазит. Для этого и монга особа не нужна.

    Но я не думаю что у вас это критично по скорости, поэтому лучше не парится и испльзовать монгу как есть, она достаточно быстра.
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
YLab Тольятти
от 60 000 до 120 000 руб.
BestDoctor Москва
от 140 000 до 180 000 руб.