如何在 cosmos db 中构造多对多关系

How to structure many-to-many relationships in cosmos db

我正在从事一个新项目,有人建议我看一下 Cosmos DB 以用于我的数据存储,因为它将成为一个全球 SaaS 应用程序,可能服务于数十万用户。

因为这是我第一次涉足 NoSQL 数据库,所以我不可避免地 运行 需要学习很多东西,但我觉得我一直在慢慢掌握它并且已经居然还挺兴奋的。

现在更重要的是:我有一个相对简单的数据结构,我似乎无法理解你将如何实现,我几乎已经接受了它可能只是这样的事实在非关系数据库中不能很好地工作的工作负载。但正如我所说,我完全是绿色的,所以我来这里是为了进行健全性检查,以防我遗漏了一些明显的东西

我有一个数据结构,由一个 "user" 对象和一个 "post" 对象组成,我需要根据无限制的标签数组将它们关联起来,以基本上创建它们看起来像这样的自定义提要

用户:

{
    id: 1,
    name: "username",
    interests: [
        "fishing",
        "photography",
        "stargazing",
    ]
}

Post:

{
    id: 1,
    title: "My post title",
    body: "My post content",
    tags: [
        "tennis",
        "sport",
        "photography",
    ]
}

我想要return所有帖子的列表,这些帖子在他们的标签中有一个或多个给定用户的兴趣所以基本上是这样的查询:

SELECT DISTINCT VALUE Posts FROM Posts
JOIN tag IN Posts.Tags
WHERE tag IN <<user.interests>>

在 SQL 中,我会创建一个 table 用户和一个 table 帖子,并根据共享 tags/interests 加入他们,但我不能我的生活弄清楚如何对此进行非规范化(如果可能的话)。我真的 运行 在我第一次尝试只有 2 个对象时就进入了 NoSQL 的不可能流程之一吗?还是我只是个菜鸟?

你走对了!有两篇非常好的文章描述了如何为 NoSQL 建模数据。如果您不熟悉这种类型的数据存储,绝对值得一读。

Data modeling in Azure Cosmos DB,特别是关于多对多关系的部分。

How to model and partition data on Azure Cosmos DB using a real-world example

希望这对您有所帮助。