2013-07-22 3 views
0

Я создаю приложение, которое использует MongoDB в качестве базы данных. У меня много продуктов, и я хочу регистрировать, какие продукты пользователь смотрит на запись в базу данных пользователя. Например, профиль пользователя выглядит так:MongoDB - Сколько данных слишком много данных?

{ 
    "email" : "[email protected]", 
    "name" : "John Snow", 
    "_id" : ObjectId("51ecbcc6896652a008000001"), 
    "productsViewed" : [ 
      product1, 
      product2, 
      product3, 
      product4 
    ] 
} 

У меня есть два варианта. Я могу записать только _id каждого продукта, или я мог бы записывать целые объекты, представляющие продукт (имя, цена, ~ 100 описание слов, категории, что-то типа). Разница в размере объекта - 1 строка текста на продукт примерно на 30 строк на продукт.

Я понимаю, что это, вероятно, тривиальное количество данных, о которых нужно беспокоиться, но если у пользователя есть 10 000 productsViewed записей, будет ли разница в 30 раз больше? Запуск большего количества данных гораздо полезнее для моих целей, но я бы хотел, чтобы мои запросы на базы данных отставали, если профиль пользователя становится довольно большим.

Вопрос: В какой точке (в длину символов, я думаю?) Слишком много данных для хранения с одной записью MongoDB?

ответ

2

16 Meg - ограничение для всего документа. Это означает, что все строки и т. Д. Должны соответствовать 16 мегабайтам. Тем не менее, до этого на вашей схеме больше ограничений, чем вы, сами намекните на:

, но если у пользователя есть 10 000 продуктовПросмотрел записи, будет ли разница в 30 раз больше, чем любая разница?

И да. Во-первых, с добавленными данными пользователя root вы, вероятно, будете превышать 16-мегабитный лимит, однако от этого в памяти $pull, $push и другим операторам вспомогательных документов может быть трудно сохранить производительность. Вы можете смягчить эту проблему, объединив свои поддокументы в группы по 100.

Однако, опять же, у вас есть еще большая проблема: фрагментация. Поскольку MongoDB хранит запись в одном компактном пространстве на диске, следовательно, он имеет такие настройки, как дополнение, вы можете видеть значительную фрагментацию от объектов записи нечетного размера, которые здесь не используются повторно.

Я бы сказал, что вы должны отнести это отношение к отдельной коллекции.

+0

Интересно. Можете ли вы объяснить, что вы подразумеваете под «всем документом»? Я знаю, какие базы данных, коллекции и записи относятся к «MongoDB», но не уверены, что означает «документ». – Jascination

+0

@ Признание в этом случае документа = записи и объекта записи = внутреннее репрезентация записи MongoDBs – Sammaye

Смежные вопросы