【问题标题】:email addr as _id instead of OID?电子邮件地址作为 _id 而不是 OID?
【发布时间】:2020-09-24 22:54:05
【问题描述】:

我正在使用 MongoDB 作为我为我所在学区的两所高中构建和运行的列表服务的数据库后端。

每所学校都有自己的数据库。在学校的数据库中会有收藏。

  • 每所学校都有多个电子名单(订阅渠道)
  • 每个订阅者可以订阅 1 个或多个电子列表(如果订阅了零个电子列表,则他们不是订阅者)
  • 每个电子列表(订阅频道)都有自己的集合,其中每个订阅者都有一个文档(记录)。
  • 电子列表集合中订阅者的文档将包含订阅者的电子邮件地址和一些管理信息

会有另一个包含所有电子邮件地址的集合。

  • 此集合中的每个文档都将是 订阅者。
  • 每个文档都将包含有关用户的信息(电子邮件地址,首先 姓名、姓氏等),我将跟踪所有电子列表以 他们订阅了,所以我不必遍历所有 电子列表集合以查找用户拥有的订阅。

我确信所有电子邮件地址都是唯一的。 我的问题是……我应该:

  1. 为 mongo _id 字段创建具有标准 OID 的集合 并为电子邮件字段添加索引
  2. 使用电子邮件地址作为 mongo _id 字段,因为我知道它会是 独特并放弃使用 OID

可能值得注意的是,我正在一个小型服务器上运行。

  • 选项 1 更经典,但 OID 和电子邮件地址是多余的 因为电子邮件地址是唯一的。
  • 从存储角度来看,选项 2 在磁盘上的效率更高 存储空间,并且可能更有效地利用 RAM
  • 我所有的外键关系都基于电子邮件地址。我不能 想想我需要 _id 字段的 OID 的原因。
  • 作为 Mongo 的新手,我想知道我是否会后悔 如果我不选择选项 1(经典 OID),以后会继续。换句话说, 我是否“过度优化”了?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    您提出的使用电子邮件地址作为 _id 的方法在以下情况下会遇到问题:

    • 用户想要更改他们的电子邮件地址(当其他文档引用此电子邮件地址时,这并不容易)
    • 用户想要拥有多个电子邮件地址

    为 _id 字段使用生成的标识符是一个明智的默认设置。

    在您的数据集可能超出项目实际合理的可用 RAM 之前,您绝对不应该考虑空间优化问题(即,如果您正在为小型企业开发应用程序,并且他们的客户群在增长,他们可能买得起具有 16 或 32 GB RAM 的服务器)。

    【讨论】:

    • 感谢您的回答。它有助于设计我的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多