Чтобы вставить в MongoDB: изменяется ли размер документа, преобразованного в BSON?

Хорошо, я новичок в MongoDB и читал об этом книгу, где-то говорится

«Документы размером более 4 МБ (при преобразовании в BSON) не могут быть сохранены в базе данных»

Хорошо... Ограничение 4 МБ для документов? Что меня смутило, так это то, что они говорят в скобках: (при преобразовании в BSON): Значит, размер изменяется при преобразовании в BSON?

потому что через несколько строк он говорит:

"Чтобы дать вам представление о том, сколько 4 МБ, весь текст Война и мир составляет всего 3,14 МБ"

Какие? Хорошо, теперь я в замешательстве. Помоги мне!


person Bohn    schedule 26.05.2012    source источник


Ответы (1)


Теоретически файл BSON также содержит имена полей, которые занимают место и некоторые накладные расходы. Как правило, накладные расходы не превышают нескольких байтов. Помимо некоторых служебных данных документа (несколько байтов), каждое сохраненное значение также имеет несколько дополнительных байтов памяти. Для простой строки это 6 дополнительных байтов (1 для типа, 4 для длины и 1 для завершающего символа \0). Вы можете увидеть накладные расходы на веб-сайте bsonspec.org. Длина самой простой строки не меняется «при преобразовании в BSON», но добавление длины и т. д. делает ее немного больше. Большинство драйверов имеют вспомогательную функцию для определения размера документа. В PHP вы бы сделали:

<?php
$document = array(
    '_id' => new MongoId(),
    'name' => 'Derick'
);
echo strlen(bson_encode($document)), "\n";
?>

Что в данном случае печатает 39.

Кроме того, текущий лимит документа составляет 16 МБ — он изменился с момента написания книги.

person Derick    schedule 26.05.2012
comment
очень интересно. Спасибо, сэр. Итак, вопрос: скажем, у меня есть текстовый файл, разделенный запятыми и т. д., который на моей локальной машине занимает этот текстовый файл 5 мегабайт ... так что эти 5 мегабайт НЕ Я могу сравнить с этим ограничением в 16 МБ. и скажите да ладно это 5МБ а это 16МБ, так что все будет хорошо... Я правильно понял? - person Bohn; 27.05.2012
comment
Довольно много, но это не будет так уж сильно. Все зависит от количества файлов, длин имен полей и т. д. Также обычно не следует хранить целый CSV-файл в одном документе. В основном вы можете сравнить документ со строкой в ​​обычной базе данных. - person Derick; 27.05.2012
comment
Хммм... Значит, я имел в виду ОЧЕНЬ ПЛОХОЙ дизайн? У каждого пациента был идентификатор пациента, я хотел сохранить их как ключ, а затем для значений этих пациентов, у каждого из них был большой текстовый файл, который на локальном диске занимал где-то от 2 до 45 мегабайт ... Я думал о сохранении весь текстовый файл для каждого пациента, как BLOB... - person Bohn; 27.05.2012
comment
Я бы не стал этого делать, так как вы не сможете сделать запрос, если сохраните их в одном поле... если вас это не волнует, взгляните на GridFS, который предназначен для файла хранение. - person Derick; 27.05.2012