От MongoDB Полное руководство:
Документы размером более 4 МБ (при преобразовании в BSON) не могут быть сохранены в базе данных. Это несколько произвольный предел (и может быть повышен в будущем); это в основном для предотвращения неправильного проектирования схемы и обеспечения стабильной производительности.
Я не понимаю этого ограничения. Означает ли это, что документ, содержащий сообщение в блоге с большим количеством комментариев размером более 4 МБ, не может быть сохранен как один документ?
Также учитывает ли это вложенные документы?
Что делать, если я хотел документ, который проверяет изменения стоимости. (В конечном итоге он может возрасти, превысив предел 4 МБ.)
Надеюсь, кто-то объясняет это правильно.
Я только начал читать о MongoDB (первая база данных nosql, о которой я узнаю).
Спасибо.
db.isMaster().maxBsonObjectSize/(1024*1024)+' MB'
команды вmongo
оболочке.Ответы:
Во-первых, это на самом деле поднимается в следующей версии
8MB
или16MB
... но я думаю, чтобы представить это в перспективе, Элиот из 10gen (который разработал MongoDB) считает это лучше:РЕДАКТИРОВАТЬ: размер был официально "поднят" до
16MB
Я думаю, что вам будет довольно трудно достичь предела ... и со временем, если вы обновитесь ... вам придется беспокоиться все меньше и меньше.
Суть ограничения заключается в том, что вы не используете всю оперативную память на своем сервере (так как вам нужно загрузить все
MB
документы в оперативную память при запросе).Таким образом, ограничение составляет несколько% от нормальной используемой оперативной памяти в общей системе ... которая будет расти из года в год.
Замечание о хранении файлов в MongoDB
Если вам нужно хранить документы (или файлы) больше, чем
16MB
вы можете использовать GridFS API, который автоматически разбивает данные на сегменты и направляет их обратно вам (таким образом, избегая проблемы с ограничениями размера / оперативной памяти.)Вы можете использовать этот метод для хранения изображений, файлов, видео и т. Д. В базе данных так же, как в базе данных SQL. Я использовал это, чтобы даже хранить мульти гигабайтные видеофайлы.
источник
Многие в сообществе предпочли бы не ограничивать количество предупреждений о производительности, см. Этот комментарий для аргументированного аргумента: https://jira.mongodb.org/browse/SERVER-431?focusedCommentId=22283&page=com.atlassian.jira.plugin. system.issuetabpanels: комментарий-tabpanel # комментарий-22283
На мой взгляд, ведущие разработчики упрямы в этом вопросе, потому что они решили, что это важная «особенность» на раннем этапе. Они не собираются менять это в ближайшее время, потому что их чувства обижены тем, что кто-то подверг сомнению это. Еще один пример того, как личность и политика отвлекают от продукта в сообществах с открытым исходным кодом, но это не является серьезной проблемой.
источник
Чтобы опубликовать разъясняющий ответ здесь для тех, кто направляется сюда от Google.
Размер документа включает в себя все в документе, включая вложенные документы, вложенные объекты и т. Д.
Итак, документ о:
Максимальный размер 16мг.
Вложенные документы и вложенные объекты учитываются по размеру документа.
источник
size_t
(64-битные) индексы массивов внутри, предельный размер документа в 16 МБ, в лучшем случае, сможет представлять документ, содержащий сам один массив, содержащий два миллиона NULL.{"f": 1}
на два байта меньше, чем{"foo": 1}
. Это может быстро сложиться, если вы не будете осторожны, хотя современное сжатие на диске помогает.Я еще не видел проблемы с лимитом, который не затрагивал большие файлы, хранящиеся в самом документе. Уже существует множество баз данных, которые очень эффективны для хранения / извлечения больших файлов; они называются операционными системами. База данных существует как слой над операционной системой. Если вы используете решение NoSQL по соображениям производительности, почему вы хотите добавить дополнительные издержки обработки к доступу к вашим данным, поместив слой БД между вашим приложением и вашими данными?
JSON - это текстовый формат. Итак, если вы обращаетесь к своим данным через JSON, это особенно верно, если у вас есть двоичные файлы, потому что они должны быть закодированы в uuencode, шестнадцатеричном или Base 64. Путь преобразования может выглядеть следующим образом
двоичный файл <> JSON (кодированный) <> BSON (кодированный)
Было бы эффективнее поместить путь (URL) к файлу данных в вашем документе и сохранить сами данные в двоичном виде.
Если вы действительно хотите сохранить эти файлы неизвестной длины в вашей БД, то вам, вероятно, лучше поместить их в GridFS и не рисковать уничтожением параллелизма при обращении к большим файлам.
источник
Вложенная глубина для документов BSON: MongoDB поддерживает не более 100 уровней вложенности для документов BSON.
Более подробная информация Вист
источник
Возможно хранение в блоге -> комментарии отношение в не реляционную базу данных на самом деле не лучший дизайн.
Вероятно, вы все равно должны хранить комментарии в отдельной коллекции к сообщениям в блоге.
[редактировать]
Смотрите комментарии ниже для дальнейшего обсуждения.
источник
Согласно https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1
Если вы ожидаете, что запись в блоге может превышать ограничение в 16 МБ, вы должны извлечь комментарии в отдельную коллекцию, сослаться на запись блога из комментария и выполнить соединение на уровне приложения.
источник