Понимание ограничения размера документа MongoDB BSON



От MongoDB Окончательное Руководство:




документы размером более 4 МБ (при преобразовании в BSON) не могут быть
сохранено в базе данных. Это несколько произвольный предел (и может быть
поднятый в будущем); это в основном для предотвращения плохого дизайна схемы и обеспечения
последовательная работа.




Я не понимаю этот предел, означает ли это, что документ, содержащий сообщение в блоге с большим количеством комментариев, которые просто так оказываются больше 4 МБ, не может храниться как единый документ?



также это подсчитывает вложенные документы тоже?



Что делать, если мне нужен документ, который проверяет изменения значения. (Он в конечном итоге может вырасти, превысив предел 4 МБ.)



надеюсь, кто-то объясняет это правильно.



Я только начал читать о MongoDB (первая база данных nosql, о которой я узнаю).



спасибо.

1053   6  

6 ответов:

во-первых, это на самом деле воспитывается в следующей версии 8MB или 16MB ... но я думаю, чтобы поставить это в перспективе, Элиот из 10gen (который разработал MongoDB) ставит его лучше всего:

EDIT:размер официально "довела" до 16MB

Итак, на вашем примере блога, 4 МБ на самом деле очень много.. Например, полный распаковывает текст "войны миры " - это всего лишь 364k (html): http://www.gutenberg.org/etext/36

если ваш блог так долго с что много комментариев, я не собираюсь прочитать его:)

для трекбэков, если вы выделили 1 МБ с ними, вы могли бы легко иметь больше чем 10k (вероятно, ближе к 20k)

так что, за исключением очень странных ситуации, это будет работать отлично. И в случай исключения или спама, я действительно не думаю, что вы хотели бы 20 Мб объект в любом случае. Я думаю, что укупорка трекбэки как 15k или так имеет много смысла нет неважно, что за спектакль. Или по адресу наименее специальный корпус, если он когда-либо происходит.

-Элиот

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

основной момент ограничения заключается в том, что вы не используете всю оперативную память на своем сервере (так как вам нужно загрузить все MBs документа в ОЗУ, когда вы спросите его.)

таким образом, предел составляет несколько % от нормальной полезной оперативной памяти в общей системе ... которая будет расти из года в год.

примечание по хранению файлов в MongoDB

Если вам нужно хранить документы (или файлы) больше, чем 16MB можно использовать GridFS API который будет автоматически разбивать данные на сегменты и передавать их обратно к вам (таким образом, избегая проблемы с ограничениями размера/ОЗУ.)

вместо того, чтобы хранить файл в одном документе, GridFS делит файл на части или куски и сохраняет каждый кусок как отдельный документ.

GridFS использует две коллекции для хранения файлов. В одной коллекции хранятся фрагменты файлов, а в другой-метаданные файлов.

вы можете использовать этот метод, чтобы хранить изображения, файлы, видео и т. д. В базе данных много, как вы можете в базе данных SQL. Я использовал это даже для хранения многогигабайтных видеофайлов.

многие в сообществе предпочли бы без ограничений с предупреждениями о производительности, см. Этот комментарий для хорошо аргументированного аргумента: https://jira.mongodb.org/browse/SERVER-431?focusedCommentId=22283&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-22283

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

чтобы опубликовать ответ на уточнение здесь для тех, кто направляется сюда Google.

размер документа включает в себя документ, в том числе документах, вложенных объектов и т. д.

Итак, документ:

{
    _id:{},
    na: [1,2,3],
    naa: [
        {w:1,v:2,b:[1,2,3]},
        {w:5,b:2,h:[{d:5,g:7},{}]}
    ]
}

имеет максимальный размер 16meg.

Sbudocuments и вложенные объекты все подсчитываются к размеру документа.

вложенная глубина для документов BSON: MongoDB поддерживает не более 100 уровней вложенности для документов BSON.

более подробнее вист

Я еще не видел проблемы с лимитом, который не включал большие файлы, хранящиеся в самом документе. Уже существуют различные базы данных, которые очень эффективны при хранении / извлечении больших файлов; они называются операционными системами. База данных существует как слой над операционной системой. Если вы используете решение NoSQL по соображениям производительности, зачем вам добавлять дополнительные затраты на обработку для доступа к вашим данным, помещая уровень БД между ваше приложение и ваши данные?

JSON-это текстовый формат. Таким образом, если вы получаете доступ к своим данным через JSON, это особенно верно, если у вас есть двоичные файлы, потому что они должны быть закодированы в uuencode, шестнадцатеричном или базовом 64. Путь преобразования может выглядеть как

двоичный файл в формате JSON (закодированных) БСЫНА (закодированных)

было бы более эффективно поместить путь (URL) к файлу данных в вашем документе и сохранить сами данные в двоичном формате.

Если вы действительно хотите сохранить эти файлы неизвестной длины в своей БД, тогда вам, вероятно, будет лучше поместить их в GridFS и не рисковать убить ваш параллелизм при доступе к большим файлам.

возможно хранение сообщения в блоге - > комментарии отношения в нереляционной базе данных на самом деле не самый лучший дизайн.

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

[edit]

см. комментарии ниже для дальнейшего обсуждения.

Comments

    Ничего не найдено.