2016-07-04 3 views
3

Я работаю с монго, один из документов, которые я сохраняю, превысил максимум 16 Мб. Интересно, может ли минимизация структуры помочь в этом аспекте. Вот почему у меня есть вопрос по названию. Если представление bson уже минимизирует документ, то другой attemp рядом со мной не поможет ни в чем.Представлено представление BSON?

+0

Документ BSON очень компактный, и я не уверен, как вы будете его компактнее, - создание собственного хранилища данных для MongoDB. Если ваш документ превышает максимальный предел, я предлагаю пересмотреть структуру документа. – Saleem

+1

Возможно, вам стоит вернуться к модели данных. 16Mb много. Что вы храните в одном документе? Плюс я не думаю, что это поможет, но что такое механизм хранения, который вы используете? Должен быть подключен тигр как его механизм хранения по умолчанию в новых версиях mongo и выполняет сжатие. Смотрите это для более подробной информации: https://docs.mongodb.com/manual/core/wiredtiger/#compression –

+0

@IshanSoni да я согласился, что мой вопрос был более целенаправленным, чтобы увидеть, если уменьшенная документ, представляющий ту же структуру был эквивалентен неминифицированному документу с точки зрения использования пространства. – mjsr

ответ

1

MongoDB хранит данные в представлении BSON, где он сохраняет имена полей и их содержимое. Общий размер объекта зависит от длины полей, а также от содержания полей. Если вы хотите сократить имена полей, вы можете уменьшить свой документ.

Вы можете быстро проверить, вставив документ с длинным и коротким именем поля:

> db.test.insert({abcde:1}) 
> db.test.stats() 
{ 
    "ns": "test.test", 
    "count": 1, 
    "size": 37, 
    "avgObjSize": 37, 
    ... 

Если вы можете сократить имя поля, можно добиться некоторого снижения размера объекта:

> db.test2.insert({a:1}) 
> db.test2.stats() 
{ 
    "ns": "test.test2", 
    "count": 1, 
    "size": 33, 
    "avgObjSize": 33, 
    ... 

Из приведенных выше примеров сокращение названия поля от abcde до a привело к уменьшению размера объекта: 37 байт против 33 байт, что составляет 4 байта с использованием более короткого имени поля.

+0

отлично, делает то же самое, но с полями я также вижу увеличение размера! ... возможно, минимизация объекта - это не плохая идея! (Я новичок в монго и не знал о методе статистики, он содержит много полезной информации :)). – mjsr

0

BSON уже является очень компактным форматом, кроме того, механизм WiredTiger сжимает данные на уровне страницы, а не на уровне документа.

Если вы достигли предела в размере 16 МБ для своих документов, вам может потребоваться разделить ваши документы или переделать ваши базы данных.

1

Если размер документа составляет более 16 МБ даже после его измельчения, вы можете использовать GridFS, чтобы сломать этот документ.

В соответствии с MongoDB документации,

GridFS это спецификация для хранения и извлечения файлов, которые превышают предельный размер BSON-документ 16 МБ.

Надеется, что это помогает ..

1

Ключи к документам содержат много места в BSON, поскольку они хранятся дословно, поэтому, если вы можете их закодировать, вы сэкономите много байтов. Это может быть приемлемым, если ваш код будет единственным читателем этих данных, так что ни один человек не должен будет помнить, что

const MY_INSANELY_LONG_OBJECT_PROPERTY_NAME = "a"; 

var thePropertyValue = myObject[MY_INSANELY_LONG_OBJECT_PROPERTY_NAME];