Я работаю над портированием базы данных в MongoDB и столкнулся с некоторыми проблемами с ограничением размера документа.Как смоделировать очень-очень-очень много отношений в MongoDB
Мое понимание состоит в том, что если вы собираетесь всегда рассматривать одно сущность в контексте другого объекта, это вложение - путь.
Однако данные (геномные) имеет так много объектов каждого типа, что даже просто хранить поле _id во встроенном документе ставит меня предельный размер 16 Мб:
Genome
{
...
has_reactions:[id1, id2, ... idn] // Where n is really large
}
Я также попытался моделирования по-другому, но ударил же ограничение:
Reaction
{
...
in_genomes:[id1, id2, ... idn] // Still really large
}
MongoDB documentation дает большие примеры для один-к-одному и один-ко-многим отношениям, но не имеет много говорить о многочастичных слишком много.
В традиционном SQL я бы моделировал это с помощью Genome
, Reaction
и GenomeReaction
набора таблиц. Это единственный способ пойти сюда?
Edit:
Что касается фона, реакция является метаболической реакцией, хотя это действительно не имеет значения, что геном и реакции означают в этом контексте. Это может быть также связь между типами прокладок в каждом из моих виджетов. Это стандартное отношение «многие ко многим», где оба экземпляра «много» могут быть очень большим числом.
Я знаю, что Mongo не разрешает соединения, но это легко решить с использованием нескольких запросов, что является рекомендуемым способом обработки document references in Mongo.
Мы не выбрали Mongo в качестве решения, мы просто оцениваем его как возможное решение. Это выглядело привлекательно, потому что оно объявлено как способное обрабатывать «наборы данных huMONGOus», поэтому я был немного удивлен этим ограничением.
Во всех наших других случаях использования Mongo хорошо работает. Именно эти отношения я не могу передать из mysql в mongo без использования наборов коллекций Genome
, Reaction
и GenomeReaction
. Я легко могу это сделать, но я надеялся, что с ним будет работать более mongoy.
Возможно, монго не справляется со многими отношениями ко многим, что объясняет его заметное отсутствие из списка data model scenarios в его документах.
Трудно сказать без какого-либо фона. Что вы подразумеваете под действием реакции? О каких геномах мы говорим? Один из способов решения проблемы (возможно, не самый лучший) заключается в том, чтобы имитировать таблицу соединений, используя отдельный сбор. Другим было бы логически разделить реакцию на ведра (например, с использованием терминов GO) и заменить коллекцию генома-генома коллекции геномов. Другой будет создавать дополнительные документы для реакции или генома, когда вы приближаетесь к пределу. Если вы сопоставляете реакции с генами, вы можете разделить коллекции геномов на основе хромосомы, плазмиды, BP-диапазона. – zero323
Вы используете чехол, возможно, не подходит для MongoDB. Вы рассматривали графическую базу данных, такую как Neo4j? – Philipp
Если вы захотите сделать Joins на таблицах отношений, хотя ... вам не повезло с MongoDB. Учитывая количество «многих ко многим», о которых вы говорите, я немного скептически отношусь к тому, что MongoDB будет хорошо подходить. Почему вы выбрали MongoDb для своего проекта? – WiredPrairie