【问题标题】:MongoDB - Using email id as identifier across collectionsMongoDB - 使用电子邮件 ID 作为跨集合的标识符
【发布时间】:2013-07-07 13:28:42
【问题描述】:

我有一个用户集合,其中 email_id_id 是唯一的。我想跨各种集合存储用户数据。我想在这些集合中使用 email_id 作为标识符。因为使用 email_id 而不是复杂的 ObjectId 在 shell 中查询这些集合很容易。

这是正确的方法吗?在使用大 emailId 创建索引时会出现任何性能问题吗?

另外,如果您计划启用 email_id 更改,请不要考虑此选项 未来的选择。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    虽然关系数据库鼓励您对数据进行规范化并将其分布在许多表中,但这种方法通常不是 MongoDB 的最佳选择。 MongoDB 不支持对多个集合甚至来自同一集合的多个文档的 JOIN。因此,您应该尝试以一种可以通过搜索单个文档来统计每个查询的方式来设计您的数据库文档。这意味着将有关用户的所有信息存储在一个文档中通常是一个好主意。

    例外情况是用户的某些数据点无限增长(例如用户在论坛中发布的帖子)。首先,MongoDB 文档有大小限制,其次,当文档大小增加时,数据库需要频繁地重新分配其硬盘空间。这会减慢写入速度并导致数据库中出现碎片。在这种情况下,最好将每个实体放在不同的集合中。

    当您搜索相等时,索引覆盖的字段的大小无关紧要。当您在 email_id 上有一个唯一索引时,它应该与通过 _id 搜索一样快。

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      相关资源
      最近更新 更多