mongodb - 配置 MongoDB "schema"的最佳实践时间/地点是何时/何地?

标签 mongodb

在使用 MongoDB 的应用程序中,何时/何地是进行关系数据库中迁移的数据库更改的最佳位置?

比如创建索引或者设置shard key应该如何管理?这段代码应该去哪里?

最佳答案

最好有意识地在 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 将停止对数据库的其他操作,直到索引完成。想象一下代码中的无害更改,需要一个新索引来提高性能——这个更改被粗心地 checkin 并部署到生产环境中……突然间,您的生产环境 MongoDB 正在为您的应用程序服务器加速,因为 MongoDB 是在做任何其他事情之前在内部添加新索引first... outch!显然这已经发生在一些人身上,这就是为什么他们在 MongoDB session 上不断提醒人们要小心不要“以编程方式”要求索引。

新版本的 MongoDB 允许后台索引——你应该总是这样做,例如db.yourcollection.ensureIndex(..., {background: true})

否则,会发生不那么有趣的事情:

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

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

关于mongodb - 配置 MongoDB "schema"的最佳实践时间/地点是何时/何地?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7654907/

相关文章:

c# - 为什么我在使用 AnyIn 时收到错误 "The serializer for field ... must implement IBsonArraySerializer"?

mongodb - 使用 $text 搜索从 mongoDB 数组中获取特定元素

node.js - 如何使用mongoose根据mongodb中子字段的值获取数据?

javascript - 是否可以以编程方式配置 MongoDB?

mongodb - 如何使用 MongoDB 过滤子文档中的数组

javascript - 在 mongoose 中按 _id 值范围选择文档

javascript - 如何在 MongoDB 的 V8 引擎中创建可通过 db.eval 访问的全局对象?

javascript - 如果值存在,如何避免将字段设置为空字符串

node.js - Mongoose 不会将数据保存到 MongoDB

mongodb - Hyperopt mongotrials 问题与 Pickle : AttributeError: 'module' object has no attribute