Подтвердить что ты не робот

Укорачивает ли названия собственности MongoDB?

В Прокручивание блога с помощью mongoDB, express и Node.js автор упоминает, что это хорошая идея сократить имена свойств:

..... проблема с mongoDB - это размер данных на диске... каждая запись хранит все имена полей.... Это означает, что часто это может быть более пространственно-эффективным, чтобы иметь свойства, такие как "t" или "b" чем "титул" или "тело", однако, опасаясь путаницы, я бы избегал это, если это действительно необходимо!

Я знаю о том, как это сделать. Меня больше интересует, когда это действительно необходимо?

4b9b3361

Ответ 1

Чтобы процитировать Дональд Кнут:

Преждевременная оптимизация - это корень всего зла (или, по крайней мере, большая часть это) в программировании.

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

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

Ответ 2

Сохраняйте приоритет для значимых имен выше приоритета для коротких имен, если ваша собственная ситуация и тестирование не дают конкретной причины для изменения этих приоритетов.

Как упоминалось в комментариях SERVER-863, если вы используете MongoDB 3.0 + с опцией хранения WiredTiger с включенным мгновенным сжатием, длинные имена полей становятся еще меньше проблемой, так как сжатие эффективно заботится о сокращении для вас.

Ответ 3

Нижняя строка: держите ее такой же компактной, насколько она по-прежнему остается значимой.

Я не думаю, что это действительно необходимо укоротить до одного имени. В любом случае вы должны сократить их как можно больше, и вы чувствуете себя комфортно с ним. Допустим, у вас есть имя пользователя: {FirstName, MiddleName, LastName}, вам может быть полезно пойти с ровным именем: {first, middle, last}. Если вы чувствуете себя комфортно, вы можете быть в порядке с именем: {f, m, l}.
Вы должны использовать короткие имена: поскольку он будет потреблять дисковое пространство, память и, следовательно, может несколько замедлить ваше приложение (меньшее количество объектов для хранения в памяти, более медленное время поиска из-за большего размера и более длительного времени запроса, поскольку поиск более данных занимает больше времени).
Хорошая документация по схеме может сказать разработчику, что это означает город, а не название. В зависимости от вашего стека вы даже можете скрыть разработчика от работы с этими сокращениями через некоторые вспомогательные утилиты для его отображения.

Наконец, я бы сказал, что нет никаких указаний о том, когда и сколько вы должны сократить свои имена схем. Это сильно зависит от вашей среды и требований. Но вы хороши, чтобы держать его компактным, если вы можете предоставить хорошую документацию, объясняющую все и/или предлагая утилиты, чтобы облегчить жизнь разработчиков и администраторов. В любом случае админы, вероятно, будут взаимодействовать непосредственно с mongodb, поэтому я думаю, что хорошую документацию не следует упускать.

Ответ 4

Если использовать подробный xml, попытка улучшить его с помощью пользовательских имен может быть очень важна. Комментарий пользователя в билете SERVER-863 в его случае; Я "храню внешне определенные объекты XML, с подробным наименованием: имена полей, возможно, составляют 70% от общего размера записи. Таким образом, токенизация имени поля может быть гигантской победой, как с точки зрения эффективности ввода-вывода, так и эффективности памяти.

Ответ 5

Добавляем свои 2 цента на этом..

При проектировании модели данных можно избежать длинных именных атрибутов (или "AbnormallyLongNameAttributes" ). В моей предыдущей организации мы тестировали стратегию коротких названных атрибутов, такую ​​как организация, определяющая 4-5 буквенно-кодированных строк, например:

  • Имя = FSTNM,
  • Фамилия = LSTNM,
  • Процент ежемесячного дохода от прибыли = MTPCT,
  • Годовой прогноз продаж = YOYSP и т.д.)

Несмотря на то, что мы наблюдали улучшение производительности запросов, в основном из-за уменьшения объема данных, передаваемых по сети, или (поскольку мы использовали JAVA с MongoDB) сокращение длины "ключей" в документе MongoDB/Java Map кучи, общее улучшение производительности было менее 15%.

По моему личному мнению, это была микро-оптимизация, которая приходилась за дополнительную плату (и огромную головную боль) на поддержание/разработку дополнительной системы управления Data Attribute Dictionary для каждой из моделей данных. Эта система должна обладать широкой прозрачностью организации при отладке приложения/ответа на запросы клиентов.

Если вы окажетесь в положении, при котором повышение эффективности этой стратегии до 20% приносит вам выгоду, возможно, пришло время увеличить ваши серверы MongoDB/выбрать другую стратегию моделирования/запроса данных, иначе выберите другую базу данных.