Использование Mongodb и mapreduce для создания списка с подпунктами - PullRequest
2 голосов
/ 25 марта 2012

Игра с сохранением некоторых данных журнала в MongoDB.Теперь мне нужно получить список типов журналов, которые на самом деле хранятся в коллекции.

У меня есть такие документы: (представьте, что это могут быть тысячи из каждой и более групп и подгрупп)

{
  "Group": "Import",
  "SubGroup": "Update server"
},{
  "Group": "Import",
  "SubGroup": "Delete server"
}

Я хочу в конечном итоге что-то вроде:

{
  "Group": "Import",
  "SubGroups": ["Delete server", "Update server"]
}

Но так как может быть больше каждой подгруппы, и я хочу, чтобы любые дубликаты ... есть ли в javascript что-то вроде набора HashKey.... здесь не очень много специалиста по js.

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

В качестве сторонывопрос.Поскольку Mapreduce и тип вывода могут быть встроенными, заменить и уменьшить.Есть ли какой-нибудь простой способ, встроенный в MongoDB, так что я могу сказать, чтобы он обновлял MapReduce только каждые x минут, поскольку он на самом деле очень статичен, или это то, что я должен реализовать в качестве кэша на своем собственном прикладном уровне?

1 Ответ

1 голос
/ 26 марта 2012

... имеет ли javascript что-то вроде набора HashKey

Так что все в javascript является хеш-таблицей.Сохраните свои результаты, как это, и вы получите ваш хеш с той же семантикой:

{
  "Group": "Import",
  "SubGroups": { "Delete server": 1, "Update server": 1 }
}

Поскольку Mapreduce и тип вывода могут быть встроенными, заменить и уменьшить.

Мой личный совет - избегать inline.Если вы собираетесь приложить все усилия для запуска Map / Reduce, вы также можете сохранить результаты.

В результате вы получите replace, reduce и merge (варианты перечислены здесь ).

это на самом деле очень статично или это то, что я должен реализовать в качестве кэша на своем собственном прикладном уровне?

ВыводMap / Reduce - это просто коллекция.Эта коллекция имеет определенный формат (_id, value), но, как и любая другая, это запрашиваемая коллекция.

Если вы хотите перезаписывать сводные данные каждые 10 минут, вы можете сделать это.Однако это будет означать, что вы должны запустить Map / Reduce для всех данных.Это может представлять огромный объем работы в системе ведения журналов.

Вместо этого вы, вероятно, захотите выполнить M / R только для новых частей данных, а затем «повторно сократить» по сравнению с вашими существующими сводными данными.Это будет быстрее всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...