有关MongoDB中主要索引的良好做法

时间:2017-10-17 19:22:59

标签: mongodb database-design nosql

我有一个包含2个主要集合的MongoDB数据库。数据库存储不时到达的原始数据和Web应用程序使用的已处理数据。

  • RAW:这里我存储了永远不应修改的原始数据。只有当新的原始数据到达时,它才能插入新的文档。为了示例,我们可以假设此集合中的每个文档都对应一个产品。
  • PRODUCTS:这里我存储了与产品相对应的文档(我在RAW中存储的同一组产品,但此处产品还有一些其他字段)。一般的想法是,一旦新的原始数据到达,新文档也会插入到此集合中,但首先我会计算一些额外的指标并向新文档添加其他字段。此集合还与Web应用程序进行通信,通过该应用程序,用户不仅可以浏览数据,还可以修改某些字段(这是我希望RAW与Web应用程序完全分离的原因之一。)

所以这就是问题:我应该在两个集合中有单独的ObjectId主索引(因此它们的_id字段之间没有关系),或者使用相同的{{1在两个集合中。

在我看来,第二种方法可能更好,因为它节省了我建立一个索引(否则在_id集合中我将不得不维护PRODUCTS和其他一些领域的索引能够将文件从_id映射到PRODUCTS)。

但是,我也相信这个策略可能存在问题,我看不到。

所以,我会对这个问题的任何提示表示感谢。

1 个答案:

答案 0 :(得分:0)

根据我的理解,PRODUCTS集合将包含从RAW集合派生的条目。在这种情况下,我在重新使用_id集合中RAW集合的PRODUCT字段时看不到任何问题。

话虽如此,最好使用您的应用程序和您的预期使用模式来测试此设计。从MongoDB方面来看,_id只需要在单个集合中是唯一的,因此跨两个不同集合的重复_id条目不会造成问题。如果对_id值存在任何混淆,则可能会在应用程序层而不是数据库层中发生。