有关多对多的文档,对[保留]的文档进行了辩护]]

问题描述 投票:-2回答:1

我正在设置我的数据库结构,但不确定使用案例的正确解决方案是什么:

  • 我有数百万个项目文档,所有文档都包含静态信息,永远不会改变。
  • 我有一个组文档,其中包含项的分组的键值对(过滤器)列表。
  • 项目可以属于多个组
  • 可以更改组的键值对,这将更改属于该组的项
  • 我有2个解决方案,但不确定哪个是正确的:

  1. Group文档包含一个ID列表,该ID引用了属于该Group的所有Item文档,这可能会非常庞大​​。在此解决方案中,如果要更改组的过滤器,则必须遍历所有项,提取其ID并将其分配给组。这将导致单个更新,但也会导致非常大的Item引用列表。
{
  "_id": "af355",
  "_rev": "string",
  "filters": {
    "key1": "value",
    "key2": "value",
    ...
  },
  "itemIds": [
    "s5f6a",
    "afaf4",
    "12dr4",
    ...(could potentially be millions)
    ]
}

项目(数百万)

{
  "_id": "s5f6a",
  "_rev": "string",
  "field1": "value",
  "field2": "value"
}
  1. 也要让这些项包含一个ID列表,这些ID也引用了它们所属的组,这永远不会很大。如果网上论坛的过滤条件发生了变化,那么我将不得不遍历所有项目,并更新所有匹配但不再匹配的项目,这可能是数百万的更新。

{
  "_id": "af355",
  "_rev": "string",
  "filters": {
    "key1": "value",
    "key2": "value",
    ...
  }
}  

项目

{
  "_id": "s5f6a",
  "_rev": "string",
  "field1": "value",
  "field2": "value"
  ...
  "groups": [
    "af355",
    "46sdf",
    ...(Small list)
    ]
}

这些解决方案中的哪些将产生更好的性能和最少的资源使用,或达到最佳的平衡?如果有更好的解决方案,我欢迎您提出意见。

我正在建立我的数据库结构,不确定自己的用例是什么正确的解决方案:我有数百万个Item文档,它们的静态信息永远不会改变。我有...

database nosql couchdb
1个回答
0
投票

一般而言,如果您的模型是不可变的,则将使用榻榻米的细节。一旦更改率增加,任何依赖更新大型列表或文档内部对象的模型都将易于更新冲突。

© www.soinside.com 2019 - 2024. All rights reserved.