在使用MongoDB的應用程序中,何時/哪裏是進行數據庫更改的最佳位置,這些數據庫更改將在關係數據庫中進行遷移?什麼時候/哪裏是最佳實踐時間/地點來配置MongoDB「模式」?
例如,應該如何管理創建索引或設置分片鍵?代碼應該放在哪裏?
在使用MongoDB的應用程序中,何時/哪裏是進行數據庫更改的最佳位置,這些數據庫更改將在關係數據庫中進行遷移?什麼時候/哪裏是最佳實踐時間/地點來配置MongoDB「模式」?
例如,應該如何管理創建索引或設置分片鍵?代碼應該放在哪裏?
最好在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/
的主要原因不想把索引在某種類型的腳本或配置文件之一是MongoDB中的索引操作阻塞(!) - 這意味着MongoDB將停止對數據庫執行其他操作直到索引完成。試想一下代碼中的一個天真的變化,需要一個新的索引來提高性能 - 而這個變化是不小心檢入並部署到生產環境中的......突然間你的產品MongoDB正在爲你的應用程序服務器開發,因爲MongoDB是內部添加新的索引第一個做任何事情之前...... outch!顯然這發生在一些人身上,這就是爲什麼他們不斷提醒人們在MongoDB會議上要小心,不要'編程'需要索引。
新版本的MongoDB允許後臺索引 - 你應該總是這樣做,例如, db.yourcollection.ensureIndex(...,{背景:真})
否則,不那麼有趣的事情發生了:
是管理或有任何工具跟蹤這個?推薦的工作流程是否真的只需登錄到shell並運行命令? – Zach
@Zach:我參加過幾次MongoDB會議......在幾次會談中,他們告誡不要無意中觸發索引操作..請在帖子結尾處查看我的評論。您應該與MongoDB客戶支持溝通! – Tilo
@Zach,將索引和分片鍵視爲管理員功能而不是代碼功能。分片鍵只能設置一次,對大數據的索引很難改變。至於工作流程,可以思考Ruby風格的「遷移」腳本,但這裏也沒有真正的標準。坦率地說,對於大數據,索引是大交易,最好留給管理員。 (當然,你可以使用管理界面,你沒有*使用shell) –