2011-10-04 41 views

回答

2

最好在shell中這樣做,很有意思!,因爲如果你在錯誤的時刻和錯誤的實例中意外啓動了這樣的命令,你可能會造成嚴重的後果。

最重要的是:如果您在一個現有的數據庫上添加一個索引,可以在一個額外的從機實例上脫機執行此操作!對於大數據集,構建索引可能需要數小時甚至數天!

還看到:

http://www.mongodb.org/display/DOCS/Indexes

http://www.javabeat.net/articles/print.php?article_id=353

http://www.mongodb.org/display/DOCS/Indexing+as+a+Background+Operation

http://nosql.mypopescu.com/post/1312926692/mongodb-indexes-and-indexing

如果你有一個大的數據集,請務必在4square停運讀了去年..!!

http://www.infoq.com/news/2010/10/4square_mongodb_outage

http://blog.foursquare.com/2010/10/05/so-that-was-a-bummer/

http://highscalability.com/blog/2010/10/15/troubles-with-sharding-what-can-we-learn-from-the-foursquare.html


的主要原因不想把索引在某種類型的腳本或配置文件之一是MongoDB中的索引操作阻塞(!) - 這意味着MongoDB將停止對數據庫執行其他操作直到索引完成。試想一下代碼中的一個天真的變化,需要一個新的索引來提高性能 - 而這個變化是不小心檢入並部署到生產環境中的......突然間你的產品MongoDB正在爲你的應用程序服務器開發,因爲MongoDB是內部添加新的索引第一個做任何事情之前...... outch!顯然這發生在一些人身上,這就是爲什麼他們不斷提醒人們在MongoDB會議上要小心,不要'編程'需要索引。

新版本的MongoDB允許後臺索引 - 你應該總是這樣做,例如, db.yourcollection.ensureIndex(...,{背景:真})

否則,不那麼有趣的事情發生了:

https://jira.mongodb.org/browse/SERVER-1341

https://jira.mongodb.org/browse/SERVER-3067

+0

是管理或有任何工具跟蹤這個?推薦的工作流程是否真的只需登錄到shell並運行命令? – Zach

+0

@Zach:我參加過幾次MongoDB會議......在幾次會談中,他們告誡不要無意中觸發索引操作..請在帖子結尾處查看我的評論。您應該與MongoDB客戶支持溝通! – Tilo

+1

@Zach,將索引和分片鍵視爲管理員功能而不是代碼功能。分片鍵只能設置一次,對大數據的索引很難改變。至於工作流程,可以思考Ruby風格的「遷移」腳本,但這裏也沒有真正的標準。坦率地說,對於大數據,索引是大交易,最好留給管理員。 (當然,你可以使用管理界面,你沒有*使用shell) –

相關問題