我应该在 NoSQL DB (Cosmos) 中使用单个 master table 吗?

Should I use a single master table in a NoSQL DB (Cosmos)?

我正在尝试在 Cosmos DB 中对数据建模。 我们试图保持密钥一致,即 Country_Id、Category_Id 等,即它应该来自 lookup/master 由于我们在 NoSQL 中并没有真正强制执行外键约束,因此将所有查找集中到一个集合中是否有好处,即 id、type、value、["other attribs"] 例如对于州,type = "state", name="Texas"? 我看到人们不鼓励在 SQL 数据库(MUCK 等)上使用相同的模式。我们是否也应该在这里使用多个主表?

在许多情况下,您可以使用单个容器来存储应用程序的主数据或查找数据,并使用鉴别器 属性(例如“/type”)作为数据的分区键。

好处是您可以将所有这些数据保存在一个容器中,从而降低将其存储在单个容器中的吞吐量成本。此外,在执行诸如在页面上添加用户界面元素之类的操作时,您可以在单个查询中获取所有数据,并在您的 where 子句中使用 IN 语句来仅获取您需要的数据。 (我建议在初始调用后缓存在内存中,这样每个用户就不需要再次获取相同的数据)。

另一件要记住的事情是,您应该考虑使用 Change Feed 来维护此数据与使用它的其他容器之间的任何引用完整性。对于像 Cosmos DB 这样的 NoSQL 数据库,您通常会希望对数据进行非规范化。 Change Feed 可用于保持数据同步。

如果您一般不熟悉 Cosmos DB 和 NoSQL 建模,我鼓励您观看此视频,这将为您打下良好的入门基础。 https://youtu.be/3gEytt-Jops?t=1559