Как мне смоделировать родословную лошадей в MongoDB?

Я пытаюсь смоделировать родословную лошадей в mongodb.

введите здесь описание изображения

Я провел некоторое исследование в Интернете и обнаружил несколько потенциальных подходов:

  1. Массив предков
  2. график
  3. простые отношения {_id: "Cigar", sire: "Palace Music", dam: "Solar Slew", Sire's Sire: ...}
  4. Древовидная структура с вложенными наборами

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

Мои варианты использования следующие:

  • Презентация: я хочу отобразить или предоставить пользователю возможность отображать родословную лошади каждый раз, когда пользователь запрашивает конкретную лошадь.
  • Traverse/Query: возможность легко просматривать или запрашивать родословную (по происхождению), чтобы вернуть конкретную лошадь в родословной (т.е. вернуть всех кобыл-производителей с одним потомком с более чем 5 победами на газоне)
  • Производительность. Крайне важно, чтобы родословные запросы были очень производительными.
  • Рейтинги: используйте данные о родословных в сочетании с результатами гонок для создания рейтингов родословных.strong text
  • Анализ: я хочу провести анализ родословных лошадей относительно победы и, возможно, попытаться ответить на такие вопросы, как:

    • Is a horse with Northern Dancer as his great grand sire more likely to win its first turf race.
    • Каковы 10 лучших производителей (матери, великие производители или великие матери) для производства победителей на уступчивом газоне.

Дополнительная информация: я планирую разрабатывать это приложение на стеке MEAN.

Спасибо за ваш вклад.


person user365853    schedule 03.01.2014    source источник
comment
Производительность — это сложный момент. Удачи.   -  person johnnycardy    schedule 04.01.2014
comment
Почему так? Слишком много данных?   -  person user365853    schedule 04.01.2014
comment
Нет, просто когда я начинаю думать о запросе этой структуры, это ужасный запрос, поэтому я думаю, что это потребует некоторых усилий.   -  person johnnycardy    schedule 04.01.2014


Ответы (1)


Данные, которые у вас есть, очень четко представляют собой двоичную древовидную структуру. Каждая лошадь является узлом в дереве с двумя дочерними узлами, представляющими родителей лошади (ирония!)

Учебное пособие: древовидные структуры моделей в MongoDB. Вы можете вставить каждую лошадь (начиная дальше всего по цепочке предков) со списком идентификаторов «детей» лошади (которые являются матерью и отцом лошади).

Я признаю, что я недостаточно знаком с MongoDB, чтобы дать вам конкретный код для ваших запросов к БД, но, поскольку Mongo поддерживает иерархическое хранение данных, дерево не должно создавать никаких проблем.

person Brian S    schedule 03.01.2014
comment
Спасибо за ответ. Я столкнулся с этим в своем исследовании. Меня беспокоило то, что я не различал производителей и маток, а только родителей. Я думал, что при таком подходе будет рискованно пересекать дерево, чтобы добраться до определенного предка, но я могу ошибаться. Спасибо еще раз. - person user365853; 04.01.2014
comment
@ user365853, Сохранения пола лошади должно быть достаточно, чтобы различать отца и мать. В качестве альтернативы вы можете явно сохранить отца и мать, а не хранить их вместе в списке. Например: {id: "Nearco", sire: null, dam: null}, {id: "Lady Angela", sire: null, dam: null}, {id: "Noarctic", sire: "Nearco", dam: "Lady Angela"} - person Brian S; 04.01.2014