Подтвердить что ты не робот

Mongodb: несколько коллекций или одна большая коллекция с индексом

Мне нужна помощь в моделировании моих данных в монго. Большинство моих опытов было в реляционных БД, я только начинаю w/mongo. Я моделирую данные для разных событий.

  1. Каждое "событие" имеет одинаковые поля.
  2. Каждое "событие" будет содержать от сотен до миллионов документов/строк
  3. События динамичны, т.е. При необходимости создаются новые. т.е., возможно, создать новое мероприятие "Летние Олимпийские игры 2016".

Вероятно, самое главное, при работе с событиями (CRUD-операции) пользователям нужно будет указать имя события.

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

1) Коллекция "событий", в которой есть данные для всех событий. Указатель на имя "event". Запрос будет выглядеть примерно так:

db.events.find({event: 'Summer Olympics 2012');
{event: 'Summer Olympics 2012', attributes: [{name: 'joe smith', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'jane doe', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'john avery', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'ted williams', .... }

db.events.find({event: 'Summer Olympics 2013'})
{event: 'Summer Olympics 2013', attributes: [{name: 'steve smith', .... }
{event: 'Summer Olympics 2013', attributes: [{name: 'amy jones', .... }

2) Коллекция для каждого нового события, которое идет вместе, с коллекцией для отслеживания всех имен событий. Индекс имени события не требуется, поскольку каждое событие хранится в другой коллекции.

// multiple collections, create new as needed
db.summer2012.find() // get summer 2012 docs

db.summer2016.find() // get summer 2016 docs

//'events' collection
db.events.find() // get all events that I would have collections for
{name: 'summer2012', title: 'Summer Olympics 2012'};
{name: 'summer2016', title: 'Summer Olympics 2016'};

Для # 1 я немного обеспокоен тем, что как только я достиг 100 событий, каждый из которых имеет миллионы записей, поиск в "событии" будет медленным, даже если в одном из событий есть только 500 документов.

Для № 2 я "обкрадываю" модель монго здесь, создавая новую коллекцию каждый раз, и происходит событие?

Любые комментарии/идеи приветствуются, поскольку я действительно не знаю, какой из них будет в конечном итоге работать лучше, или если тот или другой заставит меня больше беспокоиться по дороге. Я огляделся (с сайтом mongo), и я действительно не могу найти конкретного ответа.

4b9b3361

Ответ 1

Из mongo docs здесь: моделирование данных

В некоторых ситуациях вы можете хранить информацию в несколько коллекций, а не в одной коллекции.

Рассмотрим примеры журналов коллекции, в которых хранятся документы журнала для различные среды и приложения. Коллекция журналов содержит документы следующего вида:

{log: "dev", ts:..., info:...} {log: "debug", ts:..., info:...}

Если общее количество документов невелико, вы можете группировать документы в коллекция по типу. Для журналов рассмотрим возможность сохранения отдельного журнала коллекций, таких как logs.dev и logs.debug. Коллекция logs.dev будет содержать только документы, связанные с средой dev.

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

Также говорил w/10gen парень. Для действительно больших коллекций он перечислил несколько преимуществ для разделения на более мелкие более конкретные коллекции. Его комментарий к использованию одной коллекции для всех данных и использования индекса:

Просто потому, что вы можете что-то сделать, это не значит, что вам нужно. Модель ваши данные соответствующим образом. может быть легко хранить в одной большой коллекции и индекс, но это не всегда лучший подход.