何时嵌入或引用数据
在上一单元,我们将客户地址和密码数据嵌入了新的客户文档。 这样做可减少请求数,从而提高性能并降低成本。 但不能随时嵌入数据。 有规则规定何时该在文档中嵌入数据,而何时又该另起一行引用数据。
何时应嵌入数据?
当数据满足以下条件时,将数据嵌入文档:
- 同时读取或更新:同时读取或更新的数据几乎总是建模为单个文档。 这减少了请求数量,而请求数量是我们提高效率的目标。 在我们的场景下,所有客户实体均同时读取或写入。
- 一对一关系:例如,Customer 和 CustomerPassword 具有一对一关系。
- 一对几关系:在 NoSQL 数据库中,必须将一对多关系区分为有界或无界。 Customer 与 CustomerAddress 是有界一对多关系,因为电子商务应用程序中的客户通常只会向少数地址发货。 当关系有界时,称为一对几关系。
何时应引用数据?
当数据满足以下条件时,将数据作为单独的文档引用:
独立读取或更新:在将生成大型文档的实体组合在一起时,尤其如此。 Azure Cosmos DB 中的更新需要替换整个项目。 如果文档具有一些经常更新的属性以及大量主要是静态的属性,则将文档一分为二高效得多。 拆分后,一个文档包含一小组经常更新的属性。 另一个文档则包含静态的恒定值。
一对多关系:如果关系是无界的,则尤其是这样。 如果文档大小以未知或无限的倍数增加,则这些更新的成本和延迟将持续增加。 这是因为更新的大小不断增加,需要消耗更多的 RU/s,并且有效负载通过网络传输,这本身也是低效的。
多对多关系:我们将在稍后的产品标签单元中探索这种关系的示例。
分隔这些属性可减少吞吐量消耗,从而提高效率。 它还可减少延迟,从而提高性能。