2012-11-13 72 views
1

我將一堆文檔插入到一個集合中,然後cron作業將它們移動到另一個集合。Mongodb在集合之間移動文檔後崩潰

我這樣做的原因是,有一個非索引集合需要快速存儲數據,第二個集合是索引的,因此插入速度慢,所以cron作業移動數據。

我使用下面的腳本來移動數據

db.smalldaily.find().forEach(function(doc){db.largedaily.save(doc);db.smalldaily.remove(doc);}); 

問題是移動數據之後完成,mongod的似乎崩潰了,當我登錄到蒙戈殼型db.large,然後按用於自動完成收集名稱的TAB按鈕,mongodb會轉爲昏迷狀態,我需要重新啓動mongod服務才能使其工作。

我做錯了什麼或有關mongodb還不成熟的傳言部分屬實?

我使用MongoDB的外殼版本:2.2.1在CentOS

+0

除了按下TAB按鈕之外,還有什麼會導致它崩潰?此外,您的查詢現在有些被截斷,您是否可以放入另一空白行以使其完全可見? – shelman

+0

大約有多少個文檔是你通常使用的呢? – JohnnyHK

+0

@JohnnyHK很多,大約一百萬 – Yasser1984

回答

3

所以,這基本上是運行的,在跨越這些提供高達70文件外殼迭代產生一個巨大的forEach循環服務器端JavaScript和我打賭在運行時,(非映射)內存的數量很高。

如果你使用驅動程序在shell的外部運行,你可能根本看不到問題。遷移是否完成,然後不清理內存?如果是這樣,那麼這可能是問題。

在下一個版本(2.3+)中會發生變化,以使shell性能更高,但現在通過驅動程序而不是內部驅動程序可能會更好。首先,在batches中這樣做會更有效,而不是一次迭代一次。儘管如此,如果這很容易重現,特別是如果您可以提供示例數據集,這將是bug report的完美飼料,以便開發人員可以找出在處理此操作時shell爲何出現問題的原因循環。