0

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

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

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

4

1 回答 1

0

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

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

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

于 2013-05-23T12:54:34.517 回答