MongoDB提示,技巧和陷阱

Chr*_*tow 15 mongodb

根据您的经验,请分享您最喜欢的MongoDB提示,例如:

  • 你从困难中学到了什么?
  • 哪些功能可能会出乎意料,特别是对于来自RDBMS背景的新手?
  • 哪种最佳做法最重要?

Wol*_*old 3

我已经使用 MongoDB(并尝试了 MongoMapper 和 Mongoid 适配器与 Rails)几个月了。我之前对 SQL 的了解很深。以下是我的观察:

  • 缺乏架构和迁移并不意味着您可以获得免费午餐。您的应用程序代码必须携带 SQL 模式负责的逻辑和约束。您必须更加严格地手动迁移数据,例如,当您重命名属性时,否则您的应用程序代码必须处理同一事物的多个名称(在本示例中)。这很容易导致数据库中出现大量垃圾和/或模糊错误。MongoDB 很棒,因为您不必预先定义要存储的内容,并且可以将整个数组和对象层次结构放入任何属性中。在某些方面,易用性的安全性会降低很多,我认为我们仍在围绕如何避免在这里积累大量技术债务来发展许多最佳实践。
  • 没有联接——这意味着您在设计集合时必须了解数据访问模式(至少是需要可扩展的模式)。
  • 无事务——如果集合中的相同记录可通过并发请求进行更新,则这会带来竞争条件的风险。对于单个集合更新,存在原子操作,Mongoid(但 MongoMapper 不支持)特别好地支持和使用这些操作。
  • 任何记录的记录限制为 16MB。text与 SQL 中可以接受任意大小内容的字段不同,MongoDB 对任何记录都有 16MB 的硬性限制。当您计划存储大型数组、对象层次结构等时,这一点值得考虑。