2010-12-23 51 views
15

根据您的经验,请分享您最喜爱的MongoDB提示如:MongoDB的提示,技巧和陷阱

  • 你学到了什么艰辛的道路?
  • 哪些功能可能会出乎意料,特别是对于来自RDBMS背景的新手?
  • 哪些最佳实践最重要?
+0

请社区的wiki,否则它将被迅速关闭 – 2010-12-24 00:48:14

回答

3

我已经使用MongoDB(并尝试使用Rails的MongoMapper和Mongoid适配器)几个月了。我以前深深扎根于SQL。这里是我的观察:

  • 缺乏模式和迁移并不意味着你得到免费的午餐。您的应用程序代码将不得不携带SQL模式处理的逻辑和约束。您必须更加严格地手动迁移数据,例如当你重新命名一个属性时,或者你的应用程序代码必须处理同一事物的多个名称(在本例中)。这很容易导致数据库中的大量垃圾和/或模糊的错误。 MongoDB非常棒,因为您不必事先定义要存储的内容,并且可以将整个数组和对象层次结构放入任何属性中。在某些方面,易用性带来的安全性较低,而且我认为我们仍在围绕如何避免在此建立大量技术债务来发展许多最佳实践。
  • 没有加入 - 这意味着当你设计你的收藏时,你必须知道你的数据访问模式(至少那些需要可扩展的模式)。
  • 没有事务 - 如果集合中的相同记录可以从并发请求更新,则会打开竞争条件的风险。对于单个集合更新,有原子操作,这些特别适合Mongoid(但不是由MongoMapper)支持和使用。
  • 任何记录的16MB记录限制。与SQL中的text字段不同,该字段可以具有任意大小的内容,但对于任何记录,MongoDB都有16MB的硬性限制。这是值得您考虑,因为你打算存储,例如大型数组,对象层次结构等。