Azure cosmosdb 我应该把帖子和评论作为不同的收藏吗?

Azure cosmosdb 我应该把帖子和评论作为不同的收藏吗?,azure-cosmosdb,Azure Cosmosdb,我正在阅读以下文档 在本文档中,他们有以下帖子 { "id":"ew12-res2-234e-544f", "title":"post title", "date":"2016-01-01", "body":"this is an awesome post stored on NoSQL", "createdBy":User, "images":["http://myfirstimage.png","http://mysecondimage.png

我正在阅读以下文档

在本文档中,他们有以下帖子

{
    "id":"ew12-res2-234e-544f",
    "title":"post title",
    "date":"2016-01-01",
    "body":"this is an awesome post stored on NoSQL",
    "createdBy":User,
    "images":["http://myfirstimage.png","http://mysecondimage.png"],
    "videos":[
        {"url":"http://myfirstvideo.mp4", "title":"The first video"},
        {"url":"http://mysecondvideo.mp4", "title":"The second video"}
    ],
    "audios":[
        {"url":"http://myfirstaudio.mp3", "title":"The first audio"},
        {"url":"http://mysecondaudio.mp3", "title":"The second audio"}
    ]
}
他们说下面的评论可能只是另一篇带有父属性的文章

{
    "id":"1234-asd3-54ts-199a",
    "title":"Awesome post!",
    "date":"2016-01-02",
    "createdBy":User2,
    "parent":"ew12-res2-234e-544f"
}

{
    "id":"asd2-fee4-23gc-jh67",
    "title":"Ditto!",
    "date":"2016-01-03",
    "createdBy":User3,
    "parent":"ew12-res2-234e-544f"
}
这是否意味着我将两种文档类型存储在同一个集合中,或者我应该有两个集合,每个文档类型对应一个集合


我知道我可以将它们存储在同一个集合中。我的问题是什么是最好的方法,因为文档不清楚。

这实际上是一个设计和偏好的问题,不确定这是属于StackOverflow指南的编码答案

这篇文章提出了一种组织帖子和评论的方法,因为两者在概念上非常相似,它们可能是相同的“东西”。但是您可以将它们划分为不同的文档类型,并将它们存储在不同的集合中,这实际上取决于您希望如何查询信息以及如何将查询功能公开给体系结构中的其他服务。这是我们的一位项目经理给出的一个非常好的架构回答

关于利弊:

如果您将两种对象类型都存储在同一个集合中,则只需维护一个
DocumentClient
,并且您可以使用同一个对象类型查询评论和帖子,它们将共享集合在索引、分区和资源调配方面的配置。这可能是最具成本效益的选择


如果您单独存储它们,则需要维护多个
DocumentClient
,但您可以为每个客户提供不同的RU(如果出于某种原因,您希望提供更多的RU来发布而不是评论),如果您愿意,保持不同的分区策略。

像往常一样处理这类问题:视情况而定

将多个文档类型放在一个集合中肯定不是一个“坏习惯”,尽管您可能希望考虑在文档中添加一个“type”参数或类似的参数,以便更容易地过滤它们

您在每次收集时支付固定费用(取决于RU/s)。因此,如果你提供了许多收集,你可能会付出太多。在大多数情况下,如果您的数据共享一个公共域,则更少的集合可能更好。
它还高度依赖于您希望读取和写入数据的频率。主要是关于如何查询数据。找到一个好的解决方案也可能会影响您的决策。

请看关于NoSQL建模数据的演示。。。我相信你的问题已经在这里讨论过了