MongoDB - Изменить структуру документа - PullRequest
3 голосов
/ 13 июля 2011

Я работаю с базой данных MongoDB и из-за большого потребления ресурсов (работа с набором данных почти 100 ГБ) мне нужно уменьшить имена полей документов (что-то вроде «ALTER TABLE»).

Есть ли простой / автоматический сделать это?

Ответы [ 2 ]

6 голосов
/ 13 июля 2011

Я так думаю!Проверьте $rename: http://www.mongodb.org/display/DOCS/Updating#Updating-%24rename

Запустите update() для вашего набора данных с запросом с набором $rename с, и я думаю, что вы получите то, что вы хотите.

4 голосов
/ 13 июля 2011

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

Обратите внимание, что даже после сокращения имен полей ваш набор данных останется неизменным по размеру - MongoDB обновит документы на месте, оставляя свободное пространство «вокруг» документов, поэтому вы можете не увидеть сокращения в вашей работе установить размер. Это может быть полезно, если вы ожидаете, что ваши документы будут расти, так как MongoDB будет обновляться на месте, когда документ увеличивается, если на нем достаточно свободного места для размещения нового документа.

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

Наконец, если вы используете версию 1.9 или новее, вы можете использовать команду compact. compact требует меньше свободного места, чем repairDatabase (ему требуется около 2 гигабайт дискового пространства), и работает только с одной коллекцией за раз. compact блокирует базу данных так же, как и repairDatabase, и применяются те же предупреждения о планировании сжатия во время окна обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...