Performance mongodb中具有三层文档层次结构的数据模型

Performance mongodb中具有三层文档层次结构的数据模型,performance,mongodb,data-modeling,Performance,Mongodb,Data Modeling,在我的项目中,我们有一个典型的客户订阅场景,在这个场景中,我们必须在mongo中存储详细信息。我们已经确定了此场景的以下数据模型: i、 e.一个客户可以有多个订阅,每个订阅可以有多个激活码 { "CustomerCompany" : "abc", "CustomerEmail" : "abc@abc.com", "CustomerID" : "124598", "CustomerName" : "abc xyz", "CustomerType" : "Indivisual"

在我的项目中,我们有一个典型的客户订阅场景,在这个场景中,我们必须在mongo中存储详细信息。我们已经确定了此场景的以下数据模型:

i、 e.一个客户可以有多个订阅,每个订阅可以有多个激活码

{
  "CustomerCompany" : "abc",
  "CustomerEmail" : "abc@abc.com",
  "CustomerID" : "124598",
  "CustomerName" : "abc xyz",
  "CustomerType" : "Indivisual",
  "IsOurCustomer" : true,
  "Subscriptions" : [{
      "ContentDeliveryFormat" : "XML",
      "ContentDeliverySchedule" : "Daily",
      "ContentProviderName" : "asdf",
      "ContentType" : "CFR",
      "ContentCategory" : "CFR",
      "SubscriptionExpiryDate" : "11/19/2014 15:22:39:800 IST",
      "SubscriptionID" : "111",
      "ActivationCount" : 1,
      "Activations" : [{
          "ActivationCode" : "35f110b8-1b59-44c5-9874-adcc9d008898",
          "ActivationCodeGenDate" : "05/23/2014 15:22:59:997 IST",
          "ActivationExpiryDate" : "05/28/2014 15:22:59:997 IST",
          "ActivationDate" : null,
          "ActivationStatus" : "Unused"
        }],
      "SubscriptionStatus" : "Subscribed"
    }],
  "_id" : ObjectId("537f1a7ce96e0b34e98b8de7")
}
因为我是mongodb的新手,对此的详细搜索无法说服我在这里发布我的查询

我有以下两个问题:

  • 建模正确的wrt是mongodb要遵循的最佳实践吗

  • 如果我遵循这种方法,那么使用当前的数据模型 搜索输入为最差结果激活码的文档 O(n3)的壳效率。我认为如果系统规模扩大,这 这将是一个巨大的禁忌

专家们能对这种情况发表评论吗


预先感谢

< P>你需要考虑以下几点。文档一个接一个地写入磁盘。当您稍后向数组中添加更多内容时,文档会增长,并且可能需要移动以适应数据添加。另外,数组值很可能会被索引,这意味着所有这些索引都需要随着文档的移动而更新。最后,对于你的应用程序,当你加载客户数据时,你真的需要加载所有订阅和激活密钥吗?如果答案是否定的,那么你应该考虑我所描述的整体画面,并可能将其保持在单独的集合中。文档越大,放入RAM的文档就越少。底线是,一旦文档最初创建,您希望文档内有多少动态增长