Как Trello хранит данные в MongoDB? (Сбор на доску?)

Как Trello хранит свои данные (карты) в MongoDB?

Я прочитал (Как Trello так быстро показывает историю?), что их Коллекция действий - самая большая. Таким образом, я предполагаю, что они не хранят все карты в одной гигантской коллекции.

Единственное другое логическое решение - это набор для каждой доски или для каждого пользователя. Но у них много пользователей, и я читаю (http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections), что существует ограничение на количество коллекций, и некоторые люди не рекомендуют использовать большое количество коллекций.

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


person Ben    schedule 19.10.2012    source источник
comment
Почему бы им не хранить все это в одной коллекции и не разделять то, что они запрашивают, таким образом, вы будете эффективно запрашивать только один компьютер за раз, делая запрос почти таким же быстрым, как небольшая коллекция, добавив сверху, что они, вероятно, пингуют данные на другой регионов, чтобы время отклика было согласованным, и вскоре вы получили полностью масштабируемую коллекцию из миллиардов строк. Вы также должны помнить, что блокировка - это уровень базы данных, поэтому, если они собираются использовать несколько элементов, это заставит snese использовать несколько баз данных, если вообще.   -  person Sammaye    schedule 19.10.2012
comment
@Sammaye Я не понимаю осколка того, что они запрашивают. Вы можете просматривать все карты на доске, искать по всем доскам по имени карты, ... Я понимаю основной принцип шардинга, но я не понимаю, как можно выполнить то, что вы говорите. Не могли бы вы объяснить это поподробнее.   -  person Ben    schedule 19.10.2012
comment
Хорошо, я использую trello всего 10 минут и уже вижу, что если бы я проектировал этот сайт, у меня было бы три коллекции: user, board, card. Я бы разделил board_id на board, поскольку доска должна быть доступна для многих пользователей. Таким образом, когда вы запрашиваете пользователя (который сегментирован на {_id,username,email}), а затем получаете все его доски, которые будут масштабироваться. Списки доски будут встроены в ряд досок, но не карточки. Карты, вероятно, будут разделены на board_id и timestamp и, возможно, также на user_id. Это мой первый 10-минутный взгляд   -  person Sammaye    schedule 19.10.2012
comment
Для поиска они, вероятно, не используют MongoDB, я сам для видео-сайта использую Sphinx, так как MongoDB не впечатляет, а хранение и эффективность индексов FTS. При этом для локализованного поиска по одному списку или доске они могут использовать идеи, описанные здесь: mongodb.org/display/DOCS/Full+Text+Search+in+Mongo   -  person Sammaye    schedule 19.10.2012
comment
@Sammaye В Trello у каждого пользователя есть роль (разрешение) на доске. Не могли бы вы сохранить встраивание участия {board_id, role} для каждого пользователя? Таким образом, получить все доски пользователя будет легко, но если вы хотите получить всех пользователей доски, вам нужно будет запросить коллекцию пользователя, чтобы узнать, участвуют ли они с этим идентификатором доски. Или вы бы также вели список user_ids на каждой доске? Я вижу много возможностей, но какая из них лучше?   -  person Ibraheem Ahmed    schedule 04.07.2020


Ответы (1)


Trello хранит все карточки в одной коллекции. Коллекция сегментирована по идентификатору платы карты.

person Daniel LeCheminant    schedule 19.10.2012
comment
Вы знаете, в какой момент потребуется сегментирование? Я относительно новичок в MongoDB и делаю приложение, которое может нуждаться в масштабировании. - person MadPhysicist; 27.06.2016