MongoDB - 更改文档结构

时间:2011-07-12 23:42:59

标签: optimization mongodb

我正在使用数据库MongoDB,并且由于资源消耗大(使用几乎100GB的数据集),我需要缩小文档的字段名称(类似“ALTER TABLE”)。

这样做是否容易/自动?

2 个答案:

答案 0 :(得分:6)

我想是的!查看$renamehttp://www.mongodb.org/display/DOCS/Updating#Updating-%24rename

使用带有大量update()的查询在您的数据集上运行$rename,我认为这样可以获得您想要的效果。

答案 1 :(得分:4)

没有内置的方法可以执行此操作,但您可以使用首选语言编写脚本来执行此操作。另一种方法是更新应用程序代码以重写文档,以便在访问文档时使用较短的字段名称,这样做的好处是不需要停机或协调脚本和应用程序代码。

请注意,即使缩小字段名称,您的数据集仍将保持相同的大小 - MongoDB将更新文档,在文档周围留下可用空间,因此您可能看不到工作量减少设定尺寸。如果您希望文档增长,这可能是有利的,因为如果有足够的可用空间来容纳新文档,则当文档增长时,MongoDB将就地更新。

或者,您可以使用repairDatabase命令,这将缩小您的数据集。 repairDatabase可能非常慢,并且需要相当多的可用磁盘空间(它必须制作整个数据库的完整副本)。 repairDatabase也会锁定整个数据库,因此您应该在计划的维护时段内运行它。

最后,如果您使用的是1.9或更高版本,则可以使用compact命令。 compact所需的可用空间少于repairDatabase(它需要大约2千兆字节的磁盘空间),并且一次只能在一个集合上运行。 compact以与repairDatabase相同的方式锁定数据库,并且在维护窗口期间应用有关调度压缩的相同警告。