开发者

When/Where is the best-practices time/place to configure a MongoDB "schema"?

In an app that uses MongoDB, when/where is the best place to make database changes that would be migrations in a relational database?

For example, how should creating indexes or setting shard keys be manage开发者_开发百科d? Where should this code go?


it's probably best to do this in the shell, conciously!, because you could cause havoc if you accidentally start such a command at the wrong moment and on the wrong instance.

Most importantly: do this offline on an extra slave instance if you add an index on an existing DB! For large data sets, building an index can take hours, even days!

see also:

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

If you have a large data set, make sure to read up on the 4square outage last year..!!

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


one of the main reasons for not wanting to put indexing in a script or config file of some sort is that in MongoDB the index operation is blocking(!) -- that means MongoDB will stop other operations on the database from proceeding until the indexing is completed. Just imagine an innocent change in the code, requiring a new index to improve performance -- and this change is carelessly checked-in and deployed to production ... and suddenly your production MongoDB is feezing up for your app-server, because MongoDB is internally adding the new index first before doing anything else... outch! Apparently that has happened to a couple of folks, that's why they keep reminding people at the MongoDB conferences to be careful to not 'programmatically' require indexes.

New versions of MongoDB allow background indexing -- you should always do that e.g. db.yourcollection.ensureIndex(..., {background: true})

otherwise, not-so-fun stuff happens:

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

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜