Понимание ограничения размера документа MongoDB BSON
От MongoDB Окончательное Руководство:
документы размером более 4 МБ (при преобразовании в BSON) не могут быть
сохранено в базе данных. Это несколько произвольный предел (и может быть
поднятый в будущем); это в основном для предотвращения плохого дизайна схемы и обеспечения
последовательная работа.
Я не понимаю этот предел, означает ли это, что документ, содержащий сообщение в блоге с большим количеством комментариев, которые просто так оказываются больше 4 МБ, не может храниться как единый документ?
также это подсчитывает вложенные документы тоже?
Что делать, если мне нужен документ, который проверяет изменения значения. (Он в конечном итоге может вырасти, превысив предел 4 МБ.)
надеюсь, кто-то объясняет это правильно.
Я только начал читать о MongoDB (первая база данных nosql, о которой я узнаю).
спасибо.
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